| Description | The C4 model graphical notation technique for modelling the architecture of software systems. created by the software architect Simon Brown. C4 model provides a way for software development teams to efficiently and effectively communicate their software architecture, at different levels of detail, telling different stories to different types of audience, when doing up front design or retrospectively documenting an existing codebase. |
|---|---|
| References | C4 Model - WebsiteWikipedia - 4+1 architectural view modelWikipedia - C4 Model |
| Framework Concept | Framework Definition | SysFEAT Concept | SysFEAT Definition |
|---|---|---|---|
Component |
The word "component" is a hugely overloaded term in the software development industry, but in this context a component is a grouping of related functionality encapsulated behind a well-defined interface. If you're using a language like Java or C#, the simplest way to think of a component is that it's a collection of implementation classes behind an interface. Aspects such as how those components are packaged (e.g. one component vs many components per JAR file, DLL, shared library, etc) is a separate and orthogonal concern. An important point to note here is that all components inside a container typically execute in the same process space. In the C4 model, components are not separately deployable units. |
Application Component |
An Application Component is a functionnal unit of software (java class, COBOL Program, Batch) that is a consistent, indivisible unit of processing of an Application producing and consuming its Information Outcome Events though APIs (Application Interface). a) Application Components are assembled and orchestrated in Applications. b) Application Components cannot be directly deployed to Computing Systems: they need to be organized in Deployable Application Packages. Application Component is a Micro enterprise asset that sits at the lowest level of Business Software System decomposition. Example: the "Salary and Wage Calculation" component is an Application Component that is part of the "Payroll" Application. References: C4 Model - Level 3 - Component Diagram C4 Model - Metamodel OpenGroup - ArchiMate - Application Component |
Container |
Not Docker! In the C4 model, a container represents an application or a data store. A container is something that needs to be running in order for the overall software system to work. |
Deployable Package |
A Deployable Package is a split of Application code and data according to deployment and runtime purposes. References: C4 Model - Level 2 - Container Diagram |
Container Database |
A container that represents a data store. |
Deployable Data Package |
A Deployable Data Package represents a data part of an Application that must be hosted and accessed by application services (code) to run. Each Deployable Data Package is associated to Required Software Technologys (for data hosting and access) and can host several data structures. Architect can also prescribes a kind of hosting artefact (IaaS/PaaS cloud service or IT server model). References: C4 Model - Level 2 - Container Diagram |
Container Mobile App, Web Browser |
A container that represent client front end of an application. |
Deployable Application Package |
A Deployable Application Package is a split of application code according to deployment criteria at runtime. For example, it may be Front End/Back End or GUI/Business Logic etc.. Each Deployable Application Package is associated to required Software Technology(ies) (for running) and can host code of several Application Component. Architects can also prescribe a kind of hosting artefact (IaaS/PaaS cloud service or IT server model). References: C4 Model - Level 2 - Container Diagram |
Enterprise |
Application Environment |
An Application Environment is an operating context in which an Application defines its interactions with its partners (Partner Application) in the form of API connections (Software Connection). References: C4 Model - Level 1 - System Context Diagram |
|
Level 1- System Context Diagram |
A System Context diagram provides a starting point, showing how the software system in scope fits into the world around it. References: C4 Model - Level 1 - System Context Diagram |
Application Environment |
An Application Environment is an operating context in which an Application defines its interactions with its partners (Partner Application) in the form of API connections (Software Connection). References: C4 Model - Level 1 - System Context Diagram |
Level 2- Container Diagram |
A Container diagram zooms into the software system in scope, showing the high-level technical building blocks. References: C4 Model - Level 2 - Container Diagram |
Application Deployment Environment |
An Application Deployment Environment describes one possible integration context for an Application Deployment Architecture. It contains the subject application deployment architecture and the partner deployment architectures it must be integrated with, meaning it must communicates with via technical connections (with communication protocols, port numbers...). References: C4 Model - Level 1 - System Context Diagram |
Level 3 - Component Diagram |
A Component diagram zooms into an individual container, showing the components inside it. References: C4 Model - Level 3 - Component Diagram |
Application Deployment Architecture |
An Application Deployment Architecture describes one possible deployment configuration of an Application. It contains Deployable Packages to host, prescribed type of hosting and required Software Physical Channels (with communication protocols, port numbers...) to communicate with each other. |
Person |
A person represents one of the human users of your software system (e.g. actors, roles, personas, etc |
End User |
An End User is a Org-Unit who actually uses a particular Business Software System. |
Software System |
A software system is the highest level of abstraction and describes something that delivers value to its users, whether they are human or not. This includes the software system you are modelling, and the other software systems upon which your software system depends (or vice versa). In many cases, a software system is "owned by" a single software development team. References: C4 Model - Software System |
Application |
An Application is a Business Software System that provides a set of Functionality(ies) that End Users see as a single unit. Essentially Applications are architectural constructions resulting from the combinaison of the following four criteria: 1) A group of Functionality that End Users see as a single unit. 2) A managed asset (Managed Application) associated with a budget line in the context of an Application Portfolio. 3) A body of code that is seen by developers as a single unit. 4) A group of deployable software units (Deployable Application Packages) that must be installed together on one or multiple execution nodes (Computing System). Application is a Mezzo enterprise asset that sits between Application System and Application Component in the decomposition of Business Software Systems. Example: " Payroll" is an Application that is part an " HR System" which is an Application System. The "Payroll" Application includes, among other things, the "Salary and Wage Calculation" Application Component. References: C4 Model - Software System Martin Fowler - Application Boundary Microsoft - Architecture Design - Architecture Styles OMG - UAF - Software OpenGroup - ArchiMate - Application Component OpenGroup - TOGAF - Definition - Application Component OpenGroup - TOGAF - Enterprise Metamodel - Physical Application Component |
| Framework reference | SysFEAT Description |
|---|---|
C4 Model - Level 1 - System Context Diagram |
Application Deployment EnvironmentAn Application Deployment Environment describes one possible integration context for an Application Deployment Architecture. It contains the subject application deployment architecture and the partner deployment architectures it must be integrated with, meaning it must communicates with via technical connections (with communication protocols, port numbers...).
Application EnvironmentAn Application Environment is an operating context in which an Application defines its interactions with its partners (Partner Application) in the form of API connections (Software Connection). The Application Functional Architecture domain is used to describe the functional structure and behavior of Business Software Systems. SysFEAT provides three level of granularity to represent software systems: 2) Mezzo Business Software Systems are represented by Applications, which compose Application Systems. 3) Micro Business Software Systems are represented by Application Components and MicroServices which compose Applications. All Business Software Systems provide Functionalitys, expose APIs by means of Application Interfaces, have a data scope defined by Physical Data Domains, perform System Processes and have their interactions described by Software System Scenarios.
Application System Deployment ArchitectureAn Application System Deployment Architecture describes one possible deployment configuration of an Application System. It contains chosen deployment architectures for component applications and identifies communication protocols (and port numbers) they use to communicate with each other. A System Context diagram provides a starting point, showing how the software system in scope fits into the world around it.
Software Deployment Architecture |
C4 Model - Level 2 - Container Diagram |
The Application Deployment Architecture domain defines concepts used to organize Applications in Deployable Packages. It comprises: 1) software code packages (Deployable Application Packages) 2) Data packages (Deployable Data Packages). 3) Prescribed type of hosting 4) required technical connections (with communication protocols, port numbers...) to communicate with each other.
Deployable Application PackageA Deployable Application Package is a split of application code according to deployment criteria at runtime. For example, it may be Front End/Back End or GUI/Business Logic etc.. Each Deployable Application Package is associated to required Software Technology(ies) (for running) and can host code of several Application Component. Architects can also prescribe a kind of hosting artefact (IaaS/PaaS cloud service or IT server model).
Deployable Data PackageA Deployable Data Package represents a data part of an Application that must be hosted and accessed by application services (code) to run. Each Deployable Data Package is associated to Required Software Technologys (for data hosting and access) and can host several data structures. Architect can also prescribes a kind of hosting artefact (IaaS/PaaS cloud service or IT server model).
Deployable PackageA Deployable Package is a split of Application code and data according to deployment and runtime purposes. A Container diagram zooms into the software system in scope, showing the high-level technical building blocks.
MicroServiceA MicroService is a small autonomous unit of software, emphasizing self-management and lightweightness as the means to improve software agility, scalability, and autonomy. 1) MicroServices are automous or assembled and orchestrated as components of Applications. 2) MicroServices can be directly deployed to Computing Systems. MicroServices are both a logical unit of software and a Deployable Package. 3) MicroServices owns their own data store and dot not have any shared stores with other components. MicroService is a Micro enterprise asset that sits at the lower level of Business Software System decomposition. |
C4 Model - Level 3 - Component Diagram |
Application ComponentAn Application Component is a functionnal unit of software (java class, COBOL Program, Batch) that is a consistent, indivisible unit of processing of an Application producing and consuming its Information Outcome Events though APIs (Application Interface). a) Application Components are assembled and orchestrated in Applications. b) Application Components cannot be directly deployed to Computing Systems: they need to be organized in Deployable Application Packages. Application Component is a Micro enterprise asset that sits at the lowest level of Business Software System decomposition. Example: the "Salary and Wage Calculation" component is an Application Component that is part of the "Payroll" Application. A Component diagram zooms into an individual container, showing the components inside it.
MicroServiceA MicroService is a small autonomous unit of software, emphasizing self-management and lightweightness as the means to improve software agility, scalability, and autonomy. 1) MicroServices are automous or assembled and orchestrated as components of Applications. 2) MicroServices can be directly deployed to Computing Systems. MicroServices are both a logical unit of software and a Deployable Package. 3) MicroServices owns their own data store and dot not have any shared stores with other components. MicroService is a Micro enterprise asset that sits at the lower level of Business Software System decomposition. |
C4 Model - Software System |
ApplicationAn Application is a Business Software System that provides a set of Functionality(ies) that End Users see as a single unit. Essentially Applications are architectural constructions resulting from the combinaison of the following four criteria: 1) A group of Functionality that End Users see as a single unit. 2) A managed asset (Managed Application) associated with a budget line in the context of an Application Portfolio. 3) A body of code that is seen by developers as a single unit. 4) A group of deployable software units (Deployable Application Packages) that must be installed together on one or multiple execution nodes (Computing System). Application is a Mezzo enterprise asset that sits between Application System and Application Component in the decomposition of Business Software Systems. Example: " Payroll" is an Application that is part an " HR System" which is an Application System. The "Payroll" Application includes, among other things, the "Salary and Wage Calculation" Application Component. A software system is the highest level of abstraction and describes something that delivers value to its users, whether they are human or not. This includes the software system you are modelling, and the other software systems upon which your software system depends (or vice versa). In many cases, a software system is "owned by" a single software development team. |