タグ

dddとDDDに関するAkinekoのブックマーク (129)

  • DCIアーキテクチャについて語ってみるよ - uehaj's blog

    Trygve Reenskaug氏とJames O. Coplien氏らが提唱する「DCIアーキテクチャ」について、id:digitalsoulさんが論文を翻訳してくださり、またその解説とサンプル実装(groovy, scala)を示してくださっており、読んでみたところ、大変興味深いので理解した限りを書いてみます。 おじさん登場 たとえば、あるおじさんがいたとします。 このおじさんは、白いスーツ、グラデーションの入ったサングラスと金ぴかのネックレスをつけて新宿歌舞伎町に出かけ「やくざ」として振るまいます。とおりかかったお兄さんがそのおじさんに出会い、目が合ってしまい、因縁を付けられ、お金を巻き上げられてしまいます。 さて、おじさんは家に帰ります。実は、このおじさんは家では良いお父さんとして振る舞います。赤ちゃんはこのおじさんの目を見て笑いかけます。おじさんは相好を崩し、オーよしよし。 さて

    Akineko
    Akineko 2019/04/09
  • 役割駆動設計で巨大クラスを爆殺する - Qiita

    大量のメソッドを保有し、数千、数万行単位にぶくぶく膨れ上がった巨大クラス。別名「神クラス」とも「大きな泥団子」とも呼ばれる、長大で複雑で密結合で極めて変更が困難なアイツ。 そんな巨大クラスの退治に有効な、ドメイン駆動設計を基思想とする「役割駆動設計」を紹介致します。 解決したい課題、狙う効果 数千、数万行単位の巨大クラスの登場を抑止する。 小さくシンプルな構造に落とし込み、堅牢で変更容易性の高い設計へ昇華させる。 例1:筆者をモデリング 分かりやすくなるよう、まず私を例にモデリングしてみます。私は以下のような特徴があります。 IT企業の従業員 家族がいる(, 子供) 趣味ゲーム制作している ダメな設計 何も考えずに人クラスとして設計すると、よく以下のような構造になりがちです。 従業員として仕事をする、父親として家族サービスする、趣味としてゲーム制作する、それぞれのメソッドが備わってい

    役割駆動設計で巨大クラスを爆殺する - Qiita
    Akineko
    Akineko 2019/04/07
  • ドメイン駆動設計入門

    2. エリック・エヴァンスのドメイン駆動設計 エリック・エヴァンス (著), 今関 剛 (監修), 和智 右桂 (翻訳), 牧野 祐子 (翻訳) 出版社: 翔泳社 発売日: 2011/4/9 原書発売日: 2003/8/22 http://www.amazon.co.jp/エリック・エヴァンスのドメイン駆動設計 -IT-Architects’Archive-ソフトウェア開発 の実践-エリック・エヴァンス /dp/4798121967/

    ドメイン駆動設計入門
    Akineko
    Akineko 2019/03/29
  • ドメイン駆動設計のドメイン駆動とはなにか - 日記マン

    ここ最近の仕事は、かなり硬直化した自社サービスをリファクタリングしている。 そのなかでアプローチのひとつとして、ドメイン駆動設計を勉強して、取り組んでいる。 エバンスDDDを手に取り、ネットで様々な知見を調べながらも、理解が定着してきている。 ここらでいちど、ドメイン駆動設計について、理解をアウトプットしておく。 ドメイン駆動設計は「ビジネスの複雑さ」に立ち向かう 「ドメイン駆動」の設計とは、ドメインに特化した型設計 ドメイン駆動設計の導入の決め手はドメインロジックが複雑かどうか レイヤードアーキテクチャは、ドメイン層を隔離する 自社サービスをグロースさせていくためにも、ドメインの洞察・抽出・再設計を繰り返す おすすめの書籍・資料 エバンスDDDや実践DDDは初学はとても苦しんだ。 入門するなら、これらのを手に取る前に、増田さんの素晴らしい資料たちがおすすめ。 増田さんのスライド,

    ドメイン駆動設計のドメイン駆動とはなにか - 日記マン
    Akineko
    Akineko 2019/03/29
  • ドメイン駆動設計 本格入門

    ドメイン駆動設計の考え方、ドメイン駆動設計を理解する三つのキーワード、エヴァンスのススメ、レガシーに立ち向かう、マイクロサービスとドメイン駆動設計Read less

    ドメイン駆動設計 本格入門
    Akineko
    Akineko 2019/03/23
  • ドメインモデルの根拠とドメインモデル貧血症の対策について - Chatwork Creator's Note

    ChatWork Advent Calendar 2017の10日目の記事です。 こんにちは。かとじゅん([Twitter:@j5ik2o]) です。 何を書こうかと悩んだのですが、社内で意見を聞いたところ、やはりDDD関連がよいとなりました。 Scalaコードでわかった気になるDDD この記事も、もう四年前ですっかり古くなりました。最近どういう観点で実践しているかまとめてみます。(DDD初級者という方は、まず上の記事を読むことをお勧めします) DDDを実践するにあたっての個人的な問題点は2つあります。ひとつは、「いきなりドメインモデルを作ることができない」という問題。もうひとつは、ドメインモデルを作り上げても実装コードに役に立つ振る舞いが思いつかず、いわゆる「ドメインモデル貧血症*1」になりやすいという問題です。このような問題は、僕がコミュニティで関わった多くのエンジニアから耳にします。

    ドメインモデルの根拠とドメインモデル貧血症の対策について - Chatwork Creator's Note
    Akineko
    Akineko 2019/03/19
  • 副作用を最小限に抑えるために必要なこと - かとじゅんの技術日誌

    若干、難しい話ですが、設計力を上げたいプログラマ向けなエントリ。私も道半ばです。一緒に考えていただければ幸いです。 堅牢なアプリケーションを実現する上で「副作用を最小限に抑える」という設計思想は、非常に重要な示唆を含んでいます。 その「副作用」とは、そもそもどんな定義なのでしょうか。 DDDでは"side effect"と定義していて、以下のように解説されています。 Domain-Driven Design: Tackling Complexity in the Heart of Software: Evans, Eric: 8601300201665: Amazon.com: Books エリック・エヴァンスのドメイン駆動設計 作者:Eric Evans翔泳社Amazon P250より引用 In standard English, the term side effect implies

    副作用を最小限に抑えるために必要なこと - かとじゅんの技術日誌
    Akineko
    Akineko 2019/03/19
  • 「現場で役立つシステム設計の原則」批判 (1) ~何のために、「データとロジックを一体に」するのか?~

    増田亨氏の「現場で役立つシステム設計の原則]」の評判が高いようです。 このが、オブジェクト指向の初級者に受け入れられ易いことはわかります。オブジェクト指向的なプログラミングが出来ていない現場で、明日からでも出来そうなことが平易に書かれているからです。オブジェクト指向の入り口を指し示しているように見える。 一方で、私としては、このが指し示す入り口は、入りやすいかもしれないけれど、結局はどこにも通じていないのではないかと疑っています。 稿では、そのように私が考える理由について、3つの切り口からご説明したいと考えています: 何のために、「データとロジックを一体に」するのか?ポリモーフィズムは何のために?「ドメインモデル」とは何か?長くなるので、今回は、一番目の「何のために、『データとロジックを一体に』するのか?」について。 批判 (1) 何のために、「データとロジックを一体に」するのか?

    「現場で役立つシステム設計の原則」批判 (1) ~何のために、「データとロジックを一体に」するのか?~
  • ドメイン駆動設計の学習曲線とブレークポイント

    ドメイン駆動設計の実践力に転機が訪れる時。 チームがオブジェクト指向を体で覚えた時。 チームがインクリメンタルな設計を体で覚えた時。 チームでオブジェクト指向とインクリメンタルな設計を体で覚えるための指針。 QCon Tokyo 2016

    ドメイン駆動設計の学習曲線とブレークポイント
    Akineko
    Akineko 2019/03/18
  • ドメイン駆動設計のエンティティとクリーンアーキテクチャのエンティティ

    概要 ドメイン駆動設計の有名な用語にエンティティというものがあります。 ほとんどドメイン駆動設計の代名詞のひとつと言っても過言でないほどの有名さを誇るこちらの用語ですが、なんとクリーンアーキテクチャにもまったく同じエンティティという用語が出てきます。 このエンティティという用語は名前こそ同じではありますが、実は完全に同じものを指しているわけではありません。 とはいえまったく違うものである、というわけでもありません。 要するにややこしい。 この記事はこのややこしい用語について、ドメイン駆動設計とクリーンアーキテクチャのそれぞれのエンティティが何を指していて、それがどのように異なっているのかについてを解説します。 それぞれのエンティティ そもそもエンティティとは何でしょうか。 英和辞典を引くとエンティティとは「存在[実在]物」といった意味が出てきます。 これはかなり抽象的な意味です。 つまり、

    ドメイン駆動設計のエンティティとクリーンアーキテクチャのエンティティ
  • ドメイン駆動設計を理解する3つのキーワード - ソフトウェア設計を考える

    ドメイン駆動設計との出会い 10年前に、エヴァンスのドメイン駆動設計を初めて読んだ時は、書いてある内容がほとんど理解できなかった。 あまり、面白いとも思わなかった。 当時は、現場でバグだらけのコードと格闘していた。障害が報告されるたびに、リファクタリングを参考に、該当個所の長いメソッドや大きなクラスを片端からリファクタリング。その結果、コードがわかりやすくなり、やっかいなバグが単純な修正で解消できてしまうことの効果に驚き、設計の重要性を再認識していた。 それ以前は、UNIXとC言語、OracleとPL/SQLという、オブジェクト指向ではない世界で技術を身に着けてきた。 どちらかというとオブジェクト指向には、ネガティブな印象を持っていた。現場では役に立たんだろうと。 バグとの格闘の中で、リファクタリング(設計改善)の威力を肌で感じ、その考え方とやり方がオブジェクト指向に由来するということを

    ドメイン駆動設計を理解する3つのキーワード - ソフトウェア設計を考える
    Akineko
    Akineko 2019/03/04
  • Getter/Setterを避けて役に立つドメインオブジェクトを作る - かとじゅんの技術日誌

    Clean Architecture 達人に学ぶソフトウェアの構造と設計を読んでます。モデリングに関しては成分薄めですが、よいだと思います。はい。 Clean Architecture 達人に学ぶソフトウェアの構造と設計 作者: Robert C.Martin,角征典,高木正弘出版社/メーカー: KADOKAWA発売日: 2018/07/27メディア: 単行この商品を含むブログを見る 書の大筋から少し逸れるが、「5章 オブジェクト指向プログラミング」の「カプセル化」が面白かったので、これを切り口にモデリングについて考えてみる。 OO言語のカプセル化はすでに弱体化している オブジェクト指向の三大要素の一つである、カプセル化について、以下のようなことが書いてあります。 「カプセル化」がOOの定義の一部となっているのは、OO言語がデータと関数のカプセル化を簡単かつ効果的なものにしているから

    Getter/Setterを避けて役に立つドメインオブジェクトを作る - かとじゅんの技術日誌
  • 「実践ドメイン駆動設計」を読んだので、実際にDDDで設計して作ってみた! - Qiita

    こんにちは、クラウドワークスの新規事業のエンジニアとして仕事をしている高梨です! 最近、「実践ドメイン駆動設計」というを読みました! 500ページ近くもある技術書で、なかなか量は多かったのですが、DDDがどんなものなのか一通り大枠を掴めた気がします。 ただ読み終わった後にこんな疑念や不安をいだきました。 「たしかにかなり面白そうだけど、実際にやるとどれだけ工数かかるんだろう...?」 「設計の話は全然出てこなかったけど、DDDで作るとなるといったい何から始めればいいんだ?」 「戦術についての知識はついたけど、実際に書こうとしたらできなそうだな...」 そこで、そういった疑念や不安を解決するために、実際にDDDでサンプルプロダクトを作ってみようと思ったわけです。 実際に作ってみるのが、結局一番理解が進みますしね。 今回は、そのプロダクトがリリースされるまでの過程や感想を、作成した設計書やソ

    「実践ドメイン駆動設計」を読んだので、実際にDDDで設計して作ってみた! - Qiita
    Akineko
    Akineko 2019/02/28
  • Whyから始めるドメイン駆動設計 - Qiita

    この記事は、ドメイン駆動設計 Advent Calendar #1 の18日目の記事です。 ドメイン駆動設計をどうやって実現していくかについては、既にたくさんの素晴らしい記事があります。 しかし、ドメイン駆動設計をなぜやるのかについて考察した記事はそれほど多くないように思いました。 この記事では、なぜドメイン駆動設計が大事なのかについて考察することで、ドメイン駆動設計の勘所を追究していきます。 自分なりに噛み砕いたあとの文章なので、もし変な所があれば指摘頂けると大変助かります。 DDDを駆動している原則 エリック・エヴァンスのドメイン駆動設計では、DDDを駆動している原則として以下の3つが挙げられています。 コアドメインに集中すること ドメインの実践者とソフトウェアの実践者による創造的な共同作業を通じて、モデルを探求すること 明示的な境界づけられたコンテキストの内部で、ユビキタス言語を語る

    Whyから始めるドメイン駆動設計 - Qiita
    Akineko
    Akineko 2019/02/27
  • 「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~

    関西DDD.java 勉強会 2016-3-5 (DDD Alliance 勉強会 2016-1-21 @東京の京都再演版)

    「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
  • Scalaコードとともに考えるドメインモデリング

    DDDコミュニティでは、なぜドメイン駆動設計をやるのかという必要性の議論ではなく、何をどのように実践するのかという議題に変わっています。Scalaコミュニティにおいても、DDDの実践方法に強い関心があることはいうまでもありません。 長大な設計哲学を説くDDDは、読み難く理解し難い、実践までの道のりが遠い…

    Scalaコードとともに考えるドメインモデリング
  • 非エンジニアの方に「DDDって何なの?」と聞かれたときの説明[ドメイン駆動設計] - little hands' lab

    この記事はドメイン駆動設計 #2 Advent Calendar 2018の16日目の記事です。 DDD(ドメイン駆動設計)とは何なのか そもそもDDDってなんなの?ということをちょくちょく聞かれます。 一言で言うと、「開発手法の一種です」ですが、それだと「ふ〜ん」で終わってしまうので、もう少し興味を持ってもらえる回答を考えます。 まず、開発してて何に困るのかがわからないと思うので、そこから説明をします。 非エンジニア向けの説明 開発手法にも色々あり、行き当たりばったりに作ると以下のような問題に突き当たる、ということがよくあります。 実際の業務をきちんと理解しないで作ったら、 リリースしてもあんまり使われなかったり不評なものができる きちんと整理されてないプログラムを書いたら、 あとから修正するのがどんどん大変になる DDDは、このの2個とも解決しよう、ということで生まれた設計・開発手法な

    非エンジニアの方に「DDDって何なの?」と聞かれたときの説明[ドメイン駆動設計] - little hands' lab
    Akineko
    Akineko 2018/12/18
  • DDDとコードとしての正しさ - pospomeのプログラミング日記

    ドメイン駆動設計 #1 Advent Calendar 2018の14日目を担当する@pospomeです。 今回はDDDとコードとしての正しさについて書いてみようと思います。 DDDは設計手法である コードとしての正しさ コードとしての正しさを見失う ユースケースの日語を"そのまま"コードに落とし込もうとする 無駄にオブジェクト同士の結合度を上げる RubyのActiveRecordの正しさ コードとしてのメリット、デメリットを具体的に考えて解決する まとめ DDDは設計手法である DDD = ドメイン駆動設計 ですよね。 "設計"という単語が付いていることから分かる通り、DDDはあくまでソフトウェアにおける設計手法です。 そのためDDDの成果物は"コード"であり、DDDの目的は"コードの可読性を上げること"であると自分は考えています。 DDDが持つ"ビジネスを理解する", "ドメインを

    DDDとコードとしての正しさ - pospomeのプログラミング日記
    Akineko
    Akineko 2018/12/14
  • ドメインオブジェクトの責務について - Qiita

    設計するとき、「このオブジェクトの責務は何だろうか?」とか「この責務に名前をつけるなら何か?」とか、責務について考えることがよくあります。そもそもその責務とは何か、という根源的な疑問について再確認すると共に、ドメイン駆動設計の観点からドメインオブジェクトの責務についても考えてみたいと思います。 責務とは 困ったときの古典引用。もう絶版になった、オブジェクトデザインという、書籍を紐解いてみましょう。DDDからの引用が多い書籍で、DDDの設計スタイルは、この書籍で紹介する「責務駆動設計(responsibillity-driven design)」の原則に従うことが大きいとされています。 この書籍によると、「責務」には以下が含まれるそうです。 「4.1 責務とは何か」 オブジェクトが行う動作 オブジェクトが持つ知識 オブジェクトが他に影響を与える主要な判断 これらの言葉を身近な言葉で置き換える

    ドメインオブジェクトの責務について - Qiita
  • Base DDD(ドメイン駆動設計) 参考文献を巡る旅

    2. はじめに DDD (ドメイン駆動設計)に記載されている参考文献には、 DDD出版前から著名だった書籍が多数含まれています。 私も読んだ事があるもあったのですが、これら個々で理解 していた知識が、DDDで見事に集約されており、 「成るほど!」と感心する事が多々ありました。 そこで、どのような参考文献が、DDDのどの箇所に、どのよう に使用されているか調べ、DDD思想の根底に、少しでも触れれ ばと思います。 2

    Base DDD(ドメイン駆動設計) 参考文献を巡る旅
    Akineko
    Akineko 2018/04/25