タグ

DDDに関するtaketsのブックマーク (32)

  • 目的と抽象化の関係性から分かる、システムの設計精度を高める考え方 / purpose abstraction design

    2023/02/10、デブサミ2023の登壇資料です。 『目的と抽象化の関係性から分かる、システムの設計精度を高める考え方』 https://event.shoeisha.jp/devsumi/20230209/session/4182/

    目的と抽象化の関係性から分かる、システムの設計精度を高める考え方 / purpose abstraction design
  • ドメイン駆動設計を理解する3つのキーワード - ソフトウェア設計を考える

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

    ドメイン駆動設計を理解する3つのキーワード - ソフトウェア設計を考える
    takets
    takets 2024/01/27
    ドメインモデル=計算モデルとするモデリングはしっくりくる
  • Value Object は不変にする | システム設計日記

    ドメイン駆動設計(DDD)の Value Objects パターンでは、オブジェクトを不変(immutable)にすることを強く推奨している。 なんとなく、そんなもんか、と思っていたけど、ある日、なるほど、というケースに出くわした話し。 変数名にこだわる 前提として、変数名にこだわるようになったことがある。 DDD のユビキタス言語パターンの実践として、 ・パッケージ名 ・クラス名 ・メソッド名 ・変数名 は、業務上の意味のある名前にこだわることを、徹底しはじめた。 Java Calendar クラスの日付計算 当日から、2週間後に、期限切れになる、というビジネスルルールを実装していた。 Calendar getExpireDate() { Calendar now = Calendar.getInstance(); now.add( Calendar.DATE, 7*2 ); retur

    takets
    takets 2024/01/27
    不変オブジェクトの実装 実装方法としては、 ・コンストラクトで、値をすべてセット。 ・setter など、内容を書き換えるメソッドを書かない。 ・値を変えたいときは、同じクラスの別のインスタンスを作成して戻す
  • メールのドメインモデリング

    概要 システムを作っているとメールを送信するようなことは多いと思います。 以前DDD的にモデリングしようと思い、メールをドメインモデル、メールの送信機能をドメインサービスとして定義・実装をしました。 しかし、メールやメールを送信するというのが当にドメイン知識なのか?と疑問を持ったので、どうモデリングする(しない)のが良いか改めて考えたので、個人的な見解をまとめてみたいと思います。 ドメインに依る 身も蓋もないですが、どうモデリングすべきかはドメインによります。 例えばメーラーやメール配信サービスを開発する場合はまさにメールがドメインモデルでしょう。これは疑いようが無いように思えます。 今回は、何かしらの通知手段としてメールを使うようなシステムの場合にどうモデリングすればよいのかに焦点を当ててみます。 メールをドメインモデルとした場合の問題点 概要で記載したモデリングを図にすると以下のよう

    メールのドメインモデリング
    takets
    takets 2022/06/09
    j 身も蓋もないですが、どうモデリングすべきかはドメインによります。
  • 最近の海外DDDセミナーを聞いてみたら色々と常識が破壊された - Qiita

    TL;DR 最近の設計志向はイベント駆動がかなり中心になっている とくにDDD界隈がここまでイベント駆動一槍だとは思わなかった ストーリーを出発点にイベント駆動で設計を組み立てる「イベントストーミング」がかなり多くの場所で事例として取り上げられている はじめに 最近、洋書や動画の講演資料などいくつか海外の情報源に当たることがおおくなり、その中で「結構日でやられている取り組みとちがうなー」と考えることが多く、一旦そのあたりの差分をまとめておこうかと思いました。 ただの出羽守(あるいは鹿鳴館精神)ではなく、一つの潮流としてこんなのがあるってのを記述できればなと思います イベントが設計の基線となりつつある、、、のか? まず1つ目に驚いたのが、イベントが設計の中心になっている、そう感じる機会が多かったこと。 ここで言うイベントは、実践ドメイン駆動設計の中でも「ドメインイベント」として実装パタ

    最近の海外DDDセミナーを聞いてみたら色々と常識が破壊された - Qiita
  • クリーンな実装を目指して.pdf

    ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design

    クリーンな実装を目指して.pdf
    takets
    takets 2020/02/21
  • ボトムアップドメイン駆動設計

    はじめに この記事は前後編に分かれています。 順序だてた解説になっているので最後までお付き合いいただけると幸いです。 後編記事: https://nrslib.com/bottomup-ddd-2/ 順序立っての説明になっておりますので、前編からご覧になることを強くお勧めします。 セミナー情報 こちらの内容のセミナーを不定期で開催しています。 ◆セミナーページ 第一回: https://ddd-community-jp.connpass.com/event/103428/ 第二回: https://ddd-community-jp.connpass.com/event/107106/ 第三回: https://nrs-seminar.connpass.com/event/117283/ ◆あとがき 第一回ボトムアップドメイン駆動設計勉強会を開催しました セミナースライド まえがき この章は

    ボトムアップドメイン駆動設計
    takets
    takets 2020/02/13
  • solid+cqs+dry

    Kubernetesって何? -大規模なKubernetesを運用するKubernetes as a Serviceチームの話を添えて-

    solid+cqs+dry
    takets
    takets 2019/12/17
    solid原則とリファクタリングの実例がわかりやすい
  • ドメイン駆動でインターフェース指向な開発 - Qiita

    この記事は一休.comアドベントカレンダー2017の10日目です。 システム部 CTO室 エンジニアの @yu-sa です。 今回はとある開発で、ドメイン駆動設計で,インターフェース指向を意識した環境での開発に携わった際の知見を記事にさせて頂きたいと思います。 自分は今まで、SmartUIな開発ばかりしてきたため、今回の開発では多くを勉強させていただきました。そんな経験談や調査内容をまとめて共有したいと思います。 参考記事 ドメイン駆動設計の道標 Python におけるドメイン駆動設計(戦術面)の勘どころ [DDD]ドメイン駆動設計で実装を始めるのに一番とっつきやすいアーキテクチャは何か ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく 最後のまとめをはじめに アーキテクチャと実装例を見て、ドメイン駆動設計のイメージを理解。 ユビキタス言語についての理解を深める。 ドメイ

    ドメイン駆動でインターフェース指向な開発 - Qiita
    takets
    takets 2019/09/19
  • 「DDDのモデリングとは何なのか、 そしてどうコードに落とすのか」資料 / Q&A - little hands' lab

    Mix Leap Study 特別編 - レガシーをぶっつぶせ。現場でDDD! コラボカンファレンス に登壇させていただいたのでで、その際の資料です。 また、当日sli.doでたくさんのご質問をいただいたので、まとめてお答えします。 発表資料 DDDのモデリングとは何なのか、 そしてどうコードに落とすのか from Koichiro Matsuoka www.slideshare.net もっと詳しく知りたい方は この発表資料の内容を、さらに詳しく解説した書籍を出しました! little-hands.booth.pm 初めてDDDを学ぶ方、もしくは実際に着手して難しさにぶつかっている方向けの書籍になっています。 迷子になりがちな「DDDの目的」や「モデル」の解説からはじめ、 具体的なモデリングを行い実装まで落とす事例を元に、DDDの魅力や効果を体感することを目指します。 このの「第2章

    「DDDのモデリングとは何なのか、 そしてどうコードに落とすのか」資料 / Q&A - little hands' lab
    takets
    takets 2019/09/03
  • モデルとは何であって、何でないのか #kichijojipm

    吉祥寺pm#19 での LT 資料です。

    モデルとは何であって、何でないのか #kichijojipm
    takets
    takets 2019/08/09
  • [DDD]モデルでドメイン知識を表現するとは何か - Qiita

    DDD連載記事 * なぜDDD初心者はググリ出してすぐに心がくじけてしまうのか * ドメイン駆動設計の定義についてEric Evansはなんと言っているのか * モデルでドメイン知識を表現するとは何か * ドメイン駆動設計で実装を始めるのに一番とっつきやすいアーキテクチャは何か * ドメイン駆動 + オニオンアーキテクチャ概略 概要 DDDの定義についてEric Evansはなんと言っているのか この記事でドメイン駆動開発の定義は以下のようなものであると書きました。 ドメインの中核となる複雑さと機会に焦点を当てる ドメイン専門家とソフトウェア専門家のコラボレーションでモデルを探求する 明示的にそれらのモデルを表現するソフトウェアを書く 境界付けられたコンテキストの中のユビキタス言語で話す では、ドメインの知識を言語化したモデルは、最終的にコードでどのように表現されるのでしょうか? 不変条件

    [DDD]モデルでドメイン知識を表現するとは何か - Qiita
    takets
    takets 2019/07/22
    ドメインモデル貧血症についてのわかりやすい解説
  • DDD本 3章 モデルと実装を結びつける - HackMD

    takets
    takets 2019/06/12
  • 役割駆動設計で巨大クラスを爆殺する - Qiita

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

    役割駆動設計で巨大クラスを爆殺する - Qiita
    takets
    takets 2019/04/09
  • PHP: 静的メソッドは何のためにあるか? - Qiita

    稿ではPHPの静的メソッドが何のためにあるかを考えるものである。 クラスとインスタンスの概念的な関係性 静的メソッドを理解するには、クラスとインスタンスの関係性を理解していなければならない。 クラスとインスタンスの関係は何だろうか? 一言で言えば、クラスは、複数のインスタンスの集合である。概念的な集合であって、インスタンスの配列という意味ではない。例えば、$user1のオブジェクトと$user2のオブジェクトを総じて、Userと呼べるのは、Userが$user1と$user2の集合だからだ。 以上の集合論的な観点を踏まえると、静的メソッドは何のためにあるかといえば、集合に含まれるすべてのオブジェクトに共通した処理(公理ともいう)を記述するためにあると言える。 逆を言えば、集合の一要素にすぎない$user1にのみ関係する処理は静的メソッドにはならない。Userクラス(ここまで読んだみなさん

    PHP: 静的メソッドは何のためにあるか? - Qiita
    takets
    takets 2019/03/12
  • PHPではじめるCQRS

    PHPカンファレンス仙台2019の発表資料です。

    PHPではじめるCQRS
    takets
    takets 2019/02/04
    これはわかりやすい。
  • 「バグを減らすために『気をつけて』作る」のではなく「バグらせるのが難しくなるように『考えて』作る」 - s平面の左側

    この記事について 「Willgate Advent Calendar 2018」11 日目の記事です。 記事が投稿された日付は気にしてはいけない。いいね? きっかけ およそ 2 ヶ月前に下書きになっていた記事があったので掘り返し。 この記事を書き始めたころの twitter のタイムラインにこんなツイートが流れてきました。 エンバグを断罪するような思考そもそも気に入らない。個人の注意力に依存するのは工学的じゃない。罪はバグが発生しやすい設計にあると考えるのがエンジニアじゃないの? って思う。個々のバグに対して迷惑被ったと怒るのはエンドユーザー視点しかない人だと思う— 田中ひさてる (@tanakahisateru) 2018年10月2日 私もこれに近い考えをずっと抱いてきていたので、引用リツイート + コメントせずにはいられませんでした。 当にこれ。 バグらないように「気をつけて」作るん

    「バグを減らすために『気をつけて』作る」のではなく「バグらせるのが難しくなるように『考えて』作る」 - s平面の左側
    takets
    takets 2019/01/12
  • PHP: 振る舞いを持つEnumの作り方 - Qiita

    稿ではPHPで振る舞いを持つEnumの実装方法を順を追って説明していく。 Enumを定数で実装する方法も考えられるが、稿ではクラスを使う。クラスでEnumを実装すると、それぞれの値に振る舞い(メソッド)を持たせられる利点がある。加えて、クラスで表現されたEnumはそれを利用するコードでクラス名を型宣言に使えるので、型安全なコードを書ける長所もある。 稿では「支払い状況」を例にEnumを作っていく。まず、支払い状況は4つの状態があるものと考えよう。 保留(pending) 承認済み(approved) 却下(rejected) 支払い済み(paid) これらを実装していく過程を見ていこう。 なお、稿で実装したコードはGitHubで公開しているので、完成版はそちらをご覧いただきたい。 まず、「支払い状況」のEnumクラスを作る。このクラスは継承する必要がないためfinalクラスにする。

    PHP: 振る舞いを持つEnumの作り方 - Qiita
    takets
    takets 2019/01/09
  • ドメインオブジェクトの責務について - Qiita

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

    ドメインオブジェクトの責務について - Qiita
  • 「実践ドメイン駆動設計」を読んだので、実際にDDDで設計して作ってみた! - Qiita

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

    「実践ドメイン駆動設計」を読んだので、実際にDDDで設計して作ってみた! - Qiita