Home - Semprini/cbe GitHub Wiki

The key concept in CBE is that we should store data at the point where there is least change. Changing persisted data is tricky and leads to multiple interfaces being maintained. Industry standard data models (SID, Accord, IFW, Fhir etc) are measured in maturity which means they change less over time. Conversely, products are responding to business changes which means constant changes to schema and versions.

Businesses must stop letting products own data and start treating data as it's own product. To do this we need a data model which can be de-normalized enough to service all contexts within the business but still obvious, extendable and versionable in it's own right.

It is common, especially when implementing SOA to have a master of specific business entities. For example, the Customer entity may be owned by the CRM, Account may be owned by Billing etc. This is bad as the commercial off the shelf (COTS) products store data in a way specific to their inner workings and change with the different releases of the product. This has lead to the integration nightmare that many businesses face. ESBs have been used to combat this but unfortunately, while reducing some forms of coupling this has just lead to a spiderweb of dependencies.

The standard integration pattern is to transform incoming system specific schema to the canonical schema and then transform to each destination schema. Lets store the data in the canonical format like CBE provides as this is where we will have less change over time and therefore fewer versions to maintain and less coupling/vendor lock in.

The CBE projects goal is to provide a generic schema/API/persistence layer which can be used for all the common functions in an enterprise and extended for each industry/business.

Examples from the data model: https://github.com/Semprini/cbe/blob/master/docs/classParty.png https://github.com/Semprini/cbe/blob/master/docs/classLocation.png