C4モデルとは
ソフトウェアのアーキテクチャを表現するためのモデル。
- コンテキスト(context)
- コンテナ(containers)
- コンポーネント(components)
- コード(code) で構成される。
C4モデルは特別な表記法を規定していない。以下、ダイアグラムの図はThe C4 model for visualising software architectureを参考に作成した。
flowchart TD
ソフトウェアシステム:::system
ソフトウェアシステム --> containerA(コンテナ)
ソフトウェアシステム --> containerB(コンテナ)
ソフトウェアシステム --> containerC(コンテナ)
componentA1:::dot
containerA:::dot --> componentA1(コンポーネント)
componentA:::dot
containerB --> componentA(コンポーネント)
containerB --> componentB(コンポーネント)
containerB --> componentC(コンポーネント)
containerB:::container
componentC:::dot
componentA2:::dot
containerC:::dot --> componentA2(コンポーネント)
componentB --> codeA(コード)
componentB --> codeB(コード)
componentB --> codeC(コード)
componentB:::component
codeA:::code
codeB:::code
codeC:::code
classDef dot fill:#eef,stroke:#f66,stroke-width:2px,color:#aaa,stroke-dasharray: 5 5
classDef system fill:#faa,stroke:#333,color:#fff,stroke-width:4px
classDef container fill:#44f,stroke:#333,color:#fff,stroke-width:4px
classDef component fill:#77f,stroke:#333,color:#fff,stroke-width:4px
classDef code fill:#aaf,stroke:#333,color:#fff,stroke-width:4px
レベル1 システムコンテキスト ダイアグラム
対象システムが、それを使用する人や関連する他システムとの関係性、どのような位置づけにあるかを図示する。
flowchart TD
pbc(((銀行の顧客))) --> |口座残高参照,支払いに使用|ibs(インターネットバンキングシステム):::system
ibs --> |口座情報取得,支払いに使用|mbs(メインフレームバンキングシステム)
ibs --> |メール送信に使用|es(E-mailシステム)
es --> |メール送信|pbc
classDef system fill:#faa,stroke:#333,color:#fff,stroke-width:4px
システムコンテキスト ダイアグラムの例
レベル2 コンテナ ダイアグラム
ソフトウェアシステムを拡大したもので、それを構成するコンテナ(アプリケーション、データストア、マイクロサービスなど)を図示する。
flowchart TB
subgraph インターネットバンキングシステム
direction TB
wa(Webアプリケーション\nJava ans Spring MVC):::container
spa(シングルページアプリケーション\nJavaScript and Angular):::container
mba(モバイルアプリケーション\nXamarin):::container
wa --> |顧客のブラウザへ配信|spa
spa --> |API呼び出し JSON,HTTPS|api(APIアプリケーション\nJava ans Spring MVC):::container
mba --> |API呼び出し JSON,HTTPS|api
api --> |読み込み, 書き込み|db[(データベース\nOracle Database)]:::container
end
pbc(((銀行の顧客)))
pbc --> |サイトを開き使用|wa
pbc --> |口座残高参照,支払いに使用|spa
pbc --> |口座残高参照,支払いに使用|mba
es --> |メール送信|pbc
api --> |メール送信に使用|es(E-mailシステム)
api --> |API呼び出し XML,HTTPS|mbs(メインフレームバンキングシステム)
classDef container fill:#44f,stroke:#333,color:#fff,stroke-width:4px
コンテナ ダイアグラムの例
レベル3 コンポーネント ダイアグラム
個々のコンテナにズームインし、その中のコンポーネントを表示する。コードベースのなかの実際の抽象概念(たとえば、コードのグループ化など)にマップする。
flowchart TB
spa(シングルページアプリケーション\nJavaScript and Angular):::container
mba(モバイルアプリケーション\nXamarin):::container
subgraph APIアプリケーション
sic(サインインコントローラ\nSprint MVC Rest Controller):::component
sic --> |使用する|sc(セキュリティコンポーネント\nSpring Bean):::component
rpc(パスワードリセットコントローラ):::component
rpc --> |使用する|sc
rpc --> |使用する|ec(E-mailコンポーネント):::component
asc(アカウントサマリコントローラ\nSprint MVC Rest Controller):::component
asc --> |使用する|mbsf(メインフレームバンキング\nシステムFacade\nSprint Bean):::component
end
spa --> |APIコール\nJSON, HTTPS|sic
spa --> |APIコール\nJSON, HTTPS|rpc
spa --> |APIコール\nJSON, HTTPS|asc
mba --> |APIコール\nJSON, HTTPS|sic
mba --> |APIコール\nJSON, HTTPS|rpc
mba --> |APIコール\nJSON, HTTPS|asc
sc --> |読み込み,書き込み|db[(データベース\nOracle Database)]:::container
ec --> |メール送信で使用|es(E-mailシステム)
mbsf --> |APIコール\nXML, HTTPS|mbs(メインフレームバンキングシステム)
classDef container fill:#44f,stroke:#333,color:#fff,stroke-width:4px
classDef component fill:#77f,stroke:#333,color:#fff,stroke-width:4px
コンポーネント ダイアグラムの例
レベル4 コード
コンポーネントがどのように実装されているかを示す。
---
title: com.bigbankplc.intenetbanking.componet.mainframe
---
classDiagram
MainframeBankingSystemFacadeImpl ..> BankingSystemConnection : +uses
MainframeBankingSystemFacadeImpl ..> GetBalanceRequest : +creates
MainframeBankingSystemFacadeImpl ..> GetBalanceResponse: +parses
MainframeBankingSystemFacadeImpl ..> MainframeBankingSystemException : +throws
BankingSystemConnection ..> AbstractRequest : +sends
BankingSystemConnection ..> AbstractResponse : +receives
MainframeBankingSystemException --|> InternetBankingSystemException
GetBalanceRequest --|> AbstractRequest
GetBalanceResponse --|> AbstractResponse