Introduction
Cordys is used in small, medium as well as enterprise organisations. Within the Cordys Wiki you can find guidelines and best practices for the Folder structures and CWS environment (see [1]). When you want to use Cordys within the Enterprise I think these best practices are not recommended. In this Blog i will try to explain why.
BPM/SOA 5-layering Architecture
Every enterprise architect knows the 5-layering SOA enterprise architecture pattern:
- GUI - In this layer in which thin and thick clients are using the Business Services.
- Business Services - In this layer the Composite Services, like the enterprise business processes are implemented.
- Services - In this layer the Services are implemented.
- Applications - This layer is the integration layer towards the encapsulated applications.
- Data - This layer contains the data
Most Cordys projects (at least that i have seen) uses Cordys (solutions and projects) like this:
The solutions and projects are divided vertically, so in fact this way you get Application Silo's again, which you want to avoid with SOA and BPM principles. I understand that WS-AppServer integration is nicely integrated with XForms but i doubt if this is the way to go for the enterprise.
For the enterprise I would recommend:
In this case projects and solutions are defined horizontally.
GUI
In this layer projects are defined that contain the Portals, Web Clients, Mobile applications etc that can only use the Business Services layer to execute business functionality.
Business Services
In this layer projects are defined that only implement the business processes. This layer will use the Services layer to compose the processes and composite Services.
Services
This layer contains the Domain Services solutions and projects. Note that these Services only use Common Data Model data and not applications specific data.
Applications
This layer contains the projects that actually encapsulate the applications with webservices.
Data
This layer contains the encapsulation of data, i.e. databases or shared files on directories. Here you will see WS-AppServer projects.
Conclusion
For small and medium sized organisations and projects you can use the solution/project constructions mostly described. However within big enterprises this does not suffice.
The question is of course what the consequences are when you are using the projects horizontally.
Are there any Cordys perfomance penalties? Of course because layering always causes overhead.
What are your experiences with large Cordys projects?
Appreciate your thoughts about organizing the Cordys CWS projects in a different way for Enterprise applications.
BeantwoordenVerwijderenI do understand that in enterprises adopting SOA and ESB would like to have a decoupling between the 5 layers is a way that these layers can be implemented independently in which case your approach to project in CWS might make sense.
However, I do not think it is a good idea to club the UI functionality for all business solutions in one big Cordys project and Business Services for all business solution in another large project. For large enterprises the number of artifacts in each project which are horizontally defined will be difficult to manage mainly for 2 reasons: 1) the solutions normally undergo different project life cycles and change frequencies, 2) the size of the horizontal project will keep growing to reach a very large size.
I would still recommend to develop these layers vertically for each specific business solution. Nonetheless, common generic components required for multiple business solutions could still be defined using the horizontal approach.
Moreover, the layering of solutions in 5 layers is more relevant from runtime point of view which can still be maintained even if you organise your projects vertically. Just my thoughts...
First of all thank you for your response !
BeantwoordenVerwijderenIn fact it is not meant to define just one project for (for example) the UI functionality. There can be several workspaces and projects for each layer. That is why i draw several projects in each layer.
The layering concept is relevant not only from a runtime point of view but also (mainly) from a design time (and governance) point of view.
(See also http://www.soapatterns.org/service_layers.php
So the layering is about:
* Abstracting
* Governance
* Loose Coupling and Strong Cohesion
* Reusability of Services
Hope this clarifies a bit why i think about structuring the Cordys projects.
B.t.w. What is your experience of structuring Cordys projects within large enterprises?