【読書メモ】「データモデリングでドメインを駆動する」を読んでエンティティとロールの違いについて考える
「データモデリングでドメインを駆動する」の第9章「マスターの共有──エンティティとロール方式」を読んで多くの学びがあったので、私なりにまとめてみました。
この本にはデータモデリングの指針となる考え方が数多く詰め込まれています。皆さんにとって参考になる一冊ですので、ぜひ手に取って読んでみてください。
背景と課題
弊社では企業情報を複数のシステムで扱っており、情報をどこで管理すべきかについての議論がたびたび起こります。
どのシステムでどの情報を扱うかが明確でないため、他のシステムで必要なデータが不足し、情報連携が必要になるケースが多々あります。その結果、新しい機能を開発する際も関係者を集めて議論を行い、調整に多大な労力を要します。また双方向のデータ連携を実施することになり、運用が複雑で大変なシステムになってしまいました。
この章の内容は、そうしたどの情報をどのシステムで扱うべきかの指針になると思っています。
エンティティとロールの違い
エンティティとは、識別可能な存在であり、システムで管理すべき対象のことです。一方で、ロールは、そのエンティティが特定のコンテキストで果たす役割を指します。
例えば、企業のマスタデータはエンティティとして管理されます。企業は法人番号という一意な識別子を持ち、システム上で管理する対象となります。しかし、経理システムにおいては、その企業は単なる契約相手(ロール) として扱われ、請求先や支払い情報など、経理業務に必要な情報だけを保持することが望まれます。
図1:企業情報をエンティティとロールで分類
区別することのメリット
関心の分離による疎結合性と変更容易性の向上
エンティティをロールとして扱うことで、異なるシステム間で関心の分離を実現できます。これは、各システムは自分にとって必要な情報だけを扱い、他のシステムの詳細を知らずに済むようになります。
例えば、経理システムとジョブマッチングシステムを例に挙げると
- 経理システム: 契約内容や請求先などが重要であり、企業が誰にオファーを送ったかといった情報は不要
- ジョブマッチングシステム: 企業がどの候補者にオファーを送ったか、採用プロセスの進捗などが重要であり、契約の詳細や請求先情報などは不要
このように、各システムが必要な情報だけを持つことで、システム間の依存関係が減り、疎結合性が高まります。これにより、各システムは独立して開発・運用を行うことが可能となります。各チームはそれぞれの目標や目的に集中することができます。1つの改修を行うために複数のシステムで調整を行うといったことも少なくなるため、結果として変更容易性も向上します。
図2:関心の分離による疎結合性と変更容易性の向上
まとめ
エンティティとロールを明確に区別し、各システムでの役割に応じて情報を管理することで、以下のメリットが得られます。
- 関心の分離による疎結合性の向上
- 変更容易性の向上
よく「開発のスピードを上げるにはどうすれば良いか?」という問いが投げかけられることがあります。私の意見としては、物事を進める際に必要な合意形成の数を減らすことが、一番重要だと考えています。そのためには、同じ目標や目的を共有する人々を、組織やシステムの境界の内側に配置することが効果的だと考えています。
エンティティとロールの違いを意識し、役割の違いで関心を分離し、更にはシステムを分けることで、変更に強く柔軟性の高いシステムを構築できると感じました。
参考文献
『データモデリングでドメインを駆動する』第9章「マスターの共有──エンティティとロール方式」
Discussion