In a service-oriented architecture, subsystems can depend on each other in different levels:
- Database level => Foreign keys to enforce data integrity across services on deletions and updates (cascade), and views which use tables from other services to increase performance
- Code reuse => like DLL references in .NET platform, to reduce the amount of code, and to follow DRY
- Service usage => To enforce business centralization; Each service can use any other service in a mesh-like scheme
- UI reuse => To facilitate consistency in UI and take UX higher
Which of these dependencies are encouraged and which are not?