[go: up one dir, main page]
More Web Proxy on the site http://driver.im/ PHP Mentors — 「ドメイン駆動設計読書会@大阪」第8回感想
1.5M ratings
277k ratings

See, that’s what the app is perfect for.

Sounds perfect Wahhhh, I don’t wanna

「ドメイン駆動設計読書会@大阪」第8回感想

プログラミング道場生 kawakawaです。   

ドメイン駆動設計読書会の第8回に参加してまいりましたので、感想を報告させていただきます。   

    

読書会の内容は、レポート担当者さんにより、wikiにまとめて頂いております。   
第8回「ドメイン駆動設計読書会@大阪」公式レポートWiki  

 

第8回では、第5章の「エンティティ」「値オブジェクト」が範囲でした。 
(「サービス」は次回(第9回)予定) 

 

 

「エンティティ」と「値オブジェクト」

「エンティティ」「値オブジェクト」は、それぞれDDD本の用語解説から抜粋すると、  

エンティティ 

  • 本質的に、属性によってではなく、連続性と同一性の連なりによって定義されるオブジェクト。 

 

値オブジェクト 

  • ある特徴や属性を記述するが、同一性の概念を持たないオブジェクト 

以上のように記載されております。 

読書会では、この「連続性」と「「同一性」について話題が上がりました。 

同一性とは、 

  • 概念的な同一と認識するもの 

  • 同一性は追跡できるようにしておくこと 

  • 同一性を間違えると、データ破損に繋がる 

DDD本には、同一性について以下の記載がされていました。 

   第5章 「エンティティをモデル化する」より抜粋 

  • 同一性の定義はモデルから現れる。 

  • 同一性を定義するには、ドメインを理解しなければならない 

 これは、同一性というのは絶対的なものでなく、ドメインによって変化するものという事を、暗示しているのだと思います。 

 

 また、連続性については、 

  • ライフサイクル内において、同一性が続くこと 

  • 例えると、犬は年々成長し、体格は変わっていくが、その犬という概念は変化していない 

 つまり、一定期間(ライフサイクル)内で、同一性が保証される事が、連続性であると言えると思います。 

 

読書会で面白いと思った意見は、東京のミッキーマウスを叩いたら、アメリカのミッキーは痛がるのかどうかという話でした。 

単純に考えると、痛がれば「エンティティ」、痛がらないのなら「値オブジェクト」と言えそうですが、ミッキーは世界で一人(一匹?)という建前があるので、痛がらないといけないわけですね。 

 

エンティティと値オブジェクトの見分け方

エンティティと値オブジェクトの違いは、DDD本から抜粋すると、 

   第5章「 ソフトウェアで表現されたモデル」 

  • あるオブジェクトは、状態が異なったり、さらに別々の実装をまたいだりしたとしても追跡されるような、連続性と一意性を持ったものを表現しているのか? それとも、他の何かの状態を記述する属性なのか? これがエンティティと値オブジェクトとの基本的な区別である。 

とあります。  

そのまま抜き出すと、 

 エンティティ・・・実装をまたいでも、それと判る連続性と一意性を備えているもの 

 値オブジェクト・・・何等かの状態を記述する属性 

このように見る事ができます。 

 

また、第5章「関連」では下記のように記載されています  

  • 多対多の関連を辿る方向を制限することで、実装は一対多へと効果的に減らされる。これははるかに容易な設計である。 

  • ドメインにおける重要度を反映させるように、関連を一貫して限定することによって、その限定された関連は、伝達力がより豊かになり、実装もシンプルになる。 

  • ある区別をすることによって、モデルが明確になり、より現実に即して実装できるようになる 

 

オブジェクト同士の関係を単純化していくことで、モデルが明確になっていき、 エンティティや値オブジェクトを見つけやすくなりそうです。 

しかし、モデルによっては同じオブジェクトでも、エンティティ・値オブジェクトが変わる可能性がある事を、意識しておく必要がありそうです。

何故「エンティティ」と「値オブジェクト」を分ける必要があるのか?

 

オブジェクトをすべて、エンティティとみなす事への注意点として、下記のように記載されております。 

第5章 「値オブジェクト(VALUE OBJECTS)」より抜粋 

  • エンティティの同一性を追跡するのは本質的なことだが、それ以外のオブジェクトに同一性を与えてしまうと、システムの性能を損なうことになり、分析作業が増え、さらに、すべてのオブジェクトの見た目が同じになってしまうことでモデルが台無しになりかねない 

 

ドメインにとって、必要以上にエンティティを設けると、間違いを犯したり、分析に時間がかかってしまうなど、モデルが台無しになってしまうようです。 

無駄なオブジェクトの省き、モデルを単純化するという作業の中には、このようにエンティティを見極めるという作業も含まれている事を知ることが出来ました。

 

 

エンティティとデータベースの関係性

 エンティティのDB登録で、Ruby on RailsのようなActiveRecordパターンを使った実装話で盛り上がりました。 

 話の趣旨としては、 

  • SQLを書くと、間違いやミスが発生しやすい 

   (IDEによる補助を受けらない場合が多いから) 

  • SQLでは、DB実装を意識させられてしまう 

  • DBの構造と、エンティティや値オブジェクトの構造に差異がある場合が多い 

 などの理由により、如何にSQLを書かずに、実装できるかという内容でした。 

個人的には、モデルの変更スピード、コードの変更スピード、DBの変更スピードそれぞれの差異による、モデルとDB設計の剥離が、目下の課題と考えておりましたので、大変勉強になりました。 

コード・ファーストがその解に近いと思っておりますが、まだ考えがまとまっていないので、この点は改めて考えてみたいと思います。 

 

dojo ddd event design dddosaka modeling

See more posts like this on Tumblr

#dojo #ddd #event #design #dddosaka #modeling