第5回 ArchitectureCanvasのモジュール検証

ArchitectureSpecialist(O11)

ArchitectureCanvasによるモジュールの検証

前回内容はこちら

今回はモジュールの検証ルール及びその他の推奨事項について確認して行きます。
設計していく上で大事な思想っぽいのでしっかり覚えておきたいと思っています。気持ちは…

モジュールの検証をするべき理由

モジュールの検証をするべき理由は主に下記の6つがあります。

1.再利用可能なサービスやコンポーネントの適切な抽象化を促進
 →共通で使う機能などは抽象化して切り離す
2.ライフサイクルの独立性を最適化
 →必要ない無駄な参照を減らす
3.変更の影響の最小化
 →無駄な参照がなくなるのでモジュール単位での修正が容易になる
4.サービスレベルの低下を防ぐ
5.管理できない依存関係をなくす
 →無駄な参照をなくすことで減らせる
6.デプロイを遅延させる柔軟性のないレガシーシステムを回避する
 →ライフサイクルが独立できていれば修正したいモジュールを含むライフサイクル内だけの修正で済む

Architecture Canvasを使用したモジュールの検証ルール

モジュール検証時のルールは下記の通り3つあり、これらはよくテストで出るようなのでしっかり覚えて行きましょう。

ルール1:レイヤー間で上方参照をしない
ルール2:エンドユーザーモジュール同士のサイドリファレンスの禁止
ルール3:循環参照をしない

これらについて詳しく見ていきましょう

ルール1:レイヤー間で上方参照をしない

上方参照があることで2つのモジュールが直接的または、間接的に循環依存するクラスタができてしまう可能性があります。循環依存があることでクラスタないの要素を参照するモジュールがクラスタ全体に依存してしまう可能性があり変更時の影響が大きくなってしまいます。

例)基盤モジュールがエンドユーザーモジュールを参照している例の画像

下記画像ではCore1モジュールが間接的にCore2モジュールを参照してしまう可能性があります、またCore2モジュールもCore1モジュールを参照しかねないです。 さらに、Core2を参照している別のエンドユーザーモジュールも知らないうちにクラスタ内のモジュールに依存する可能性があり、クラスタ内モジュールに変更を加える際にエンドユーザーモジュールも更新する必要がでたり、フットプリントが無駄に大きくなる可能性があります。

ルール2:エンドユーザーモジュール同士のサイドリファレンスの禁止

エンドユーザーモジュール間での参照関係(サイドリファレンス)があると他の画面が更新された際に意図せず画面が更新されてしまう可能性があります。
ここで画面参照は?と疑問に思った方がいたら素晴らしいと思います。
画面参照は例外として許可されています。

例)EndUser1モジュールが別のエンドユーザーモジュールのコンシューマになっているせいでサイドリファレンスが生じてしまっています。他のエンドユーザーモジュールの要素を再利用したい場合は参照されている要素を分析して必要に応じてCoreモジュールに昇格させることを検討する必要があります。

ルール3:循環参照をしない

最初のルールでは異なるレイヤーのモジュール間での循環参照を防ぎました。
2つ目のルールはエンドユーザーモジュール間での循環参照を回避するためのものでした。
ルール3ではコアレイヤーと基盤レイヤーの循環参照を防ぐためのルールです。
循環参照があるということは概念が適切に抽象化されていないということなので見直しが必要です

ルール以外の推奨事項

ルール以外で検証時の推奨事項を4つ追記いたします。

  • Coreモジュールにフロントエンド画面を入れない
    →開発中にテスト画面として追加することはありますが、コアモジュールからは削除する。誤って本番にデプロイされた際にセキュリティの抜け穴になる可能性があります
  • 全てのパブリックエンティティを読み取り専用にする
    →この設定によりコンシューマが直接データベースの作成、更新、削除が不可能になります
    全てのビジネストランザクションをパブリックアクションとして実装してコアモジュールを十分に抽象化して安全なサービスをコンシューマに公開するように心がけましょう
  • 基盤レイヤーにビジネスロジックを入れない
    →ビジネスに依存しないようにして、アプリケーションの全てのドメインで再利用できるようにする必要があります
  • 基盤レイヤーにコアエンティティを入れない
    →基盤レイヤーには非機能要件のみ入れるようにする必要があります。ただし、基盤レイヤーモジュールにエンティティを一切入れてはならないという意味ではなく、全てのトランザクションを監査する汎用サービスを作成し、監査エンティティを作成する必要がある場合などは問題ありません。これはあくまで非機能要件をサポートするケースであるため許されています。

まとめと次回予告

今回はモジュールの検証時に使用する3つのルールと4つの推奨事項を学びました。

・3つのルール
 1.レイヤー間で上方参照をしない
 2.エンドユーザーモジュール同士のサイドリファレンスの禁止
 3.循環参照をしない

・4つの推奨事項
 1.Coreモジュールにフロントエンド画面を入れない
 2.すべてのパブリックエンティティを読み取り専用にする
 3.基盤レイヤーにビジネスロジックを入れない
 4.基盤レイヤーにコアエンティティを入れない

このページを離れる前に上記7つを空見て言えるくらいにしておけるといいかもしれないですね。
次回はアプリケーションの検証ルールについて学習して行きます。

コメント

タイトルとURLをコピーしました