2021/04/10開催 Developer eXperience Day 2021 「クソコード動画『Userクラス』で考える技術的負債解消の観点」の解説資料です。 https://dxd2021.cto-a.org/program/time-table/b-3 クソコード動画はこちら …
DDDの文脈の中で、 「ドメイン知識とユースケース(≒アプリケーションの知識)は何が違うのか?」 という疑問がよく持たれます。 この記事ではその違いを説明し、DDDのコードにどう反映するかを書きます。 あるToDoアプリの仕様 事例として、ToDoアプリの話をします。 「仕様を決める」と言ったとき、以下のように箇条書きで決めることがあると思います。(Jiraのようなチケット管理システムのチケット詳細として書いたりしますよね) ユーザー登録、非活性化ができる メールアドレスは重複登録できない タスク登録、更新、完了、未完了に戻す、延期、ユーザーへのアサインができる タスクは3回までしか延期ができない 非活性化されていないユーザーにアサインができる タスクを完了、アサインするとタスクレポートが作成される これはいわゆる「ビジネスロジック」と呼ばれて、3層レイヤーのアーキテクチャではBusine
はじめに こんにちは。プロダクト開発部の荒川です。 これまで最年少を謳っていましたが、ついに新卒の子にその座を奪われてしまいました。とても残念です。 さて今回のテーマは、皆さんお馴染みクリーンアーキテクチャ(Clean Architecture)です。 クリーンアーキテクチャは一時期流行し、その流れに乗って私もある程度の理解はしていました。 しかし、それはあくまでも感覚的な理解であって、他人に説明や良さを語れるレベルまで自分の中で落としこめていませんでした。 そこでより具体性のあるソースコードを読み込むことで、アーキテクチャへの理解を深めたいと思います。 クリーンアーキテクチャとは? クリーンアーキテクチャの定義や解説に関しては、ネット上にいくらでも公開されているので、このエントリでは詳しく話しません。 私自身が勉強に使った書籍やサイトを記事末尾の「参照」に掲載しているので、そちらを参考に
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? みなさんは、Modelと言われたときに何をイメージしますか? こんなアレを思い浮かべた方も多いかと思います。 マサカらせてください。やはりお前らのModelは間違っている。 アレをModelと呼ぶと何が不味いのか すみません、早速言い過ぎました。半分は正しいです。MVCの発明者、Trygve Reenskaug氏による1979年の説明によると、 Models represent knowledge. A model could be a single object (rather uninteresting), or it could
2018年8月22日、『神姫PROJECT』などソーシャルゲームの企画・開発を手がける株式会社テクロスが主催するイベント「TECH x GAME COLLEGE」が開催されました。第1回となる今回のテーマは「ドメイン駆動設計の実践」。ドメイン駆動設計(DDD)の基礎知識と、ゲームにおける活用方法について、ギルドワークス株式会社取締役の増田亨氏が解説します。前半パートとなる今回は、ドメイン駆動設計の基礎的な概念や、既存の設計との違いについて語ります。講演資料はこちら ドメイン駆動設計の基礎知識増田亨氏(以下、増田):こんばんは。ギルドワークスの増田です。 実は、テクロスさんとは『UNITIA』の開発初期に京都に隔週ぐらいで何度かお邪魔して、開発チームのみなさんと設計を議論したりしました。そういった縁があって、今日は講師として招かれました。ありがとうございます。 「ドメイン駆動設計の実践」とい
今回はChatWork株式会社のテックリードでいらっしゃいます加藤潤一さんです。 少し技術的な内容になりますが、ドメイン駆動設計(以下 DDD)・リアクティブシステムといった話を中心にお伺いしました。 DDDを適用しやすいソフトウェアとは 愛宕 最初はやはりまずDDDについてお伺いしたいと思います。DDDというと、エリック・エヴァンスのドメイン駆動設計という本が有名です。その肝心な部分としてはソフトウェアエキスパートである開発者も、ドメインエキスパートと一緒にユビキタス言語を作りながら対象の問題を分析・設計していきましょうというようなものだと思うのですが、少し疑問があります。DDDを適用しやすいソフトウェアとそうでないものはあるのでしょうか? 加藤 基本的にプログラミング言語の制約はほとんどないと考えていますが、最初に考えたいことは、費用対効果に見合うかどうかを考えたいですね。システムの開
近年、RailsアプリにService Objectを追加するメリットを説く記事が次から次へと量産されています。私は本記事において、それがなぜ正しくないかを述べたいと思う次第であります。もっとよい方法はあるのです。 私はこれまで、Service Objectに関するネット上の議論にときおり参加しては、問題に対するまっとうな解決方法としてService Objectが正しくない理由について繰り返し見解を述べてきました。実際、私は多くの場合においてService Objectよりもっとよい解決方法があると考えるのみならず、Service Objectはオブジェクト指向設計原則への配慮が損なわれている兆候を示すアンチパターンとして取り扱っています。 このような深遠なポイントを細切れのツイートやコメント欄を追って理解するのは大変です。そこで私は、私の見解を正確に表すいくつかの現実的なコードを詳しく
6月23日(土)午後、大阪で、ドメイン駆動設計について、しゃべる予定。 第47回 SEA関西プロセス分科会のご案内 紹介の紹介の紹介、みたいな不思議なつながりで、講演の依頼があった。 「ドメイン駆動設計」を監訳された今関さんも参加いただける。 土曜の午後なので、時間が多め。 一方的にしゃべって終わりではなく、今関さんも交え参加者で、いろいろ話す時間を一時間以上とってもらいました(さらに懇親会もゆっくりと)。とても楽しみなイベントです。 ドメイン駆動設計は、訳本がでてから、あちこちで勉強会や読書会が開かれているようだし、ドメイン駆動設計に興味持ったり、現場で取り組む人が、すごく増えた気がしている。 ネットで流れる情報も「ドメイン駆動ってなんぞや?」的なものだけでなく「私は、こう理解している、やっている」的なものが多くなったんじゃないかなあ。 訳本の威力は絶大。 さて、講演の準備は、いつものよ
IDDDを読んで、それなりに書いてあることは分かり始めたかな。と思ってたけど。 いざサンプルプロジェクトを読んでみたら、全然そんなことなかった。(ノД`)シクシク github.com いつものように、自分メモ。 プロジェクトの構成 全部で3プロジェクトと1ライブラリがある。 iddd_agilepm データストアとしてKVS(LevelDB)を使用。 DIコンテナは使ってない。 iddd_collaboration Event Sourcing と CQRS。ORM使わずにやってみた。 例をシンプルにするために、Event Sourcedな書き込みモデルと、CQRSの読み込みモデルを1スレッドで実行してる。イベントジャーナルとしてLevelDBを、リードモデル用にMySQLを使ってるのでほんのちょっとだけ一貫性がない状態が発生する可能性がある。別々のデータストアを使って、でも、できるだけ
高校生の頃、私はシンセサイザーを購入し、ハードロックバンドのキーボーディストになることを夢見て演奏の練習をした。しかし、基礎もなく見よう見まねの独学による練習だったので、思うように上達しなかった。そこで、ふと思った。「自分が弾ける曲を作ればいいじゃん」あの頃からもう30年以上過ぎているが、このような発想は、今も私の基本的な行動原則である。現在は、ソフトウェア開発者として試行錯誤を重ね、そこで得たものを自分のソフトウェア開発戦略として実践している。この根底にあるものは、あのときと同じ「自分ができるようにすればいいじゃん」という行動原則である。このブログでは、私のソフトウェア開発戦略を、少しずつ紹介していきたいと考えている。
断り書き:自分たちがやりたいDDDにDoctrineが必ずしも向いていないという判断をしたものです。Doctrineには非常にお世話になっており、批判するものではありません。どのツールにも適材適所があると思います。 機械的なORMでエレガントに表現できないものがあった(ValueObjectなど) Entityが1テーブルに固く対応していて、さらにその知識がインフラストラクチャレイヤからドメインレイヤに漏れ出していて、密結合が発生していた Doctrineロックから脱出したい。Domain ServiceはRepositoryに依存しており、RepositoryはDoctrineに依存している。Doctrineが破滅への道を歩めば、アプリの心臓であるDomainも道連れとなる。 ストレージロックを脱出したい。ドメインレイヤがある具体的なRepositoryに依存していると、簡単にストレージ
エリック・エヴァンスのドメイン駆動設計 ソフトウェアの核心にある複雑さに立ち向かう(Eric Evans 牧野祐子 和智右桂 今関剛) | 翔泳社の本 去年の秋ぐらいから設計に悩む事があり、エリック・エヴァンスのドメイン駆動設計、いわゆるDDD本を買ってました。 なかなか通しで読む時間が取れず、気になる所をつまんで読んでたので、ちゃんと理解出来てないなと思っていた所、読書会をすると言う知り合いが居たので混ぜてもらいました。 折角なので記憶に新しいうちにメモして置こうと思って書いてるけど、理解がふんわりしてるまま、もしくは勘違いしたまま書いてる可能性もあります。 あと、議事録ではないので、あくまで読書会で話した結果、自分が思った事を書いています。 なんか書いてたらすごく長くなっちゃったけど、次回以降もこんなに書けるか分かりません。 今回読んだ範囲 まえがき 第1章 知識をかみ砕く 第2章
タイトルに書かれていることで全てなのですが、DDDとCQRSの併用について強調している日本語の情報が少ないので、軽くまとめておきます。 CQRS+DDD CQRS(コマンドクエリ責務分離)とは、サーバの機能を「コマンド」(副作用あり)と「クエリ」(副作用なし)で完全に分けちゃおう、という考え方です。そもそも「コマンド」と「クエリ」ではあらゆる要件が異なります。 一貫性: 「コマンド」は整合性のある処理が必要、「クエリ」はあまり気にする必要なし ストレージ: 「コマンド」側は正規化してデータを保存したい、「クエリ」側は非正規な方が効率的 スケーラビリティ: 「コマンド」は全体の負荷の中で占める割合が少ない、「クエリ」は負荷が大きい なので分けちゃうわけですが、 コマンド側 複雑なビジネスロジックが絡むので、ドメイン駆動が活躍 クエリ側 複雑なビジネスロジックがないので、ドメイン層はスキップ
目次 プラトン的モデル 言うべきことを言う コンテキスト 価値提案を把握する 単一責任システム エンティティは ID とライフサイクルを持つ 値オブジェクトは記述する 集計ルートによりエンティティを結合する ドメイン サービス モデルの主要な操作 リポジトリにより集計ルートを省略する データベースの関連事項 DDD の使用を開始する ドメイン駆動設計 (DDD) とは、洗練されたオブジェクト システムの設計に役立つ原則とパターンをまとめたものです。設計に DDD を適切に適用することで、ドメイン モデルと呼ばれるソフトウェア抽象化を実現できます。このモデルにより複雑なビジネス ロジックをカプセル化できるため、実際の業務とコードとの間に存在するギャップを小さくすることができます。 この記事では、DDD に関連する基本的な概念と設計パターンについて解説します。機能豊富なドメイン モデルを設計し
Zend Framework勉強会#2 はGMOペパボ株式会社様の協力もあって、盛況でしたが、どうもZend_Dbに関して誤解があるような気がしているので(私も含めて)一通り確認してみようというフォローアップ記事です。 Zend Frameworkで対応しているモデル構成は、ドメインモデル+サービスレイヤーで直接的にはデータマッパーです。 CakePHPでは標準ではActiveRecordを採用していると思いますが、ここがCakePHPやsymfonyで学習してきた人が一番最初に戸惑う部分ではないかと思います。また、初学者がデータマッパーの意義をいきなり理解するのは難しいような気もします。 要は、多くの初心者が“モデルって、DBテーブルのことだよね”と考えてしまうのはよくない、と。結果的にコントローラがふくれあがり、UnitTestで影響が出てしまう、という話になっています。 - Cake
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く