りゅうじの学習blog

学習したことをアウトプットしていきます。

DDD

6/27 ドメイン駆動設計 集約 [復習]

DDD

集約とは ドメイン駆動設計において、一つ以上のエンティティを束ね、単一のトランザクションの枠内で整合性を保つための仕組みです。 例えば、銀行口座とそれに紐づく取引履歴エンティティがある場合、これらを銀行口座集約として束ね、取引が行われた場合…

6/9 ドメイン駆動設計Chapter15 15-1

DDD

15-1 軽量DDDに陥らないために 軽量DDDとは ドメイン駆動設計に登場するパターンのみを取り入れること コードの書き方というパターンを主題としていることで、開発者だけ完結してしまい、実践しやすく、短期的にプロダクトのコードにある程度の秩序をもたら…

6/8 ドメイン駆動設計Chapter14 14-2

DDD

14-2 アーキテクチャの解説 ドメイン駆動設計と同時に語られることの多いアーキテクチャ レイヤードアーキテクチャ ヘキサゴナルアーキテクチャ クリーンアーキテクチャ ドメイン駆動設計においては、ドメインが隔離されることが重要である アーキテクチャに…

6/7 ドメイン駆動設計Chapter14 14-1

DDD

14-1 アーキテクチャの役目 ドメイン駆動設計において、アーキテクチャは主役ではない 14-1-1 利用なUI ドメインオブジェクトに記載されるべきルールやメソッドがユーザーインフェースに記載されている状態を指す 14-1-2 ドメイン駆動設計がアーキテクチャに…

6/6 ドメイン駆動設計Chapter13 13-2

DDD

13-2 仕様とリポジトリを組み合わせる リポジトリの検索のメソッド、検索の処理の中には重要なルールを含むものがある 重要なルールを仕様オブジェクトに記述し、リポジトリに引き渡すようにする プレミアムユーザであることを表す仕様オブジェクト export c…

6/5 ドメイン駆動設計Chapter13 13-1~13-1-2

DDD

13-1 仕様 オブジェクトの評価は単純なものならメソッドで定義されるが、すべてが単純なものではなく、メソッドとして定義するべきものでないものもある アプリケーションサービスに記述されがちだが、オブジェクトの評価はドメインの重要なルールなので、サ…

6/4 ドメイン駆動設計 Chapter12

DDD

集約とは オブジェクト指向プログラミングでは複数のオブジェクトがまとめられ、一つの意味を持ったオブジェクトが構築される オブジェクトのグループには維持されべき不変条件が存在する オブジェクトのデータ変更の操作を無制限に受け入れてしまうと不変条…

6/3 ドメイン駆動設計 Chapter10 10-4-2

DDD

10-4-2 トランザクションスコープを利用したパターン トランザクション処理はデータベースに限ったことではない トランザクションスコープとは、一連の操作が全て成功するか、全て失敗する(ロールバックされる)ことを保証する範囲のことを指します。これは…

6/2 ドメイン駆動設計Chapter10 10-4 10-4-1

DDD

10-4 トランザクションによる防衛 トランザクションは一貫した状態を保つために、相互依存的な操作の完了ないし取り消しを保証します 通販サイトで商品を購入するときにポイントを使うとします システムはまずユーザの使用しようとしたポイントを減らします …

6/1 ドメイン駆動設計Chapter10 10-1~10-3

DDD

10-1 整合性とは 矛盾がなく一貫性のあること・ズレがないこと 注文書で例えると ヘッダ部かボディ部のどちらかが欠けても注文書は成り立たない ヘッダ部がないと誰に届ければいいかわからないし、ボディ部がないと注文明細を届け先がわかっても何を届ければ…

5/31 ドメイン駆動設計Chapter9 9-2 2

DDD

続 9-2 採番処理をファクトリに実装した例の確認 書籍では、採番処理をデータベースの操作をして行っていました。こちらをUserエンティティに記述するのは、高レベルな概念のUserに低レベルな概念のデータベースの操作を記述する悪い例です。そして、テスト…

5/30 ドメイン駆動設計Chapter9 9-2 1

DDD

9-2 採番処理をファクトリに実装した例の確認 採番とは、一般的に「データ管理のために、それぞれのデータに固有の番号を与える」という意味で呼ばれています ファクトリが活躍するわかりやすい例として、採番処理がある これまでUserのインスタンスを生成す…

5/29 ドメイン駆動設計Chapter9 9-1

DDD

9-1 ファクトリの目的 自分の身の回りにもたくさんの道具がある 机・椅子・紙・ペン… 道具の扱い方を知っていれば内部構造に詳しくなくても恩恵を受けられる便利さがある オブジェクト指向プログラミングにおけるクラスは道具です メソッドの扱い方さえ知っ…

5/28 ドメイン駆動設計 Chapter8 8-2

DDD

8-2 コマンドラインインターフェースに組み込んでみよう 開発者はCLIを好む傾向がある その理由はさまざまである、代表的な例としては グラフィックに関わる処理の実装が不要で単純であること コマンドを正確に入力することが求められるので誤操作を起こしづ…

5/27 ドメイン駆動設計Chapter8 8-1

DDD

ソフトウェアに求められるユーザーインターフェース ソフトウェアの利用者はユーザーインターフェースを通してアプリケーションを利用するので、ソフトウェアを成り立たせるためにはユーザーインターフェースが必要です ユーザーインターフェースの種類 CLI…

5/26 ドメイン駆動設計 Chapter7 7-4

DDD

依存関係をコントロールする UserApplicationServiceがテスト用のリポジトリを使用して欲しいのか、DBに接続するプロダクション用のリポジトリを利用して欲しいかは時と場合による 開発中であれば前者、リリースビルドは後者 重要なのは、どのように制御する…

5/25 ドメイン駆動設計 Chapter7 7-3

DDD

7-3 依存関係逆転の原則とは 依存関係逆転の原則(Dependency Inversion Principle)は以下のように定義される 上位レベルのモジュールは下位レベルのモジュールに依存してはならない、どちらのモジュールも抽象に依存すべきである。 抽象は、実装の詳細に依…

5/24 ドメイン駆動設計 Chapter7 7-2

DDD

7-2依存とは 依存は、あるオブジェクトがあるオブジェクトを参照するだけで発生します。 class ObjectA { constructor(private objectB: ObjectB) {} } ObjectAはObjectBを参照しています ObjectBの定義が存在しない限りObjectAも成り立ちません ObjectAはOb…

5/23 ドメイン駆動設計Chapter7-1

DDD

柔軟性をもたらす依存関係のコントロール ソフトウェアに柔軟性をもたらすのに必要なこと=依存関係を制御すること プログラムには依存という概念がある 依存とは、オブジェクトがオブジェクトを参照するだけで発生する オブジェクト同士に依存関係が発生す…

5/21 ドメイン駆動設計Chapter6 退会処理から終わりまで

DDD

退会処理を作成する // deleteのコマンドオブジェクト class UserDeleteCommand { constructor(public id: string) {} } class UserApplicationService { constructor(private readonly userRepository: IUserRepository, private readonly userService: Use…

5/20 ドメイン駆動設計Chapter6 ユーザ情報更新処理を作成するまで

DDD

ユーザ情報を更新する 項目ごとに別々のユースケースにするか単一のユースケースで複数項目を同時更新できるようにするか 項目ごとに別々のユースケースとは、ユーザ名・メルアド・住所とそれぞれを別々のユースケースとするという意味です 複数項目同時更新…

5/19 ドメイン駆動設計Chapter6 ユーザ情報取得処理まで

DDD

アプリケーションサービスとは何か ユースケースを実現するオブジェクト 例としてユーザ機能では、CRUD処理がアプリケーションサービスです。 ユーザを登録する ユーザ情報を確認する ユーザ情報を更新する 退会する ドメインオブジェクトから準備する アプ…

5/16 ドメイン駆動設計Chapter5 テスト前まで

DDD

リポジトリとは何か データの保管庫。 ドメインオブジェクト(値オブジェクト・エンティティ)とデータベースを直接やりとりせず、リポジトリを介して行う。 リポジトリのインターフェース 定義するものは、リポジトリの責務である、オブジェクトの永続化に…

5/15 ドメイン駆動設計 Chapter4

DDD

ドメインサービスとは何か 値オブジェクト・エンティティに定義すると不自然なメソッドを定義するドメインオブジェクトのこと 不自然なメソッドを確認する ユーザ名の重複処理 こちらをドメインオブジェクトに定義すると重複の有無を自信に問い合わせること…

5/15 ドメイン駆動設計 Chapter3

DDD

DDDにおけるエンティティとは何か ドメインモデルを実装したドメインオブジェクトである 値オブジェクトもドメインモデルを実装したドメインオブジェクトである 両者の違いは同一性(id)によって識別されるかどうか エンティティの性質 可変である 同じ属性で…

5/13 ドメイン駆動設計 Chapter2

DDD

値オブジェクトとは何か システム固有の値を表現するために定義されたオブジェクトのこと プリミティブな値でもシステムを組み上げることはできるが、値オブジェクトが必要なときもある。 プリミティブな値で氏名を表現するコード const fullName = "haga yu…

5/12 ドメイン駆動設計 Chapter1

DDD

ドメイン駆動設計とは ドメインの知識に焦点を当てた設計手法です。 ドメインとは何か 領域という意味を持った言葉です。 ソフトウェア開発におけるドメインとは、プログラムを適用する対象となる領域を指します。 重要なのは何か ドメインが何かではなく、…

ドメイン駆動設計入門Chapter5

DDD

リポジトリとは ソフトウェア文脈のリポジトリはデータの保管庫です リポジトリはデータを保存・復元する処理を抽象的に扱うためのオブジェクトです オブジェクトを繰り返し利用するには、データベースにオブジェクトのデータを保存・復元する必要がある。…