タグ

DDDに関するghostbassのブックマーク (17)

  • クソコード動画「Userクラス」で考える技術的負債解消の観点

    2021/04/10開催 Developer eXperience Day 2021 「クソコード動画『Userクラス』で考える技術的負債解消の観点」の解説資料です。 https://dxd2021.cto-a.org/program/time-table/b-3 クソコード動画はこちら https://twitter.com/MinoDriven/status/1380773721032433674 YouTubeライブのリンクはこちら https://www.youtube.com/watch?v=ajPaGPdj6tU

    クソコード動画「Userクラス」で考える技術的負債解消の観点
    ghostbass
    ghostbass 2021/04/11
    Userを Client とか Customer とかにすればヤバさがわかるだろうか。結局その語の意味するところを明確にしないまま関連ドメインを作ると意味不明な実装になってしまう。/DB設計で意味不明な列ができるのも同じ。
  • ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD] - little hands' lab

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

    ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD] - little hands' lab
    ghostbass
    ghostbass 2019/07/26
    ユースケースに「○○できる」ってあるのは何だろう。サブケース?なら一度無効状態で登録すると二度と有効化できなくなる気がするけど。
  • ソースコードで理解するクリーンアーキテクチャ - Sansan Tech Blog

    はじめに こんにちは。プロダクト開発部の荒川です。 これまで最年少を謳っていましたが、ついに新卒の子にその座を奪われてしまいました。とても残念です。 さて今回のテーマは、皆さんお馴染みクリーンアーキテクチャ(Clean Architecture)です。 クリーンアーキテクチャは一時期流行し、その流れに乗って私もある程度の理解はしていました。 しかし、それはあくまでも感覚的な理解であって、他人に説明や良さを語れるレベルまで自分の中で落としこめていませんでした。 そこでより具体性のあるソースコードを読み込むことで、アーキテクチャへの理解を深めたいと思います。 クリーンアーキテクチャとは? クリーンアーキテクチャの定義や解説に関しては、ネット上にいくらでも公開されているので、このエントリでは詳しく話しません。 私自身が勉強に使った書籍やサイトを記事末尾の「参照」に掲載しているので、そちらを参考に

    ソースコードで理解するクリーンアーキテクチャ - Sansan Tech Blog
  • お前らがModelと呼ぶアレをなんと呼ぶべきか。近辺の用語(EntityとかVOとかDTOとか)について整理しつつ考える - Qiita

    お前らがModelと呼ぶアレをなんと呼ぶべきか。近辺の用語(EntityとかVOとかDTOとか)について整理しつつ考えるmodelDDD設計 みなさんは、Modelと言われたときに何をイメージしますか? こんなアレを思い浮かべた方も多いかと思います。 マサカらせてください。やはりお前らのModelは間違っている。 アレをModelと呼ぶと何が不味いのか すみません、早速言い過ぎました。半分は正しいです。MVCの発明者、Trygve Reenskaug氏による1979年の説明によると、 Models represent knowledge. A model could be a single object (rather uninteresting), or it could be some structure of objects. 1 このように「Modelは単体のオブジェクトであっても

    お前らがModelと呼ぶアレをなんと呼ぶべきか。近辺の用語(EntityとかVOとかDTOとか)について整理しつつ考える - Qiita
    ghostbass
    ghostbass 2019/04/15
    "DDDにおいては、エンティティは「一意な識別子によって特定される」"それがRDBに永続化されるならRDB上のテーブル行に違いないのでは…<永続化に関係なく、が肝
  • 3つのキーワードで学ぶ、ドメイン駆動設計の基礎知識 - ログミーTech

    2018年8月22日、『神姫PROJECT』などソーシャルゲームの企画・開発を手がける株式会社テクロスが主催するイベント「TECH x GAME COLLEGE」が開催されました。第1回となる今回のテーマは「ドメイン駆動設計の実践」。ドメイン駆動設計(DDD)の基礎知識と、ゲームにおける活用方法について、ギルドワークス株式会社取締役の増田亨氏が解説します。前半パートとなる今回は、ドメイン駆動設計の基礎的な概念や、既存の設計との違いについて語ります。講演資料はこちら ドメイン駆動設計の基礎知識 増田亨氏(以下、増田):こんばんは。ギルドワークスの増田です。 実は、テクロスさんとは『UNITIA』の開発初期に京都に隔週ぐらいで何度かお邪魔して、開発チームのみなさんと設計を議論したりしました。そういった縁があって、今日は講師として招かれました。ありがとうございます。 「ドメイン駆動設計の実践」と

    3つのキーワードで学ぶ、ドメイン駆動設計の基礎知識 - ログミーTech
  • エンジニアはどうDDDと向き合っていけばいいのか(1):ChatWork株式会社テックリード加藤さんインタビュー | Tech Direct BLOG

    今回はChatWork株式会社のテックリードでいらっしゃいます加藤潤一さんです。 少し技術的な内容になりますが、ドメイン駆動設計(以下 DDD)・リアクティブシステムといった話を中心にお伺いしました。 DDDを適用しやすいソフトウェアとは 愛宕 最初はやはりまずDDDについてお伺いしたいと思います。DDDというと、エリック・エヴァンスのドメイン駆動設計というが有名です。その肝心な部分としてはソフトウェアエキスパートである開発者も、ドメインエキスパートと一緒にユビキタス言語を作りながら対象の問題を分析・設計していきましょうというようなものだと思うのですが、少し疑問があります。DDDを適用しやすいソフトウェアとそうでないものはあるのでしょうか? 加藤 基的にプログラミング言語の制約はほとんどないと考えていますが、最初に考えたいことは、費用対効果に見合うかどうかを考えたいですね。システムの開

    エンジニアはどうDDDと向き合っていけばいいのか(1):ChatWork株式会社テックリード加藤さんインタビュー | Tech Direct BLOG
  • DDD�は間違いなくクソ

    そう思っている人は他にいないだろうか。 ここでいうDDDとはドメイン駆動設計(Domain-driven design)のことだ。 「DDD! DDD!」と言ってるプログラマって、ソースコードの中に閉じこもってるやつばかりだ。 DDDに夢中なやつらはビジネス目標達成や業務改善のことに全く無関心で、ソースコードの美しさと処理方法にしか関心がない。 他の職種の人と話さないし、話してもソースコードや処理方法の話をし始める。 なぜそうなるのか。 全く疑問だ。 DDDだぞ? 間違いなくDDDはクソエンジニアを見分けるためのリトマス紙だ。

    DDD�は間違いなくクソ
    ghostbass
    ghostbass 2018/06/05
    Domain とは何なのか、1年考えて
  • Service Objectがアンチパターンである理由とよりよい代替手段(翻訳)|TechRacho by BPS株式会社

    近年、RailsアプリにService Objectを追加するメリットを説く記事が次から次へと量産されています。私は記事において、それがなぜ正しくないかを述べたいと思う次第であります。もっとよい方法はあるのです。 私はこれまで、Service Objectに関するネット上の議論にときおり参加しては、問題に対するまっとうな解決方法としてService Objectが正しくない理由について繰り返し見解を述べてきました。実際、私は多くの場合においてService Objectよりもっとよい解決方法があると考えるのみならず、Service Objectはオブジェクト指向設計原則への配慮が損なわれている兆候を示すアンチパターンとして取り扱っています。 このような深遠なポイントを細切れのツイートやコメント欄を追って理解するのは大変です。そこで私は、私の見解を正確に表すいくつかの現実的なコードを詳しく

    Service Objectがアンチパターンである理由とよりよい代替手段(翻訳)|TechRacho by BPS株式会社
    ghostbass
    ghostbass 2018/04/17
    「サービスという名のトランザクションスクリプト」問題は抱えているがドメインモデルに移行できない
  • 集約の設計と実装

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

    集約の設計と実装
  • ドメイン駆動設計:4つのアンチパターン | システム設計日記

    6月23日(土)午後、大阪で、ドメイン駆動設計について、しゃべる予定。 第47回 SEA関西プロセス分科会のご案内 紹介の紹介の紹介、みたいな不思議なつながりで、講演の依頼があった。 「ドメイン駆動設計」を監訳された今関さんも参加いただける。 土曜の午後なので、時間が多め。 一方的にしゃべって終わりではなく、今関さんも交え参加者で、いろいろ話す時間を一時間以上とってもらいました(さらに懇親会もゆっくりと)。とても楽しみなイベントです。 ドメイン駆動設計は、訳がでてから、あちこちで勉強会や読書会が開かれているようだし、ドメイン駆動設計に興味持ったり、現場で取り組む人が、すごく増えた気がしている。 ネットで流れる情報も「ドメイン駆動ってなんぞや?」的なものだけでなく「私は、こう理解している、やっている」的なものが多くなったんじゃないかなあ。 訳の威力は絶大。 さて、講演の準備は、いつものよ

    ghostbass
    ghostbass 2017/11/30
    では、承認ボタンの例だとどのようにすればいいのか。domainが「承認できるか」を提供し、Vがそれを利用する?
  • 実践DDDのサンプルプロジェクトが学びしかない - Mitsuyuki.Shiiba

    IDDDを読んで、それなりに書いてあることは分かり始めたかな。と思ってたけど。 いざサンプルプロジェクトを読んでみたら、全然そんなことなかった。(ノД`)シクシク github.com いつものように、自分メモ。 プロジェクトの構成 全部で3プロジェクトと1ライブラリがある。 iddd_agilepm データストアとしてKVS(LevelDB)を使用。 DIコンテナは使ってない。 iddd_collaboration Event Sourcing と CQRS。ORM使わずにやってみた。 例をシンプルにするために、Event Sourcedな書き込みモデルと、CQRSの読み込みモデルを1スレッドで実行してる。イベントジャーナルとしてLevelDBを、リードモデル用にMySQLを使ってるのでほんのちょっとだけ一貫性がない状態が発生する可能性がある。別々のデータストアを使って、でも、できるだけ

    実践DDDのサンプルプロジェクトが学びしかない - Mitsuyuki.Shiiba
  • モデルが導く要件定義、文章が導くプログラミング

    高校生の頃、私はシンセサイザーを購入し、ハードロックバンドのキーボーディストになることを夢見て演奏の練習をした。しかし、基礎もなく見よう見まねの独学による練習だったので、思うように上達しなかった。そこで、ふと思った。「自分が弾ける曲を作ればいいじゃん」あの頃からもう30年以上過ぎているが、このような発想は、今も私の基的な行動原則である。現在は、ソフトウェア開発者として試行錯誤を重ね、そこで得たものを自分のソフトウェア開発戦略として実践している。この根底にあるものは、あのときと同じ「自分ができるようにすればいいじゃん」という行動原則である。このブログでは、私のソフトウェア開発戦略を、少しずつ紹介していきたいと考えている。

    ghostbass
    ghostbass 2017/04/14
    よくわかる / ただ「そういいつつメンバー変数は m_つけるの?」みたいな。
  • わたしたちがDDDを実践するに当たってDoctrineをやめようと決断した動機 - Qiita

    断り書き:自分たちがやりたいDDDにDoctrineが必ずしも向いていないという判断をしたものです。Doctrineには非常にお世話になっており、批判するものではありません。どのツールにも適材適所があると思います。 機械的なORMでエレガントに表現できないものがあった(ValueObjectなど) Entityが1テーブルに固く対応していて、さらにその知識がインフラストラクチャレイヤからドメインレイヤに漏れ出していて、密結合が発生していた Doctrineロックから脱出したい。Domain ServiceはRepositoryに依存しており、RepositoryはDoctrineに依存している。Doctrineが破滅への道を歩めば、アプリの心臓であるDomainも道連れとなる。 ストレージロックを脱出したい。ドメインレイヤがある具体的なRepositoryに依存していると、簡単にストレージ

    わたしたちがDDDを実践するに当たってDoctrineをやめようと決断した動機 - Qiita
    ghostbass
    ghostbass 2016/03/29
    よくわからん。実装サンプルがあれば… / mysqlでも postgresでも、っていうのはdoctrineがやってることなんじゃ?
  • DDD「エリック・エヴァンスのドメイン駆動設計」の読書会のメモ 01 | kanonjiのブログ

    エリック・エヴァンスのドメイン駆動設計 ソフトウェアの核心にある複雑さに立ち向かう(Eric Evans 牧野祐子 和智右桂 今関剛) | 翔泳社の 去年の秋ぐらいから設計に悩む事があり、エリック・エヴァンスのドメイン駆動設計、いわゆるDDDを買ってました。 なかなか通しで読む時間が取れず、気になる所をつまんで読んでたので、ちゃんと理解出来てないなと思っていた所、読書会をすると言う知り合いが居たので混ぜてもらいました。 折角なので記憶に新しいうちにメモして置こうと思って書いてるけど、理解がふんわりしてるまま、もしくは勘違いしたまま書いてる可能性もあります。 あと、議事録ではないので、あくまで読書会で話した結果、自分が思った事を書いています。 なんか書いてたらすごく長くなっちゃったけど、次回以降もこんなに書けるか分かりません。 今回読んだ範囲 まえがき 第1章 知識をかみ砕く 第2章

    DDD「エリック・エヴァンスのドメイン駆動設計」の読書会のメモ 01 | kanonjiのブログ
    ghostbass
    ghostbass 2015/03/14
    最近のデータベース、開発言語環境は識別子にt大抵何でも使えるはず。拒否されているのはコーディングの都合。
  • DDDで設計するならCQRSの利用を検討すべき - Qiita

    タイトルに書かれていることで全てなのですが、DDDとCQRSの併用について強調している日語の情報が少ないので、軽くまとめておきます。 CQRS+DDD CQRS(コマンドクエリ責務分離)とは、サーバの機能を「コマンド」(副作用あり)と「クエリ」(副作用なし)で完全に分けちゃおう、という考え方です。そもそも「コマンド」と「クエリ」ではあらゆる要件が異なります。 一貫性: 「コマンド」は整合性のある処理が必要、「クエリ」はあまり気にする必要なし ストレージ: 「コマンド」側は正規化してデータを保存したい、「クエリ」側は非正規な方が効率的 スケーラビリティ: 「コマンド」は全体の負荷の中で占める割合が少ない、「クエリ」は負荷が大きい なので分けちゃうわけですが、 コマンド側 複雑なビジネスロジックが絡むので、ドメイン駆動が活躍 クエリ側 複雑なビジネスロジックがないので、ドメイン層はスキップ

    DDDで設計するならCQRSの利用を検討すべき - Qiita
  • ドメイン駆動設計の概要

    目次 プラトン的モデル 言うべきことを言う コンテキスト 価値提案を把握する 単一責任システム エンティティは ID とライフサイクルを持つ 値オブジェクトは記述する 集計ルートによりエンティティを結合する ドメイン サービス モデルの主要な操作 リポジトリにより集計ルートを省略する データベースの関連事項 DDD の使用を開始する ドメイン駆動設計 (DDD) とは、洗練されたオブジェクト システムの設計に役立つ原則とパターンをまとめたものです。設計に DDD を適切に適用することで、ドメイン モデルと呼ばれるソフトウェア抽象化を実現できます。このモデルにより複雑なビジネス ロジックをカプセル化できるため、実際の業務とコードとの間に存在するギャップを小さくすることができます。 この記事では、DDD に関連する基的な概念と設計パターンについて解説します。機能豊富なドメイン モデルを設計し

    ドメイン駆動設計の概要
  • ZF勉強会#2フォローアップ Zend Frameworkでモデルを始める前に理解しておきたいこと - noopな日々

    Zend Framework勉強会#2 はGMOペパボ株式会社様の協力もあって、盛況でしたが、どうもZend_Dbに関して誤解があるような気がしているので(私も含めて)一通り確認してみようというフォローアップ記事です。 Zend Frameworkで対応しているモデル構成は、ドメインモデル+サービスレイヤーで直接的にはデータマッパーです。 CakePHPでは標準ではActiveRecordを採用していると思いますが、ここがCakePHPやsymfonyで学習してきた人が一番最初に戸惑う部分ではないかと思います。また、初学者がデータマッパーの意義をいきなり理解するのは難しいような気もします。 要は、多くの初心者が“モデルって、DBテーブルのことだよね”と考えてしまうのはよくない、と。結果的にコントローラがふくれあがり、UnitTestで影響が出てしまう、という話になっています。 - Cake

    ZF勉強会#2フォローアップ Zend Frameworkでモデルを始める前に理解しておきたいこと - noopな日々
  • 1