たなかこういちの開発ノート

システム開発に携わる筆者が、あれこれアウトプットするブログ

要件から設計する行為を、「Object」、「Subject」、「Attribute」、「Projection」で説明してみる

(Domain's) Objectとは?
 
業務プロセスに対する要求・要件の分析観点で抽出される、業務上のひとつの“管理対象”を認識したものを「(Domain's) Object」と、ここでは称することとします。「業務上のひとつの“管理対象”」とは、、業務プロセス内にひとつの部分的状態遷移サイクルが見出される時、その部分的状態遷移の各状態を表現するに必要なデータセットです。
 
Objectの定義には、そのObjectの個々のインスタンスを識別する(Primary) Key=IDの定義が含まれます。しかし、他の一般のAttributeはObjectとしては規定しません。Attributeは次に説明するSubjectが定義します。ObjectはAttributeを定義しませんが、Attributeの“置き場”を提供します。
 
Objectの存在は、おおよそひとつの(サブ)ドメインの存在を表します。
 
Subjectとは?
 
「Subject」とは、Objectのひとつの射影(Projection)、と定義します。Subjectは、射影元となるObjectに装備されるはずのAttributeを規定します。いいかえると、「Objectに特定のAttributeが備わる」と言えるのは、「そのObjectのひとつの射影たるSubjectが、そのAttributeを必要としたから」だと理解します。AttributeはSubjectが定義し、Objectに関連付けられます。
 
ここでいうSubjectは、UMLユースケースでいうサブジェクトと同義となります。Subjectはひとつの要件セットに由来します。Subjectの存在は、おおよそそのSubjectの射影元のObjectが表す(サブ)ドメインにおけるひとつのユースケース(のセット)を表します。
 
ひとつのObjectに対して複数のSubjectが存在し得ます。(これは「ひとつの(サブ)ドメインには、複数ユースケース(のセット)があり得る」という事に対応します。)ObjectにAttribute A1とA2が備わるとした時、A1はあるSubject S1由来で、A2は別のSubject S2由来である、といったことがあり得ます。
 
ObjectはVirtualな仮説、SubjectこそがRealに現存する要件
 
事後設計を見ると、まずObjectが定義され、そのObjectを元に様々なProjectionがSubjectとして導出されている、ように見えるものです。しかし通常、事前には、まず個々の要求・要件に対応するSubjectが複数個認識されます。Objectはその後に、その複数のSubjectを同時に成立させられる仮説として、逆射影で形成する、という作業が行われることで、ようやく導き出されます。実装物としては、多くはObjectが実体を持っていてSubjectに相当するものはビューなどの論理的なものとして構築されますが、Objectは常に仮説であり、Subjectの方こそがリアルに存在する事実なのです。
 
◆以上

関連記事

ドメインとデータ、サブジェクトとオブジェクト、および、事実は常に事実であり、真実は常に仮説である、という話 - たなかこういちの開発ノート

「サブジェクト指向」について(私的実践DDD、その4)(1 of 2) - たなかこういちの開発ノート