タグ

DDDに関するJGEEMのブックマーク (34)

  • DDD基礎解説:エンティティ、値オブジェクトってなんなんだ - little hands' lab

    はじめに DDDの実装パターンとして、エンティティと値オブジェクトというものがあります。 ドメイン駆動一般に複雑な抽象論が多い中で、コードに近く一番イメージがつきやすいコード事例として出てくるため、ここだけは何となくわかるぞ!という方もいらっしゃるのではないでしょうか。 今日はこちらの概要とそれぞれの使い道について書きたいと思います。 先にざっくりイメージ図をお伝えすると、こういう図を使って解説します。 何の目的で作るのか? ドメイン駆動設計は何を解決しようとしているのか こちらの記事で、ドメイン駆動設計のアプローチは以下の2ステップがあるということを書きました。 ドメインの問題を解決するための抽象的なモデルを作る. モデルをソフトウェア(コード)に落とし込む ※ ドメイン=ソフトウェアを適用して問題解決しようとする領域 DDDでは、このStep2の モデルをコードで表現するためのパターン

    DDD基礎解説:エンティティ、値オブジェクトってなんなんだ - little hands' lab
  • Software Designドメイン駆動設計に参加 - Qiita

    前書き 業後に以下のDDDイベントに参加してきた。 その議事録とアウトプットとしてここに残す。 画像の上2つが自分が書いたものである。 ドメイン駆動設計概要とユビキタス言語 コンテキストマップとコアドメイン 全体像を俯瞰したコンテキストマップ→その上でのどこにモデリングコストかけるか策定。コアドメインの時間経過に伴う変化(動き)、境界の位置含めて。詳細での検証の上で演繹的に前提となるマクロな境界の位置を修正。 それに対して参加者の方から、 ①コンテキストマップからのコアドメインの定義という順番(トップダウン寄り) ②コアドメイン先に定義してからのコンテキストマップ作成という順番(ボトムアップ寄り) どちらなのか? という良い質問があった。 どっちかというとコアドメインを最初に特定して、それを支える業務サービスとして他のドメインがあるため、わりとボトムアップ式にコンテキストマップ作成という話

    Software Designドメイン駆動設計に参加 - Qiita
    JGEEM
    JGEEM 2024/03/15
    コアドメインの見つけ方が言語化されていて良い。コアドメイン特定→周囲との関係を図示も同意。「BAでの概念モデリングをAA層にてイベントソーシングで相似形に実装すること」を再読しながら噛み締めたい
  • ユビキタス言語はバックエンドエンジニアから始めよう

    https://increments.connpass.com/event/310090/ 2024/03/01「Wantedly x Qiita Meetup #2 Rubyを用いたプロダクト開発」の資料です。 発表では、モデリングという役割を持つバックエンドエンジニアこそ、 開発段階からユビキタス言語作りを主導すべきという話をします。

    ユビキタス言語はバックエンドエンジニアから始めよう
  • 7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える

    設計原則はよい設計をするための指針です。 では、よい設計とはなんでしょうか? もっとも重要なソフトウェア品質は発展性 ソフトウェアの発展性がビジネス価値を生む 発展性をうみだす7つの設計原則 モジュール化 モジュール化の2つのアプローチ 型によるモジュール化 手続き的なモジュール化 関心の分離 関心の4象限 入出力と計算・判断の分離 業務の関心と実装の詳細の分離 もっとも複雑な関心事(ビジネスロジック)の分離を徹底する カプセル化と抽象化 カプセル化 ビジネスロジックのカプセル化 抽象化 データ抽象 ビジネスロジックとデータ抽象 高凝集と疎結合 凝集度 結合度 隠された結合性の問題 定義の一点性 見た目が同じコード 7つの設計原則の学び方 コードの実装例 ドメインオブジェクト設計のガイドライン 実践ガイドとして使える 設計の考え方を理解するための もっとも重要なソフトウェア品質は発展性

    7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える
    JGEEM
    JGEEM 2024/02/10
    ブクマしてなくてむしろこっちが驚いた
  • DDDにおけるドメイン層オブジェクト設計の基本方針[ドメイン駆動設計] - little hands' lab

    株式会社ログラスの松岡(@little_hand_s)です。 ドメイン層のオブジェクトを設計する際に、重要な基方針があります。 ドメインモデルの知識を対応するオブジェクトに書く 常に正しいインスタンスしか存在させない この2つを守ると、非常に保守性の高いコードにすることができます。 以下、詳細に解説します。 ドメインモデルの知識を対応するオブジェクトに書く ドメイン知識(ルール/制約)を表現する実装を、ドメイン層のオブジェクトに寄せていきます。 この判断は、「ドメインモデル図に書かれた吹き出しの内容が、どの層で実装されているか」という基準に基づき行います。 この基準はコード設計の指針として非常に役立ちます。 設計の良し悪しというのはさまざまな基準があるため、レビューをしていてもいわゆる「俺の考えた最強の設計」同士が戦ってしまうことがあります。 しかし、「ドメイン知識はドメイン層に書く」と

    DDDにおけるドメイン層オブジェクト設計の基本方針[ドメイン駆動設計] - little hands' lab
    JGEEM
    JGEEM 2024/01/27
    ドメインモデルの知識を対応するオブジェクトに書く/常に正しいインスタンスしか存在させない。常に正しいインスタンスとするには、生成条件の強制/ミューテーション条件の強制が必要。
  • 設計/コードレビューで"常に"心がけるポイント - little hands' lab

    株式会社ログラスの松岡(@little_hand_s)です。 little-hands.hatenablog.com ↑の記事でドメインオブジェクトの設計方針を書きましたが、それ以外の全般的な設計/レビュー観点について書きます。 非常に汎用性のある内容なので、数多くのプログラミング原則を覚えるより、まずこの観点でチェックできるようにすると即効性が期待できます。 前提として、階層化されたアーキテクチャ(オニオンアーキテクチャなど)を採用しているものとします。 ①レイヤーの責務違反の実装をしていないか ②高凝集/低結合になっているか 高凝集 クラスに関して メソッドに関して 低結合 ③ユニットテストを書きやすいか 合言葉 筆者執筆書籍 現場での導入で困ったら ①レイヤーの責務違反の実装をしていないか 例として、「ユースケース層にドメイン層のルール/制約に関わる実装をしている」場合はNGです。

    設計/コードレビューで"常に"心がけるポイント - little hands' lab
    JGEEM
    JGEEM 2024/01/23
    できればテストを書きやすいか、ではなくテストが書かれており網羅性は十分かという観点で確認したいがそれはまた別の話とすれば、見るべきは「レイヤ責務に沿うか/高凝集・疎結合か」
  • 仕様の複雑化、過渡期特有の難解なコード、技術スタックの老朽化… システムの健全な成長を妨げる要因に対する基本戦略

    仕様の複雑化、過渡期特有の難解なコード、技術スタックの老朽化… システムの健全な成長を妨げる要因に対する基戦略 アーキテクチャ刷新の現場:未知の技術を採用するために #1/2 アーキテクチャ刷新の現場における取り組みと成果を発表 成瀬允宣氏:みなさん、こんにちは。GMOインターネットグループでデベロッパーエキスパートとして活動しています、成瀬允宣と申します。日はよろしくお願いします。 私、所属はGMOインターネットグループ株式会社で、システム統括部に所属している一般のプログラマーではありますが、私からお送りするお話は、「アーキテクチャ刷新の現場」で、ここ数年……2年ほどですかね、アーキテクチャを刷新する現場で一番前を走っていたので、その現場のお話をしようかなと思っています。 非常に苦労して、やっと花開いてきたところなので、今日は、何を予測して、何を準備して、そして何を失敗したのか。そ

    仕様の複雑化、過渡期特有の難解なコード、技術スタックの老朽化… システムの健全な成長を妨げる要因に対する基本戦略
    JGEEM
    JGEEM 2024/01/22
    今まさにこの道を歩き出したとこなので有難い。EventStormingはBigPictureを描くために業務エキスパートとカオスに取り組むと思ってたけど、ドメインモデルと同じように維持すべきドキュメントと位置付けるの興味深い
  • 実録レガシーコード改善 / Working with Legacy Code: the True Record

    2024/01/15(月) 12:00 〜 13:00 t-wadaさんが後世に残したい、実録レガシーコード改善 https://findy.connpass.com/event/304101/ テストコードが無いコードを引き継いだところからはじまる、実際に2018年に行った受託開発案件のエピソードとコードをプロダクトオーナー(引き継ぎ前のコードを書いた人)の許可を得て使用しています。登場するコードは全て物、登場するデータは講演用の架空のものです。

    実録レガシーコード改善 / Working with Legacy Code: the True Record
    JGEEM
    JGEEM 2024/01/15
    いつもながらためになる。というかもはや読んでて面白いしエキサイトするまである。実コード使ったライブコーディングもさぞ、、とりあえず1/22が楽しみ
  • ドメイン駆動設計に触れてから2年たったので、開発者の取り組み方について振り返ってみる - commmune Engineer Blog

    はじめに こんにちは、コミューンの中でSuccessHubというプロダクトの開発者をしている中野です。 SuccessHubは正式にローンチされてから1年半弱経過しており、開発初期からドメイン駆動設計を基に開発を進めています。この経験を通じて、コードベースのアプローチ以外の部分でも、開発者としての取り組みに関する課題や成功体験が浮かび上がってきました。今回はその一部を振り返りつつお話しできればと思います。(少し抽象的な話になります) はじめに モデル同士の関係性がうまく表現できない モデルが変化している 共通言語が貧しくなってきた 開発者としての姿勢 コミュニケーション 技術だけで解決しようとしない ドキュメントに起こして満足しない まとめ 最後に モデル同士の関係性がうまく表現できない SuccessHubローンチ直後、新規プロダクト開発記 〜どうしたら業務知識をコードに落とし込めるのか

    ドメイン駆動設計に触れてから2年たったので、開発者の取り組み方について振り返ってみる - commmune Engineer Blog
  • 0063 号 巻頭言

    DDD を理解したいあなたのための DDD 入門以前 Rubyist Magazine 63 号をお届けする。 突然のお知らせで恐縮だが、日 Ruby の会の主たる事務所が東京から北海道に移転した。それもあってあまりまとまった時間がとれず、11 月のうちに書くはずだったのが気がつくと 12 月も半ばを過ぎていたので、今回は以前書きかけていた文章を発掘してお茶を濁したい。 Ruby とは直接関係がなくて恐縮だが、Ruby に限らずソフトウェア開発では現在でもちょくちょく話題になることがある、DDD についての話である。 ドメイン駆動設計こと DDD は 2020 年代のソフトウェア開発でもよく話題にされるが、率直に言うとストレートにポジティブな評価が行われているとは言い難い。 どちらかというと、ある種マニアックで、対象分野が制限されており、また初心者にはとっつきにくいところがある手法と思わ

    JGEEM
    JGEEM 2024/01/14
    昔を思い起こさせる記事。素晴らしい。"分析モデルに近い実装よりHWに優しい実装" "「動いているコードは触るな」"とか首がもげそう。"蒸留しなければ理想的なモデルは作られず"は後世に語り継いでいきたい
  • DDDを実践するためのリポジトリ層の設計(Go言語による例)

    The Go gopher was designed by Renée French. Illustrations by tottie. はじめに この記事は、ドメイン駆動設計(DDD)の中核概念である「リポジトリ」についての理解を深めることを目的としています。リポジトリの基的な役割と重要性を確認し、Go言語での実装の例を紹介します。 前提 リレーショナルデータベースからデータを取得(更新)するアプリケーションを想定しています サンプルコードは Go 言語で書かれています リポジトリとは まずは、リポジトリの定義を確認してみましょう。 リポジトリパターンとは: リポジトリは、データベースから取得したデータを構造体にマッピングし、ドメインオブジェクトにアクセスするためのインターフェースを提供します。 これは、一般的なリポジトリの理解と相違ないですね。次に DDDの文脈で、より詳しい定義をみ

    DDDを実践するためのリポジトリ層の設計(Go言語による例)
    JGEEM
    JGEEM 2024/01/14
    集約における不変条件がmutableじゃなくてinvariantだと気付かせていただきました。感謝。あーすっきりした。
  • 【DDD入門】TypeScript × ドメイン駆動設計ハンズオン

    TypeScriptとドメイン駆動設計(DDD)を組み合わせ、APIを構築するハンズオンガイドです。このでは、DDDとは何かという基礎的なところからソフトウェア開発における戦略的設計、戦術的設計まで、包括的な知識を提供します。 戦略的設計では、ビジネスの要求に合わせたドメインモデルの設計をイベントストーミングを用いて行います。その後、戦術的設計では、具体的なコードの実装に関連するDDDの原則と実践を学びます。 TypeScriptを使ってコードを書きながら、DDDの概念を実際のプロジェクトに適用するヒントを紹介します。

    【DDD入門】TypeScript × ドメイン駆動設計ハンズオン
  • アーキテクチャの進化はドメインイベントが起点になる - KAKEHASHI Tech Blog

    こちらの記事はカケハシ Advent Calendar 2023 Part2の24日目の記事になります。 adventar.org はじめに 反復的な開発は、変更容易性の高いソフトウェアが不可欠です。ソフトウェア開発の経験がある方なら、デリバリ後の洞察や市場環境の変化から、新しい機能の追加やアーキテクチャの進化の必要性に直面したことが一度はあるでしょう。 私自身、要求分析手法やSOLID原則等の技法を取り入れ、変更容易性に対応する多くのプロジェクトに参加しました。しかし、どれだけ優れた手法や技法を持っていても、変更が難しい要求が出てくることは避けられません。その際、「過去の出来事」を正確に記録していれば、後から見返して問題解決が容易だったと感じることがよくあります。 ドメイン駆動設計(DDD)では、「過去に起こった出来事」を表現するドメインモデルを「ドメインイベント」と呼びます。変更容易性

    アーキテクチャの進化はドメインイベントが起点になる - KAKEHASHI Tech Blog
    JGEEM
    JGEEM 2023/12/25
    ちょうど悩んでるところだったので非常に助かる。感謝。とりあえず熟読しつつチームにも布教しよう。今年のアドベントカレンダーはDDD関連が豊作で嬉しい
  • 【要約】コアドメイン・パターン|かとじゅん(j5ik2o)

    ※あと、鵜呑みにしないでください。他人の知識は情報なので実践・検証を踏まえないと自分の知識にならないので、今回は情報提供の一環ということでお願いします 時間とリソースは有限なので、選択と集中をどうするのかというテーマ。前回の記事もサブドメイン戦略の観点だったが、この記事はコアドメイン戦略に的を絞っている。 Nick Tuneさんの記事には、コアドメイン戦略のパターンが示されている。数が多いので重要そうなものだけをピックアップして紹介&考察してみる。 Context Distillation(コンテキストの蒸留)According to this definition, a Core Domain is an area of the domain with the opportunity for high business differentiation. This represents a

    【要約】コアドメイン・パターン|かとじゅん(j5ik2o)
    JGEEM
    JGEEM 2023/12/25
    コアドメインをさらに分類してビジネス的な価値を考える。複雑さとはつまり競合に対する参入障壁になり得る。
  • 【要約】サブドメインの分け方とその意味について|かとじゅん(j5ik2o)

    DDD関連の記事を紹介してみたい。 今回は、Vladikkさんの2018年の記事。タイトルは「DDDの基を再考する」だが、内容としては「サブドメインの分類方法」について述べられている。 今回はこの記事を要約してみよう。(日語での要約の許可をVladikkさんからもらっています) ※あと、鵜呑みにしないでください。他人の知識は情報なので実践・検証を踏まえないと自分の知識にならないので、今回は情報提供の一環ということでお願いします 前段に書かれている内容は基的なものだ。 ドメインが事業領域を意味する サブドメインはさらに細分化された事業領域 サブドメインには種類がある。 汎用サブドメイン 一般的な問題を解決することで、コアドメインと支援サブドメインをサポートする 支援サブドメイン コアドメインをサポートするためのサブドメイン コアドメイン 重要なビジネス価値を提供する。競争優位性を持つか

    【要約】サブドメインの分け方とその意味について|かとじゅん(j5ik2o)
    JGEEM
    JGEEM 2023/12/25
    引用「コアドメイン:ビジネスにリスクをもたらし、かつソリューションを購入または採用できない場合、またはビジネスロジックが複雑でソリューションを購入または採用できない場合、コアドメイン戦略を採用する」
  • 「価値」から小さく始めるドメイン駆動設計 - KAKEHASHI Tech Blog

    こちらの記事は カケハシ Advent Calendar 2023 の 16日目の記事になります。 概要 こんにちは。AI在庫管理の開発チームでSWEをしている小室です。 私は普段ドメイン駆動設計(以下、DDD)を意識しながら開発することが多く、実践を重ねるほどDDDの素晴らしさを実感しております。 最近異動してきたAI在庫管理の開発チームでは、現状はあまりDDDを意識して開発を進めていないのですが、プロダクトが対象としている世界が非常に複雑であることと、今まさに多くの法人様に利用していただけるようになったうれしい悲鳴として成長痛を感じ始めており、ドメイン駆動設計を何かのヒントとしてプロダクトによる価値提供速度を加速できればと考えています。 しかしながら、ドメイン駆動設計は独自の価値観や学習コストの高さから、まだ取り組んだことのないメンバーとしては大きな不安を感じる部分があると思います。

    「価値」から小さく始めるドメイン駆動設計 - KAKEHASHI Tech Blog
    JGEEM
    JGEEM 2023/12/22
    ちょう良記事。DDDの目的や価値をわかりやすく伝えている。これから初学者に説明するときはこのエントリを紹介しよう。個人的に軽量DDDはいかがなものかと思うので、ドメインに挑むに足るKKDを養ってほしい
  • ドメインモデルの根拠とドメインモデル貧血症の対策について - Chatwork Creator's Note

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

    ドメインモデルの根拠とドメインモデル貧血症の対策について - Chatwork Creator's Note
    JGEEM
    JGEEM 2023/12/17
    RDRAとICONIX解釈と転用。応用か?温故知新。
  • DDD を成功させるためにドメインエキスパートと「言葉集め会」で「生の言葉」を聞いてみよう - Qiita

    記事は READYFOR 株式会社の READYFOR Advent Calendar 2023 の [15日目] です。 ※ 記事の内容は所属会社の公式発表・見解を示すものではありません。 ■ 「言葉集め会」とは? 弊社 READYFOR では2年ほど前より DDD に関する取り組みを行っています。 「言葉集め会」とは、そんな弊社にて実施した コンテキストマップの作成や精度向上 を主目的とした 『ドメインエキスパートの皆さんを招待し、仕事で使う「言葉」とその関係性を改めて見出してみる』イベント です。 同僚の方が前職の体験を元に考案したもので、準備を除き全体でおよそ4時間という少し長丁場のプラクティスとなります。 その経験について日はお話をさせて頂きます。 ■「言葉集め会」で期待できること 「言葉集め会」を実施することで、以下の効果を期待することができます。 エンジニア目線 自社の

    DDD を成功させるためにドメインエキスパートと「言葉集め会」で「生の言葉」を聞いてみよう - Qiita
    JGEEM
    JGEEM 2023/12/16
    よいな「言葉集め会」。イベントストーミングの前にやるなど目的とかタイミングは検討が必要そうだが真似てみたい。何より半日で終わるのがいい。イベストでBigPicture書こうとすると1日がかりだけど、、集中力が、、
  • チュートリアルでDDD体験: ドメインモデルの成長を紹介 - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」

    プロダクト技術部の川口です。 3年間、ビッグローブ光といった固定回線のインフラ部門に所属していましたが、今年の4月に BIGLOBE の基幹システムのリニューアルを推進していく部署に異動することになりました。 所属するチームでは、ドメイン駆動設計(DDD)で開発しています。 チームにジョインすると開発チュートリアルをやることになっており、そこで IntelliJ や Spring Boot での開発の仕方を学んだり、チュートリアルを通して DDD を学んだりします。 今回は、DDD のチュートリアルで実際に作成したドメインモデルがどういう風に成長していったかについて紹介します。 勤怠管理アプリ チュートリアル 初期ドメインモデル 中期ドメインモデル 後期ドメインモデル 学んだこと、感想 勤怠管理アプリ チュートリアル お題は GitHub のパブリックリポジトリに公開されています。 ht

    チュートリアルでDDD体験: ドメインモデルの成長を紹介 - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」
  • 集約はイベントから考えると考えやすい|かとじゅん(j5ik2o)

    チュートリアルでDDD体験: ドメインモデルの成長を紹介 - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」 僕もこのドメインで振る舞い中心のモデリングをしてみた。実装は可能なモデルを書いてみましたが、今回は細かい実装の話はありません。 イベントを抽出まずイベント(起こった事実)から考えました。日々の勤怠で何が起きるのだろう。出勤したり退勤したり休憩したりと打刻するのは間違いない。システムが何か命令(コマンド)を受理したらこういうイベントが発生するはず。 「出勤した」イベントには、誰がいつ出勤したかを説明する事実が記載されている。「退勤した」や「休憩を開始した」や「休憩を終了した」なども同じ。あと、打刻間違いの修正もあるので「打刻を修正した」もある。ちょっと荒削りだがこんな印象。 出勤した 退勤した 休憩を開始した 休憩を終了した 打刻を修正した ちなみに

    集約はイベントから考えると考えやすい|かとじゅん(j5ik2o)
    JGEEM
    JGEEM 2023/11/30
    こちらも今さら。毎度参考にさせていただいております。ストーミングからモデルを起こすところで悩んでいたので実例を示していただき誠に有り難い。コマンド抽出する段階から抽象化を考え始めるんだな、、