SimpleObject
SimpleModelingリファレンス・プロファイルではエンティティ・オブジェクト (entity object)のベース・クラスとなる抽象クラスSimpleEntityを定義しており、特殊なケースを除いては全てのエンティティ・オブジェクトがSimpleEntityをベース・クラスとすることになっています。
SimpleEntityには一般的な用途でエンティティ・オブジェクトが必要と思われる属性 (Attribute)が網羅されており、ここにドメイン特有の属性を追加するだけでエンティティ・オブジェクトを設計できるようになっています。
SimpleEntityのベース・クラスとしてSimpleObjectを定義しています。
SimpleObjectはSimpleModelingでドメイン・オブジェクト (Domain Object)の共通属性を定義した抽象オブジェクトです。
バリュー・オブジェクト (value object)は必要に応じてSimpleObjectをベース・クラスにすることができます。
またSimpleObjectは様々な汎用属性群を移譲によって組み上げたオブジェクト (Object)で、各汎用属性群を個別にバリュー・オブジェクトの部品として使用することができます。
CMLによる定義
CMLによる定義では文芸モデル (Literate Model)による記述で、定義したモデル (Model)に対する説明が並置されているのでこの情報だけで十分な説明になっています。
SimpleObject
============
本モデルは、SimpleModeling.org におけるドメイン・モデルの汎用的なエンティティの
ベース・オブジェクトである SimpleObject を定義します。
この型は、名前・説明・ライフサイクル・公開・セキュリティ・監査・コンテキスト等の共通的な
属性群を委譲構造で保持し、
状態機械(PostStatus, Aliveness)によるエンティティの状態管理と組み合わせることで、
アプリケーションが使用するエンティティ群の一貫した管理モデルを実現します。
# Class
## SimpleObject
SimpleObjectは、サブクラスのSimpleEntityを経由して
全てのドメイン・エンティティのベース・クラスとなる
抽象オブジェクトです。
また必要に応じてバリュー・オブジェクトの基底クラスにもなります。
主に以下の特徴を持ちます:
- 各種属性群をバリュー・オブジェクトとして委譲
- 投稿状態・活性状態のステートマシンを保持
- 監査情報(バージョン・変更履歴)やコンテキスト情報(外部連携ID、表示優先度など)も包括
### Delegates
- NameAttributes
- ExplanatoryAttributes
- LifecycleAttributes
- PublicationAttributes
- SecurityAttributes
- ResourceAttributes
- AuditAttributes
- ContextualAttributes
### StateMachines
- PostStatus
- Aliveness
# Entity
## SimpleEntity
SimpleEntityは全てのエンティティのベース・クラスとなる抽象クラスです。
SimpleObjectの全性質を受け継いだ上で、永続的識別子(id)を設定しています。
### Base
- SimpleObject
### Attributes
| name | type | mult | description |
|------+------------+------+---------------------------------------|
| id | identifier | 1 | 永続的な論理識別子。URL、DSL、ソースコードなどで一貫して使用される。|
# Value
SimpleEntity, SimpleObjectで属性の定義に使用しているバリュー・オブジェクト
です。
カテゴリごとにバリュー・オブジェクトを定義しています。
目的の応じて個々のバリュー・オブジェクトを個別に部品として再利用することも可能です。
## NameAttributes
ドメイン・オブジェクトの名前を記述するバリュー・オブジェクトです。
目的別に複数の名前を持つことができます。
### Attributes
| name | type | mult | description |
|---------+------------+------+---------------------------------|
| name | name | 1 | オブジェクト名。プログラムで使用 |
| label | i18n_label | ? | ラベル名。UI表示用のラベル |
| title | i18n_title | ? | タイトル名。ドキュメントや画面の見出し |
| code | identifier | ? | アプリケーション管理上のコード |
| alias | i18n_label | * | 略称・別名などのシノニム群 |
| slug | slug | ? | URLやルーティング用の短縮名 |
| shortid | identifier | ? | 短縮ID(UI・印刷用など) |
各種名前は用途に応じて以下のデータ型を用いています。
- プログラム内で使用される名前 : name
- プログラム内で使用される識別子 : identifier
- HTTPなどの運用に沿った名前 : slug
- UIなどで表示される名前 : i18n_label, i18n_title
i18_label, i18n_titleは複数言語を同時格納できるマルチロケールのデータ型で、
国際化されたアプリケーション開発に必要です。
## ExplanatoryAttributes
ドメイン・オブジェクトの内容を説明するバリュー・オブジェクトです。
### Attributes
| name | type | mult | description |
|--------------+-----------+------+-----------------------------------|
| headline | i18n_text | ? | 印象的な見出し・キャッチコピー |
| brief | i18n_text | ? | 簡潔な1文の説明(一覧・UI補助など) |
| tooltip | i18n_text | ? | UI用の補助説明(title属性など) |
| summary | i18n_text | ? | 数文の要約(機能・構造の要点) |
| abstract | i18n_text | ? | 論文・技術文書の導入的な要約文 |
| description | i18n_text | ? | 詳細な本文説明(段落・複数段落可) |
| remarks | i18n_text | ? | 補足・注意・備考など(本体外の補足情報) |
各属性のデータ型にi18n_textを用いており、国際化されています。
## LifecycleAttributes
ドメイン・オブジェクトのライフサイクルを管理するためのバリュー・オブジェクトです。
### Attributes
| name | type | mult | description |
|-------------+------------+------+--------------------------------|
| created_at | datetime | 1 | 作成日時 |
| updated_at | datetime | ? | 最終更新日時 |
| created_by | identifier | 1 | 作成者ID |
| updated_by | identifier | ? | 更新者ID |
## PublicationAttributes
ドメイン・オブジェクトの公開期間や使用期間を管理するためのバリュー・オブジェクトです。
### Attributes
| name | type | mult | description |
|------------+----------+------+-------------|
| publish_at | datetime | ? | 公開日時 |
| public_at | datetime | ? | 公開開始日時 |
| close_at | datetime | ? | 公開終了日時 |
| start_at | datetime | ? | 利用開始日時 |
| end_at | datetime | ? | 利用終了日時 |
## SecurityAttributes
ドメイン・オブジェクトのセキュリティのためのバリュー・オブジェクトです。
### Attributes
| name | type | mult | description |
|--------------------+------------+------+-----------------|
| owner_id | identifier | 1 | 所有者ID |
| group_id | identifier | 1 | 所属グループID |
| rights_owner_read | boolean | 1 | 所有者の参照権限 |
| rights_owner_write | boolean | 1 | 所有者の更新権限 |
| rights_group_read | boolean | 1 | グループの参照権限 |
| rights_group_write | boolean | 1 | グループの更新権限 |
| rights_other_read | boolean | 1 | 他者の参照権限 |
| rights_other_write | boolean | 1 | 他者の更新権限 |
| privilege_id | identifier | ? | 権限セットID |
## ResourceAttributes
ドメイン・オブジェクトの「Webリソース」としてのメタ情報(Atom/RSS、OGP、CCライセンス等)を記述するためのバリュー・オブジェクトです。
### Attributes
| name | type | mult | description |
|--------------+-------------+------+--------------------|
| mimetype | mime_type | ? | MIMEタイプ |
| rights | string | ? | 著作権・利用権 |
| source | string | ? | 出典・元データ |
| authors | i18n_string | * | 著者リスト |
| contributors | i18n_string | * | 貢献者リスト |
## AuditAttributes
ドメイン・オブジェクトの監査に関するバリュー・オブジェクトです。
### Attributes
| name | type | mult | description |
|------------+-------+------+-------------------------------------|
| version | token | ? | 明示的なバージョン識別子 |
| revision | long | ? | 更新版数(自動インクリメント) |
| change_log | text | ? | 変更理由・履歴の記述 |
| audit_note | text | ? | 履歴管理用の補足メモ(レビュー用メモなど) |
## ContextualAttributes
ドメイン・オブジェクトの実行文脈(例: 所属アプリ、表示グループ、外部システム連携)を記録するためのバリュー・オブジェクトです。
### Attributes
| name | type | mult | description |
|----------------+------------+------+-------------------------|
| externalid | token | ? | 外部連携用ID |
| display_level | int | ? | 表示優先度 |
| context_id | identifier | ? | 所属コンテキスト(論理空間) |
| context_app_id | identifier | ? | アプリケーション識別子 |
## MediaAttributes
エンティティに紐づけられるメディア・コンテンツを記述する属性群です。
### Attributes
| name | type | mult | description |
|-------------+------------+------+--------------------|
| url | url | ? | 外部リンク/ページURL |
| images | Image | * | 画像 |
| audios | Audio | * | 音声 |
| videos | Video | * | 動画 |
| attachments | Attachment | * | アタッチメント |
# StateMachine
状態遷移モデルは、業務オブジェクトのライフサイクルを明示的に制御するためのものです。
ユーザーによる操作、またはシステムによる制御フローの設計に活用されます。
- PostStatus: 公開状態のステートマシン(下書き → 公開 → アーカイブ など)
- Aliveness: 活性状態(通常/一時停止/削除)によるアクセス制御
## PostStatus
ドメイン・オブジェクトの公開を管理する状態機械です。
### States
| name | label | description
|------------|-----------+------------------------------------------------------|
| draft | 非公開 | 作成中・編集中の状態(ユーザーに非公開) |
| published | 公開 | 一般公開状態。誰でも閲覧可能 |
| archived | アーカイブ | 公開終了後に非表示として保管された状態(再公開可能) |
| disabled | 非公開 | 管理者等により強制的に非表示とされた状態(再開不可) |
### Transitions
| from | to | trigger | guard | description
|-----------+-----------+---------------+--------+--------------------------------------------------|
| draft | published | publish | | 作成・編集を終えて公開する
| draft | disabled | cancel | | 編集を中止し、無効化する(破棄的操作)
| published | archived | archive | | 公開を終了し、アーカイブとして保存
| published | disabled | disable | | 管理者等による強制非表示(不正など)
| archived | published | republish | | アーカイブ状態から再度公開する
## Aliveness
ドメイン・オブジェクトの有効性を管理する状態機械です。
### States
| name | label | description
|-----------+---------+--------------------------------
| available | 運用中 | 通常利用中の状態
| suspended | 休止中 | 一時停止中。再開可能。
| deleted | 削除済み| 論理削除された状態
### Transitions
| from | to | trigger | guard | description
|-----------+-----------+--------------+--------+-----------------------------
| available | suspended | suspend | | 利用を一時停止する
| suspended | available | resume | | 利用を再開する
| available | deleted | delete | | 利用を終了(削除)
| suspended | deleted | delete | | 停止状態から削除
SimpleEntityの用途
エンティティ・オブジェクトはデータベースなどで管理する永続オブジェクトです。 その用途の一つにニュースやブログなどの記事を記述したオブジェクトがあります。 SimpleEntityではこういったオブジェクト向けの属性を定義しています。
実はこれらの属性は、SalesOrderやReservationといった記事の記述を目的としないオブジェクトでも必要になることが多々あります。 たとえば、Reservationの一覧表示では画面構成によって色々な種類の名前表記や説明文が必要になるかもしれませんし、ReservationをAtomFeedで公開する場合にはそのための属性が必要になってきます。 こういった用途も見越して、よく使われそうな属性をまとめて定義したベース・クラスを用意しています。
SimpleEntity(SimpleObject経由)で定義されている属性群は以下のものです。
-
NameAttributes : 名前
-
ExplanatoryAttributes : オブジェクトの説明
-
LifecycleAttributes : ライフサイクル (Lifecycle)
-
PublicationAttributes : オブジェクトの公開
-
SecurityAttributes : セキュリティ (Security)
-
AuditAttributes : 監査
-
ContextualAttributes : 文脈の記録
また以下の状態機械 (StateMachine)を定義しています。
-
PostStatus : 公開状態
-
Aliveness : 活性化状態
SimpleObjectの用途
SimpleEntityはエンティティとして永続化 (Persistence)するオブジェクトであるため永続化に必要な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)などを追加定義することでエンティティ・オブジェクトの基盤を形成しています。
- シンプルモデリング (SimpleModeling)
-
SimpleModelingは、KnowledgeからDomain Modelを構成し、CMLで形式化し、CozyとAIによって実行可能ソフトウェアへ実現し、Textus上で動作させる、モデリング中心のソフトウェア開発方法論と技術体系です。
- エンティティ・オブジェクト (entity object)
-
エンティティ・オブジェクトは、ドメイン・モデルにおいて一意の識別子(ID)を持ち、ライフサイクルを通じて継続的に識別・追跡されるオブジェクトです。 エンティティは変更可能であり、同じIDを持つ限り状態が変わっても同一のオブジェクトとして扱われます。
- 属性 (Attribute)
-
Attributeとは、ClassifierのInstanceが保持し得る値または参照を表すStructural Featureです。Attributeは名前、Type、Multiplicity、既定値、Constraintなどによって特徴付けられます。
- ドメイン・オブジェクト (Domain Object)
-
ドメイン・オブジェクトとは、ソフトウェアシステムが対象とする現実世界の領域(ドメイン)を表現するためのオブジェクトであり、ビジネスロジックや概念的構造を内包します。 これは、エンティティ、バリュー・オブジェクト、サービス、ルール、イベントなどの要素を含む、ドメイン・モデルを構成する中核的な構造です。 ドメイン・オブジェクトは、システム内でのデータ構造や処理の単なる表現ではなく、問題領域の意味や振る舞いを反映するモデルの一部です。
- バリュー・オブジェクト (value object)
-
バリュー・オブジェクトは、ドメイン・モデルにおいて属性や説明などの意味的まとまりを持った値の集合を表すオブジェクトです。 エンティティのような永続的識別子は持たず、不変であり、等価性は値によって判断されます。
- オブジェクト (Object)
-
Objectとは、Classまたは他のClassifierによって分類され、構造、State、Behaviorを持ち得るInstanceです。Objectは、同じClassifierの他のInstanceと区別して参照できる個体として扱われます。
- Cozy Modeling Language (CML)
-
CML(Cozy Modeling Language)は、オブジェクト・モデルのうち、プログラム生成と実行へ接続する実行可能モデルを記述するSimpleModelingの形式モデリング言語です。
- モデル (Model)
-
Modelとは、対象を特定のPurposeとConcernに基づいて選択し、理解、判断、検証、構築に利用できる形で表した抽象です。対象そのものではなく、目的に必要な要素、関係、意味を保持する表現です。
- 文芸モデル (Literate Model)
-
Undefined
- ライフサイクル (Lifecycle)
-
Lifecycleとは、ある対象が生成されてから終了するまでに、Identityを保ちながら通過するStateとTransitionの範囲です。
- セキュリティ (Security)
-
Securityとは、情報と機能を正当な権限に従って保護し、不正な閲覧、利用、変更、破壊、否認を防ぐ性質です。Confidentiality、Integrity、Authenticity、AccountabilityなどのConcernを含みます。
- 状態機械 (StateMachine)
-
UMLにおけるStateMachineは、Eventの発生によって起動されるTransitionでStateのグラフをたどり、システム要素のevent-driven Behaviorを表すBehaviorです。
- 状態 (State)
-
UMLにおけるStateは、ある不変条件が成立している状況をモデル化したものです。Objectの現在のStateによって、受け付けられるEventやOperation、成立するConstraint、次に可能なTransitionが変わります。
- 永続化 (Persistence)
-
Undefined