SimpleObject
SimpleModelingリファレンス・プロファイルではエンティティ・オブジェクト (entity object)のベース・クラスとなる抽象クラスSimpleEntityを定義しており、特殊なケースを除いては全てのエンティティ・オブジェクトがSimpleEntityをベース・クラスとすることになっています。
SimpleEntityには一般的な用途でエンティティ・オブジェクトが必要と思われる属性が網羅されており、ここにドメイン特有の属性を追加するだけでエンティティ・オブジェクトを設計できるようになっています。
SimpleEntityのベース・クラスとしてSimpleObjectを定義しています。
SimpleObjectはSimpleModelingでドメイン・オブジェクト (Domain Object)の共通属性を定義した抽象オブジェクトです。
バリュー・オブジェクト (value object)は必要に応じてSimpleObjectをベース・クラスにすることができます。
またSimpleObjectは様々な汎用属性群を移譲によって組み上げたオブジェクトで、各汎用属性群を個別にバリュー・オブジェクトの部品として使用することができます。
CMLによる定義
CMLによる定義では文芸モデル (literate model)による記述で、定義したモデルに対する説明が並置されているのでこの情報だけで十分な説明になっています。
Error[java.io.FileNotFoundException: ./project.d/simpleobject/src/main/simplemodel/simpleobject.cml (No such file or directory)] == SimpleEntityの用途
エンティティ・オブジェクトはデータベースなどで管理する永続オブジェクトです。 その用途の一つにニュースやブログなどの記事を記述したオブジェクトがあります。 SimpleEntityではこういったオブジェクト向けの属性を定義しています。
実はこれらの属性は、SalesOrderやReservationといった記事の記述を目的としないオブジェクトでも必要になることが多々あります。 たとえば、Reservationの一覧表示では画面構成によって色々な種類の名前表記や説明文が必要になるかもしれませんし、ReservationをAtomFeedで公開する場合にはそのための属性が必要になってきます。 こういった用途も見越して、よく使われそうな属性をまとめて定義したベース・クラスを用意しています。
SimpleEntity(SimpleObject経由)で定義されている属性群は以下のものです。
-
NameAttributes : 名前
-
ExplanatoryAttributes : オブジェクトの説明
-
LifecycleAttributes : ライフサイクル
-
PublicationAttributes : オブジェクトの公開
-
SecurityAttributes : セキュリティ
-
AuditAttributes : 監査
-
ContextualAttributes : 文脈の記録
また以下の状態機械を定義しています。
-
PostStatus : 公開状態
-
Aliveness : 活性化状態
SimpleObjectの用途
SimpleEntityはエンティティとして永続化するオブジェクトであるため永続化に必要なid属性を定義していますが、バリュー・オブジェクトのように永続化が必要でないオブジェクトには不適切です。
このため、バリュー・オブジェクトでも使用できるように共通属性のみを定義したSimpleObjectを定義し、SimpleEntityはSimpleObjectのサブクラスという形にしました。
国際化
本記事のsimpleobject.cmlは記事のために日本語版と英語版を用意していますが、実運用では以下のように日本語と英語の記述を併記することが可能です。
ツールにより日本語版、英語版のそれぞれの説明文を抽出して使用します。
参照
用語集
- SimpleEntity
-
SimpleObjectはSimpleModelingリファレンス・プロファイルで定義している、ドメイン・オブジェクトの共通属性を定義した抽象オブジェクトです。 SimpleEntityには一般的な用途でエンティティ・オブジェクトが必要と思われる属性が網羅されており、ここにドメイン特有の属性を追加するだけでエンティティ・オブジェクトを設計できるようになっています。
- SimpleModelingリファレンス・プロファイル (SMRP, SimpleModeling Reference Profile)
-
SimpleModelingのリファレンス・プロファイルです。 SimpleModelingによる文芸モデル駆動開発の説明を具体的にするために、リファレンス・プロファイルを定義しています。
- SimpleObject
-
SimpleObjectはSimpleModelingリファレンス・プロファイルで定義している、ドメイン・オブジェクトの共通属性を定義した抽象オブジェクトです。 NameAttributesやLifecycleAttributesなどの汎用的な属性群をバリュー・オブジェクトとして委譲し、エンティティ・オブジェクトやバリュー・オブジェクトの基底クラスとして再利用可能な構造になっています。 SimpleEntityはこのSimpleObjectを継承し、永続化に必要な識別子(id)などを追加定義することでエンティティ・オブジェクトの基盤を形成しています。
- エンティティ・オブジェクト (entity object)
-
エンティティ・オブジェクトは、ドメイン・モデルにおいて一意の識別子(ID)を持ち、ライフサイクルを通じて継続的に識別・追跡されるオブジェクトです。 エンティティは変更可能であり、同じIDを持つ限り状態が変わっても同一のオブジェクトとして扱われます。
- ドメイン・オブジェクト (Domain Object)
-
ドメイン・オブジェクトとは、ソフトウェアシステムが対象とする現実世界の領域(ドメイン)を表現するためのオブジェクトであり、ビジネスロジックや概念的構造を内包します。 これは、エンティティ、バリュー・オブジェクト、サービス、ルール、イベントなどの要素を含む、ドメイン・モデルを構成する中核的な構造です。 ドメイン・オブジェクトは、システム内でのデータ構造や処理の単なる表現ではなく、問題領域の意味や振る舞いを反映するモデルの一部です。
- バリュー・オブジェクト (value object)
-
バリュー・オブジェクトは、ドメイン・モデルにおいて属性や説明などの意味的まとまりを持った値の集合を表すオブジェクトです。 エンティティのような永続的識別子は持たず、不変であり、等価性は値によって判断されます。
- CML (Cozy Modeling Language)
-
CMLは、Cozyモデルを記述するための文芸モデル記述言語です。 SimpleModelingにおける分析モデルの中核を担うDSL(ドメイン固有言語)として設計されています。 モデル要素とその関係性を自然言語に近い文体で記述できるよう工夫されており、AIによる支援や自動生成との高い親和性を備えています。 CMLで記述された文芸モデルは、設計モデル、プログラムコード、技術文書などに変換可能な中間表現として機能します。
- 文芸モデル (literate model)
-
文芸モデル(Literate Model)は、モデル構造と自然言語による語り(構造化文書)を統合した「読めるモデル」です。 文芸的プログラミング(Literate Programming)の思想をモデリング領域に拡張し、 構造(モデル)+語り(構造化文書) を一体化することで、人間とAIの双方が理解・操作できる知識表現を実現します。 「Literate Modeling(文芸的モデリング)」という発想自体は、 これまでにも一部の研究者や開発者によって試みられてきました。 しかし、それらは主にドキュメント生成やコード理解の支援にとどまっており、 モデルと言語・語り・AI支援を統合した体系的なモデリング手法として確立されたものではありません。 文芸モデル(Literate Model)は、SimpleModelingがAI時代に向けて新たに体系化・提唱したモデリング概念です。 文芸的モデリングの思想を継承しつつ、 AI協調型の知識循環とモデル生成を可能にする知的モデリング基盤として再構成されています。 文芸モデルは、単なるモデル記述技法ではなく、 人間の思考過程や設計意図を語りとしてモデルに埋め込み、 AIがそれを解析・再構成して設計や生成を支援するための枠組みです。