Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.Sign up
Sam Newman writes in his book "Building Microservices":
When you start to think about the bounded contexts that exist in your organization, you should be thinking not in terms of data that is shared, but about the capabilities those contexts provide the rest of the domain.
S. Newman. Building Microservices. "O’Reilly Media, Inc.", 2015, p. 34
In order to provide capabilities, a service needs resources. We identified three types of resources which are the building blocks of services:
- Data A service has ownership over some of the system’s data. It is the only instance responsible for changes on that data and optionally informs other services about changes. The data is often, but not necessarily, stored in a database. Data which is published to other services belongs to the published language of the system.
- Operations A service has ownership over business rules and calculation logic. These operations are often but not necessarily based on the data the service owns.
- Artifacts A service has ownership over artifacts. An artifact is a collection of data or operation results transformed into a specific format. An example is a business report which has been built using operations and data.
In order to enable a structured approach to service decomposition, we generalize these resources with the concept of a nanoentity. Examples for possible nanoentities are illustrated in the following figure.
A system refers to a software application whose architecture needs to be decomposed into services.
Candidate Service Cut
Based on the input provided by user representations and the defined criteria priorities, the Service Cutter produces a set of candidate service cuts for a system.