タグ

DDDに関するnunulkのブックマーク (20)

  • ドメイン駆動設計の正体

    はじめに "ドメイン駆動設計は当たり前のことを言っているだけ" "ドメイン駆動設計はただのオブジェクト指向プログラミング" "ドメイン駆動設計はより良いアーキテクチャだ" "軽量DDDはアンチパターンだ" このようなドメイン駆動設計に関する言及を聞いたことがあるでしょうか? ドメイン駆動設計に言及する記事や書籍は多くありますが、それぞれ着目する側面が異なったり色々なコンテキストから言及されています。 おそらくそれが原因でドメイン駆動設計が何であるかをぼやけさせ、正体のわかりにくい概念になっているように思えます。 そこで今回は色々な観点から整理し、ドメイン駆動設計とは何であるのか、その正体を考えていきます。 ドメイン駆動設計の基的概念について ドメイン駆動設計はEric Evansが出版した「Domain-Driven Design」という書籍がルーツになっています。 ドメイン駆動設計を一

    ドメイン駆動設計の正体
  • DDD本を読むためには前提知識が非常に多いよ - Qiita

    初めに きっかけ 新人研修中にDDDとか、PoEAAとかの話が少しだけ出ました。 ただ、イマイチわからないとの声が多数。 理由 なぜなら予備知識がたくさん必要だからです。(ほんとに多い) これはわからなくて当然。 そこで 独断と偏見で、予備知識となる用語を解説します。 偏見多いので、より正確な情報は、書籍やWebで調べてね。 この辺を説明します UML クラス図/シーケンス図 デザインパータン GoF/PoEAA 階層化アーキテクチャ DDDのサマリ 知らなきゃいけない知識が多くて面倒だね。 説明しないけど、オブジェクト指向やデータベースとかの知識も必要だよ。 説明前にDDDのページを見てみよう!!! DDDの最初のページ 「エリック・エヴァンスのドメイン駆動設計」より ??? よくわからないね さっきの図って何? 灰色の中心部分はソフトウェア設計のモデリングを表しています。 モデリ

    DDD本を読むためには前提知識が非常に多いよ - Qiita
    nunulk
    nunulk 2022/11/01
    個人的にはEvans本じゃなくて増田本(「現場で役立つ〜」)をおすすめする
  • 値オブジェクト(Value Object)は3種類ある - パンダのプログラミングブログ

    Value Object(値オブジェクト)は3種類あった Value Object(値オブジェクト) の意義と使い所がわからなかった。そこで調べてみたらなんと3種類あった。面白かったのでその調査過程を紹介する。 なお、現在では DDD の意味での Value Object がメインであること、またこれは自転車置き場の議論であり、DDD Quickly の Value Object の章を読む方が有意義であることを先に記しておく。 1. Data Transfer Object 1つ目は、Data Transfer Object(DTO)の意味だ。これは PoEAA に少しだけだけ出てくる。かつてのJava界隈の一部では(?)DTOのことを Value Object と呼んでいた。だが、現代では Value Object と DTO は別物として定着している。PoEAA は2000年代前半に

    値オブジェクト(Value Object)は3種類ある - パンダのプログラミングブログ
    nunulk
    nunulk 2022/08/12
    「計算可能性」というのは(定義によるけど)数値型以外でもあると思う。たとえば文字列であれば(ドメイン的に意味のある)分割、結合など
  • ドメイン駆動設計の源流のPofEAAを読んでみる | フューチャー技術ブログ

    最近、ドメイン駆動設計(以下DDD)とかそのあたりを読みこんでいる人から、DDDの読み方を教えてもらいました。ここではDDDはエリック・エヴァンスのドメイン駆動設計の方を参照しました。 @katzchang さんから教わったのは「DDDはパターンランゲージの形式を意識してるよ」ということでした。ただし、きちんとしたパターンランゲージの形式になっておらず、記述が著者のものになってるので、読者は注意して読む必要があるのかもとのことです。 @ryoaitaさんから教わったのは「DDDはエンタープライズアプリケーションアーキテクチャパターン(以下PofEAA)を下敷きにしているだよ」ということでした。 DDDももう時代的にはかなり古いです。自分で読んだ限りは全然好きになれなくて、でもきっと何かあるはずだと3-4冊読んでみましたが感想は変わらずでした。ユビキタス言語も「当たり前のものを先頭に

    nunulk
    nunulk 2022/06/10
    "つまり、ドメインを表現しない値オブジェクトとか、エンティティなんてものはないぞ、という誤解を生み出す源泉はこの魔改造にありそうです。"
  • 🏗️ ドメイン駆動設計と依存性逆転の原則

    社内LTにて、ドメイン駆動設計と依存性逆転の原則を布教しましたʕ◔ϖ◔ʔ はてなブックマークのコメントもどうぞ! なお、ドメイン駆動設計を理解するためには、依存についても知る必要があります。 是非、依存関係と依存オブジェクト注入もご参照ください👍🏻

    🏗️ ドメイン駆動設計と依存性逆転の原則
    nunulk
    nunulk 2021/08/09
    言われてみるとたしかに「リポジトリ」はドメインの言葉ではなくパターン名だな。概念としてはドメインオブジェクトの集合に対する操作の集まりなのでドメインのものだとは思うけど
  • GitHub - ddd-by-examples/library: A comprehensive Domain-Driven Design example with problem space strategic analysis and various tactical patterns.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    GitHub - ddd-by-examples/library: A comprehensive Domain-Driven Design example with problem space strategic analysis and various tactical patterns.
    nunulk
    nunulk 2019/05/03
    ドキュメントがすごい
  • Laravelで電子コミック書店をドメイン駆動開発(DDD)で実装した話

    ■ 概要 こんにちは。Applivマンガの開発の責任者の工藤です。 2018年1月ごろから電子コミック書店の開発をやって8月末にリリースしました。(https://manga.app-liv.jp) CGM、無料漫画コーナー、有料漫画ストアの3フェーズくらいに分けて開発してきた中で色々試してきたことがあり、 その中からいくつかやって良かったものをリリース後の振り返りも兼ねて投稿したいと思います。 書いてたら結構長くなってしまったので今回はDDDまわりのみとして他の内容は次以降に書きます(たぶん)。 DDDの基的な話はググればいっぱい出てくるので飛ばしています。 なので対象読者としてはDDD系の資料はざっと適当に斜め読みして大体わかってるけどめんどくさそうだなと思ってる人で、そういう人が稿で「あーなんかきれいにまとまりそうだな試してみたいな」と思っていただけるとこれ幸いです。 ■ 実装

    nunulk
    nunulk 2019/04/18
    あるいは形而上学的ななにか "気づいたのはDDDというのはただの言葉じゃということです。"
  • 「集約の境界と整合性(略」に対して頂いたアイデアの分類と現状での僕の回答らしきもの - kbigwheelのプログラミング・ソフトウェア技術系ブログ

    解決策1 集約をマージするタイプのアイデア 解決策2 一時的な整合性の破綻を受け入れ結果整合性を使うタイプのアイデア A. 組織へ無効状態で追加後、有効化するアイデア A.i 連続的に追加・有効化を行うアイデア A.ii 追加後、有効化を別スレッドやイベント駆動で行うアイデア B. 組織に所属するユーザー一覧というドメインオブジェクトをアイデア B.i ユーザー一覧を組織集約に持たせるアイデア B.ii ユーザー一覧を独立した集約にするアイデア C. イベント駆動アーキテクチャの長期プロセス(サーガ)的なアイデア D. オーバーがNGなら逆に現在ユーザー数を先に増やすアイデア 解決策3 アンチパターンではあるが集約間の整合性維持のためトランザクション制御を用いる 解決策4 ユースケースの見直しによる再モデリングタイプのアイデア 僕の現時点での回答らしきもの 現時点での回答: 解決策2 B.

    「集約の境界と整合性(略」に対して頂いたアイデアの分類と現状での僕の回答らしきもの - kbigwheelのプログラミング・ソフトウェア技術系ブログ
    nunulk
    nunulk 2018/12/10
    すごい、思案の可視化だ
  • [レポート]レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡 #DDDAlliance | Developers.IO

    こんにちは。プロダクトグループのshoito(しょいと)です。 9/26(水)に開催された レガシーコードにドメイン駆動設計で立ち向かった5年間の軌跡 に参加してきたのでレポートします。 当日のtwitterのハッシュタグ#DDDAllianceのツイートがTogetterでまとめられています。 BIGLOBEにおける、5年間のDDDへの取り組みと今後について ビッグローブ株式会社 西 秀和さんより 30年間、事業を支えてきた業務システムをDDDで刷新する。 そのためには、組織的、エンジニアのレベルなど多くの問題があります。 その壁をどう乗り越えたのか? そして、壁の向こうで得た恩恵とは何のか? 5年という期間を経て、得ることのできた気づきや組織的な変化をお伝えしたいです。 アジェンダ DDD導入に至るまで 導入時の苦労 導入による効果 今後の目標 BIGLOBE販売システムについて、DD

    [レポート]レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡 #DDDAlliance | Developers.IO
    nunulk
    nunulk 2018/09/27
    行きたかったけど行けなかったのでありがたい。ありがたい 🙏
  • 日本語のドメイン駆動設計 (Domain-Driven Design - DDD) 関連記事まとめ - なにか作る

    ドメイン駆動設計は原典となる「エリック・エヴァンスのドメイン駆動設計」の初版が2003年と歴史があり、モダンなフレームワークであればその思想を取り入れた設計がなされているにも関わらず、日語の情報が少ない気がする。 最近ドメイン駆動設計をやろうと主にWeb上の情報を探っていたので参考になったサイトをリンク集の形でまとめてみる。 概要 概要を把握するのが一番難しいように思うので、色々と目を通すのがよさそう。 little-hands.hatenablog.com enterprisegeeks.hatenablog.com enterprisegeeks.hatenablog.com speakerdeck.com ドメイン駆動設計とは何か 【入門編】 from 増田 亨 www.slideshare.net 3週連続DDDその1 ドメイン駆動設計の基を理解する from 増田 亨 www

    日本語のドメイン駆動設計 (Domain-Driven Design - DDD) 関連記事まとめ - なにか作る
  • 集約の設計と実装

    AWS データベースブログの記事 「Amazon DynamoDBによる CQRSイベントストアの構築」 を勝手に読み解く

    集約の設計と実装
  • ドメイン駆動設計を始めるために必要なチームのつくり方

    Gunma.web #30のLTで発表した資料です。 どうすればドメイン駆動設計を導入出来るのか、というところにフォーカスにして考えてみました。

    ドメイン駆動設計を始めるために必要なチームのつくり方
  • Eric Evans氏: ドメイン駆動設計は、以前より以上に妥当性を獲得している

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    Eric Evans氏: ドメイン駆動設計は、以前より以上に妥当性を獲得している
  • 「DDD批判」への批判 - 設計者の発言

    畏友である杉氏の「現場で役立つシステム設計の原則」批判 (1) ~何のために、「データとロジックを一体に」するのか?~が話題になっている。取り上げられている増田氏の著書を読んで、私もこのやり方で格的な業務システムを開発するのは現実的でないと思ったクチである。ところがそのに関して聞こえてくるのはなにやら絶賛ばかりなので、物珍しさもあって杉氏の批判を興味深く読んだのだが、賛同しつつも何というか中途半端な感じがした。 たとえば、ディスカウントのロジックを「数量クラス」でも「金額クラス」でもなく「受注クラス」に置くべきという指摘は適切である(じっさい私もを読んでそう思った)。しかし残念なことに、それらの指摘が「より良いオブジェクト指向プログラミングの指針」になってしまっている。 それの何が問題なのか。私に言わせれば、そもそも業務システムをオブジェクト指向プログラミングして手に入れようとす

    「DDD批判」への批判 - 設計者の発言
    nunulk
    nunulk 2017/09/01
    ちょっと何言ってるか分かんないな...できればコードで示してほしい / "私に言わせれば、そもそも業務システムをオブジェクト指向プログラミングして手に入れようとするやり方が無理スジである"
  • 「現場で役立つシステム設計の原則」批判 (1) ~何のために、「データとロジックを一体に」するのか?~

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

    「現場で役立つシステム設計の原則」批判 (1) ~何のために、「データとロジックを一体に」するのか?~
    nunulk
    nunulk 2017/08/30
    このサンプルコードが適切かどうかは分からないけど、ブール値を返すメソッドってたいてい if/else の出現を誘発するから、本当に必要か慎重に検討する必要あるよね
  • 【Laravel】【DDD】ちょっと待って!そのEloquent、本当にドメインモデルにしちゃって大丈夫? - Qiita

    Laravel】【DDD】ちょっと待って!そのEloquent、当にドメインモデルにしちゃって大丈夫?LaravelDDDドメイン駆動 お題目 Eloquentはとっても便利! あまりにも便利なのでEloquentをそのままドメインモデルにしたくなっちゃう! でも、何も考えずにドメインモデル化すると酷い目に合うかも…? なんで? 何がいけないの? Eloquentが扱う問題領域(DB操作)は来インフラストラクチャ層が正解。 つまり、Eloquentをドメインモデルとして扱ってしまうと、レイヤー構造(≒責務の範囲)の侵犯による副作用が発生する。 つまり…どういうことだってばよ? 1.他層のDB操作に歯止めが掛からなくなる ドメインクラスを経由すればどこでもDBを弄れるので、最悪だと「アプリケーション層からInsertを書く」なんて芸当が可能。 「ヘボグラマーが各種バリデーションやエラー

    【Laravel】【DDD】ちょっと待って!そのEloquent、本当にドメインモデルにしちゃって大丈夫? - Qiita
    nunulk
    nunulk 2017/08/23
    "多重責務に肥え太る"
  • Domain Modelling Using Event Storming

    nunulk
    nunulk 2017/08/18
    やってみたい
  • ドメイン駆動設計のガイドライン: Capture - Embed - Protect

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    ドメイン駆動設計のガイドライン: Capture - Embed - Protect
    nunulk
    nunulk 2017/08/18
    「レジリエンスの向上」とは具体的にどんな効果のことを指してるんだろう。
  • 似非サービスクラスの殺し方 / #ginzarb

    ぎんざRuby会議LT資料

    似非サービスクラスの殺し方 / #ginzarb
    nunulk
    nunulk 2017/08/05
    そうそうそうそう
  • どこに何を書くのか?

    13. type User struct { Attack int //攻撃力 } func main() { u := User{ Attack: 100, } //攻撃力は int の Attack に乱数を加算したものになる rand.Seed(time.Now().UnixNano()) u.Attack = u.Attack + rand.Intn(10) fmt.Println(u.Attack) } 14. type User struct { Attack int //攻撃力 } func main() { u := User{ Attack: 100, } //攻撃力は int の Attack に乱数を加算したものになる rand.Seed(time.Now().UnixNano()) u.Attack = u.Attack + rand.Intn(10) fmt.Pr

    どこに何を書くのか?
    nunulk
    nunulk 2017/08/01
    参考になる
  • 1