タグ

DDDに関するmasayoshinymのブックマーク (54)

  • 削除のビジネスロジックをドメイン層に閉じ込める簡単で強力な「DeletableIDパターンの紹介」

    この記事は 株式会社ログラス Productチーム Advent Calendar 2023 13日目の記事です。 はじめに 〇〇を削除できるかどうかのビジネス処理、皆さんはどう実装していますか? 同僚の話題になった記事でも削除の認可処理をどこに記述すべきか?は難しいと説明されています。今回はお題は認可っぽいもので書きますが広範に「削除ができるかどうか?」のビジネスロジックをドメイン層にどう閉じ込めるかの便利な実装パターンを紹介します。 削除処理のビジネスロジックの取り扱いは難しい 削除処理のビジネスロジックの実装はシンプルだけど更新処理や作成処理と比べて意外と難しいです。 それはなぜかというとドメインオブジェクト内の実装に削除処理を書くことができないからです。 例えば権限に管理者と一般ユーザーの二つの権限があるとします。

    削除のビジネスロジックをドメイン層に閉じ込める簡単で強力な「DeletableIDパターンの紹介」
  • 過大評価されるDDD(ドメイン駆動設計)

    この記事は、著者の許可を得て配信しています。 Is Domain-driven Design overrated? ドメイン駆動設計(DDD)は、システムのモデリングと構築のための優れたガイドラインを提供する大変便利なアプローチですが、それ自体が目的ではなく、目的のための手段です。その概念は有効ですが、それを使うことだけに限定すると、その一方で多くのことを失うことになります。つまり、実際にはDDDの先にも人生があるということです。 最近、「DDD は過大評価されている」というクリックベイトなタイトルの記事を投稿したところ、皆様からかなり注目を集めました。今回の記事は、社内やソーシャルメディア(TwitterやHacker Newsなど)で受けたフィードバックを取り入れて、前回の記事に内容を加えたものとなっています。また、私の考えにもう少しニュアンスを加えたかったので、あまり過激なものにはし

    過大評価されるDDD(ドメイン駆動設計)
  • ドメイン知識は、容易に失われる - Magnolia Tech

    以前noteに書いた記事ですが、管理上こちらにも転載。 なるべくドメインを表現したコードにしよう、というのはそりゃそうなんだけど、ちょっとした記述方法だけでもドメインが持っていた意図は容易に失われる(だからこそどうやって表現を残すか考えないといけない)っていう趣旨のエントリでした。 ドメインにはドメインの都合があるし、コードにはコードの都合があるんだよね。完全にどちらかに寄るわけじゃないけど、後世の人にとって都合の悪い寄り方はあると思う。 例えば区分コードみたいな値が有ったとして、1の時は○○という処理、2,3,4の時は△△という処理を実装する、という状況のときに、条件分岐が「区分コードが1か、それ以外」で分岐させると、2,3,4と限定しておきたかった、というドメイン知識が失われたりしませんか?みたいなことが有ったり無かったり— magnoliak🍧 (@magnolia_k_) 202

    ドメイン知識は、容易に失われる - Magnolia Tech
  • BIGLOBEで1年間業務をすると、どれだけDDDのスキルが向上するか - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」

    基盤部(開発部門)の小野田です。 私は 2019 年に中途採用で BIGLOBE に入社して以来、主に既存システムのリニューアル案件に関わり、その中で、モデリングの経験を多く積んできました。記事では業務で得たモデリングの知見を基に 鉄道料金計算問題 を再モデリングした結果と 1 年前のモデリング結果とを比較して、1 年間でどれだけスキルアップしたかを紹介したいと思います。ここで紹介する内容は、同じ名前のオブジェクトでも性質が異なれば別の値オブジェクト ( Value Object: VO ) としてモデリングしたほうが良いことを示す実例となります。 1 年前のモデリング結果は DDD くらいできるようになりたいよねって話 をご覧ください。 style.biglobe.co.jp なお、この記事の内容やプログラムは教育用に作成した架空のものであり、実在のサービスや団体などとは一切関係あり

    BIGLOBEで1年間業務をすると、どれだけDDDのスキルが向上するか - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」
  • ドメイン駆動設計を導入するために転職して最初の3ヶ月でやったこと[DDD] - little hands' lab

    この記事は ドメイン駆動設計 Advent Calendarの記事です。 今年の9月にログラスというスタートアップに転職しました。 ログラスは元々DDDについて講師として勉強会をさせてもらっていた会社であり、DDD自体は社として取り組んでおりある程度進んでいました。ですが、講師ではなく中の人になったからこそできる色々な取り組みがあり、3ヶ月である程度形になりました。 記事では、DDDを広めるための取り組みについて、極力再現性がある形を意識しつつ、ご紹介したいと思います。 入社時の状況 なにをしたか テストの話が多い理由 実施内容詳細 TDD Boot Campの@t_wadaさんの基調講演観賞会を行った Serviceクラスを1パブリックメソッドにした レイヤーごとのオブジェクトの依存関係を整理 レイヤーごとのテスト方針 クラス名の重要性 参照実装を作成した 「責務」と「テスト」の重要性

    ドメイン駆動設計を導入するために転職して最初の3ヶ月でやったこと[DDD] - little hands' lab
  • プロダクトにドメイン駆動設計を適用するためにはじめたこと - ContractS開発者ブログ

    こんにちは。最近Slackのカスタム絵文字作りにハマっている友野です。Holmesでサーバーサイドエンジニアをしています。 Holmesが提供するホームズクラウドは、今年8月にサービスローンチ3周年を迎えました! これまでの支持に感謝し、これからも長く使ってもらえるようにプロダクト改善に取り組んでいます。そのひとつとして、ドメイン駆動設計(以下、DDDと表記します)適用に関する取り組みについてご紹介します。似たような状況や同じ課題を持つ誰かの一助になれば幸いです。 背景と現状 まずはじめたこと 戦略的モデリング そして、戦術的な設計 採用するパターン2つ ドメインモデルを反映したオブジェクトを置くパッケージの作成 既存テーブル構造に依存しないRepository+Adapterパターン ふりかえり まとめ 最後に 背景と現状 ホームズクラウドはPMF(Product Market Fit

    プロダクトにドメイン駆動設計を適用するためにはじめたこと - ContractS開発者ブログ
  • 認証と認可と課金とコアドメインを分離したシステムは勝てるという話 - まっちゅーのチラ裏

    自分が複数のシステムの開発を経験して得た確信として、「認証と認可と課金とコアドメインの分離がめちゃくちゃ重要である」というものがあるので、コレを整理してアウトプットしていく 分離するモチベーションとは Microservice文脈でいうと、デプロイ独立性だったり、リソースの最適配分だったり、障害の局所化だったり、開発組織とのマッピングだったりがメリットとして語られることが多い。 だが、ここで取り上げたいのは戦術的DDD的観点でのコンテキスト分離の有用性である。 ※ちなみにコンテキスト分離のみであればモジュラモノリスだけで実現可能。 戦術的DDD的観点での関心事の分離によるメリットとは コンテキストが分離されていることによって、境界をまたぐ際に「このI/Fは正しいのか?」を都度考えることを強制することができる。 境界がなければ意図しない密結合を生みやすくなってしまう。 もちろん、境界を超える

    認証と認可と課金とコアドメインを分離したシステムは勝てるという話 - まっちゅーのチラ裏
  • エンジニア歴1年の僕がドメイン駆動設計(DDD)を参考にLaravelのプロジェクトをフルリニューアルした話 - Hajimari Tech Blog| 株式会社Hajimari

    こんにちは! はじめまして! 2020年7月からPIECE事業部でエンジニアをさせてもらっています。 野澤です。 今回、PIECEというサービスのリニューアルを担当させてもらったのでその時のことについて書きたいと思います! まだ若輩者なので至らない点が多々あると思いますが フルリニューアルってどんな事したんだろう〜? Hajimariのエンジニアはどんな仕事をしてるんだろう〜? って思った人はぜひ読んで見てください! ※ドメイン駆動設計の説明も書いたのですがボリュームが多くなってしまいました… ドメイン駆動設計について概要知りたいという方は是非読んでみてください。 クリーンアーキテクチャの説明やモデリングのやり方などは説明していません。 ご了承ください。 PIECEリファクタリングプロジェクトの概要 PIECEとはどのようなサービスなのか リニューアルの目的 リニューアル施策 ドメイン駆動

    エンジニア歴1年の僕がドメイン駆動設計(DDD)を参考にLaravelのプロジェクトをフルリニューアルした話 - Hajimari Tech Blog| 株式会社Hajimari
  • リアクティブマイクロサービス入門(2/2)- 実現編 - Qiita

    はじめに 前篇の「リアクティブマイクロサービス入門(1/2)- 概念編」では、なぜリアクティブマイクロサービスが必要なのか、リアクティブマイクロサービスとは何なのかをご紹介しました。 後編となるこの記事では、リアクティブマイクロサービスの実装するために使えるテクニック・技術を、目的別にご紹介します。 もちろん、これらすべてを盛り込まなければリアクティブマイクロサービスを実現できないわけではありませんが、引き出しとして知っておけばより柔軟な設計ができるのではないかと思います。 目的別にまとめているので、適宜リファレンス的にご参照いただければと思います。 モジュール化 リアクティブマイクロサービスに求められる性質をバランス良く満たすためには、ビジネス上の関心事を分割することが重要です。 トレードオフで同時に実現することが難しい要件でも、分割することでそれぞれの関心時に最適化した手段を選択して実

    リアクティブマイクロサービス入門(2/2)- 実現編 - Qiita
  • ご主人様、小難しいDDDやクリーンアーキテクチャはお忘れになって、”削除しやすい設計”から始められてはいかが? - Qiita

    ご主人様、小難しいDDDやクリーンアーキテクチャはお忘れになって、”削除しやすい設計”から始められてはいかが?LaravelDDD設計アーキテクチャCleanArchitecture ある日夢の中で設計に詳しい悪役令嬢が現れてこんなことを言い放ったので、考察してみましたという設定のポエムです。 問題提起 ドメイン駆動設計、オニオンアーキテクチャ、クリーンアーキテクチャといった考え方はもちろん重要なものの、僕は難しく考えずに「削除しやすいように機能を作る」のが第一歩として重要ではないかと考えています。 記事では「削除しやすい設計」について持論を展開してみます。 ※議論のスコープはWebサービスに限定し、例示としてPHPのフレームワークであるLaravelを用います 削除しやすいことがなぜ重要か 一度開発した機能は、それで終わりではなく、改修、改善を繰り返し、そして場合によっては仕様が廃止さ

    ご主人様、小難しいDDDやクリーンアーキテクチャはお忘れになって、”削除しやすい設計”から始められてはいかが? - Qiita
  • ドメイン駆動設計における「良いモデル」と「悪いモデル」とは

    コードの品質を上げることを目的として導入されることも多いドメイン駆動設計(DDD)。しかし、その質は「モデリングでソフトウェアの価値を高める」ことです。そのためには、アプリケーション層とドメイン層を区別し、どの層に何を実装するのかを決めるのが重要です。DDDの質、そしてモデリングから実装までの考え方を松岡幸一郎氏が語ります。講演資料はこちら 「モデル」を定義する 松岡幸一郎氏:では、モデルとは何でしょうか。いろんな人がいろんなことを言うんですね。DBA(データベース管理者)のような人だと「モデルとはDBのテーブルのこと」だと言ったり、サーバサードエンジニアの人だと「テーブルに対応したオブジェクトのこと」と言ったり、機械学習エンジニアの人は「数式のこと」をモデルと言ったりします。 モデルを作ることをモデリングと呼ぶわけですが、モデリングで価値を出していこうと言っているのに、モデルの定義が

    ドメイン駆動設計における「良いモデル」と「悪いモデル」とは
  • DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか

    商品リンクはこちら https://little-hands.booth.pm/items/1835632 DDDはドメインモデリングを通じてソフトウェアの価値を高めようとする設計・開発手法です。 新しく得られたモデルに関する知見を頻繁にコードに落とし込む必要があるのですが、 それはソフトウェアにとっては非常に高い要求をしていることになります。 そこでDDDでは、オブジェクト指向の手法を利用して、メンテナブルで、拡張性の高いコードを書くことを目指しています。 このセッションでは、DDDではモデリング結果をどのようにコードに落とし、どのような利益を得られるのかを、具体的なコードを交えながら解説します。

    DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
  • DDD くらいできるようになりたいよねって話 - Qiita

    はじめに 私自身は今年の 7 月にドメイン駆動設計(DDD)を実践する企業に転職したばかりで DDD 実践歴は浅いのだが、最近は開発業務の他にも中途採用者の DDD 教育や 現場で DDD!2nd のドライバー役をする機会を頂くなど、DDD の布教活動にも少し関わっている。 その中で「DDD ムズイ」という言葉をよく聞いたので、DDD の実践に悩んでいる人向けにサンプル問題の解説を通して、実は DDD 自体は難しくないんだよってことを教える目的で記事を書いた。 TL;DR(最初に結論) DDD 自体はドメインを中心にモデリングと実装をイテレーティブに繰り返す設計プロセスであり、モデリングと OOP の理解があれば誰でもできる。 難しいのは DDD 自体ではなくて、モデリングまたは OOP である。特に「良いモデル」を得ることは非常に難しい。 なので「DDD ムズイ」と感じる人はモデリング

    DDD くらいできるようになりたいよねって話 - Qiita
  • 10年モノのサービスをアーキテクチャから再設計─はてなブックマークがScalaとDDDを使う理由 - エンジニアHub|Webエンジニアのキャリアを考える!

    10年モノのサービスをアーキテクチャから再設計─はてなブックマークがScalaとDDDを使う理由 10年以上運用されているサービスには、さまざまな技術的な負債が発生しています。今後の継続的な改善のため、いったん新規開発を止めて4年かけて全面的なリニューアルを実施した「はてなブックマーク」の開発者に、プロジェクトの課題や解決する手法などを聞きました。 改善1つに数カ月かかるなら全てを書き換えられないか 2000年代にトレンドだった開発手法の負債 過去の開発意図を探る考古学的手法 データセンター移行も見据えて刷新しよう ドメインモデル設計とScalaとマイクロサービス化 コアロジックにはScalaを採用 きちんとしたドメインモデルによる設計と実装を継続したい 段階的なリリースとデータの移行という2つの大きな課題 求められる機能に沿ったデータベーススキーマに再構築 新旧の2システムを維持しながら

    10年モノのサービスをアーキテクチャから再設計─はてなブックマークがScalaとDDDを使う理由 - エンジニアHub|Webエンジニアのキャリアを考える!
  • ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD] - little hands' lab

    DDDの文脈の中で、 「ドメイン知識とユースケース(≒アプリケーションの知識)は何が違うのか?」 という疑問がよく持たれます。 この記事ではその違いを説明し、DDDのコードにどう反映するかを書きます。 あるToDoアプリの仕様 事例として、ToDoアプリの話をします。 「仕様を決める」と言ったとき、以下のように箇条書きで決めることがあると思います。(Jiraのようなチケット管理システムのチケット詳細として書いたりしますよね) ユーザー登録、非活性化ができる メールアドレスは重複登録できない タスク登録、更新、完了、未完了に戻す、延期、ユーザーへのアサインができる タスクは3回までしか延期ができない 非活性化されていないユーザーにアサインができる タスクを完了、アサインするとタスクレポートが作成される これはいわゆる「ビジネスロジック」と呼ばれて、3層レイヤーのアーキテクチャではBusine

    ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD] - little hands' lab
  • ドメイン駆動設計の正しい歩き方

    ドメイン駆動設計でなぜ作るのか? ドメイン駆動設計の考え方 ドメイン駆動設計を実践するための6つの問い 事例研究 ドメイン駆動設計を現場に導入する 体験的に学ぶ エヴァンスをちゃんと読む

    ドメイン駆動設計の正しい歩き方
  • ドメイン駆動設計のドメイン駆動とはなにか - 日記マン

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

    ドメイン駆動設計のドメイン駆動とはなにか - 日記マン
  • ドメイン駆動設計、どこまでやるべき? 開発現場の“問題”を乗り越えるためにできること

    ゲーム開発におけるドメイン駆動設計とサーバレスアーキテクチャ 佃松三郎氏(以下、佃):みなさん、こんにちは。最初に「TECH × GAME COLLEGE」についてお話しさせてもらいたいと思います。 私はテクロスCTOの佃と申します。 ゲーム会社が主催する勉強会というのは数多くありますが、ゲームに特化した、もしくは「ゲームっていろんな技術を使ってるよね」という話があるなかで、「当にゲームにフォーカスするオープンなコミュニティがないな」というところで、去年の8月からこの勉強会がスタートしました。 そこで「DDD」と呼ばれる開発手法について増田さんに登壇いただいたところからスタートしました。今回、ちょうど半年ということで、1つ区切りのイベントとして今回は開かせていただきました。 それでは、今日パネラーとして参加していただく増田さん、まずは簡単に自己紹介と最近取り組まれていることなどをお

    ドメイン駆動設計、どこまでやるべき? 開発現場の“問題”を乗り越えるためにできること
  • DDDとコードとしての正しさ - pospomeのプログラミング日記

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

    DDDとコードとしての正しさ - pospomeのプログラミング日記
  • ボトムアップドメイン駆動設計 後編

    ボトムアップドメイン駆動設計 後編 1. ボトムアップ ドメイン駆動設計 後編 成瀬 允宣2018/10/23 in GMO Yours 1 2. 自己紹介 • 成瀬 允宣 - Masanobu Naruse • プログラマ • C#, Scala, Typescript • DDD とかアーキテクチャの話が好きです • @nrslib • https://nrslib.com 2 3. もくじ • はじめに • 値オブジェクト • エンティティ • ドメインサービス • リポジトリ • アプリケーションサービス • ファクトリ • トランザクション • 集約 • アーキテクチャ • ドメイン駆動設計への誘い 3 4. 閑話休題 4 アプリケーションが 作れるようになりました ここから後半です 5. ファクトリ 5 後半最初のテーマは ファクトリ 6. ファクトリ | 採番 6 サンプルの

    ボトムアップドメイン駆動設計 後編