2023-05-01から1ヶ月間の記事一覧
続 9-2 採番処理をファクトリに実装した例の確認 書籍では、採番処理をデータベースの操作をして行っていました。こちらをUserエンティティに記述するのは、高レベルな概念のUserに低レベルな概念のデータベースの操作を記述する悪い例です。そして、テスト…
9-2 採番処理をファクトリに実装した例の確認 採番とは、一般的に「データ管理のために、それぞれのデータに固有の番号を与える」という意味で呼ばれています ファクトリが活躍するわかりやすい例として、採番処理がある これまでUserのインスタンスを生成す…
9-1 ファクトリの目的 自分の身の回りにもたくさんの道具がある 机・椅子・紙・ペン… 道具の扱い方を知っていれば内部構造に詳しくなくても恩恵を受けられる便利さがある オブジェクト指向プログラミングにおけるクラスは道具です メソッドの扱い方さえ知っ…
8-2 コマンドラインインターフェースに組み込んでみよう 開発者はCLIを好む傾向がある その理由はさまざまである、代表的な例としては グラフィックに関わる処理の実装が不要で単純であること コマンドを正確に入力することが求められるので誤操作を起こしづ…
ソフトウェアに求められるユーザーインターフェース ソフトウェアの利用者はユーザーインターフェースを通してアプリケーションを利用するので、ソフトウェアを成り立たせるためにはユーザーインターフェースが必要です ユーザーインターフェースの種類 CLI…
依存関係をコントロールする UserApplicationServiceがテスト用のリポジトリを使用して欲しいのか、DBに接続するプロダクション用のリポジトリを利用して欲しいかは時と場合による 開発中であれば前者、リリースビルドは後者 重要なのは、どのように制御する…
7-3 依存関係逆転の原則とは 依存関係逆転の原則(Dependency Inversion Principle)は以下のように定義される 上位レベルのモジュールは下位レベルのモジュールに依存してはならない、どちらのモジュールも抽象に依存すべきである。 抽象は、実装の詳細に依…
7-2依存とは 依存は、あるオブジェクトがあるオブジェクトを参照するだけで発生します。 class ObjectA { constructor(private objectB: ObjectB) {} } ObjectAはObjectBを参照しています ObjectBの定義が存在しない限りObjectAも成り立ちません ObjectAはOb…
柔軟性をもたらす依存関係のコントロール ソフトウェアに柔軟性をもたらすのに必要なこと=依存関係を制御すること プログラムには依存という概念がある 依存とは、オブジェクトがオブジェクトを参照するだけで発生する オブジェクト同士に依存関係が発生す…
退会処理を作成する // deleteのコマンドオブジェクト class UserDeleteCommand { constructor(public id: string) {} } class UserApplicationService { constructor(private readonly userRepository: IUserRepository, private readonly userService: Use…
ユーザ情報を更新する 項目ごとに別々のユースケースにするか単一のユースケースで複数項目を同時更新できるようにするか 項目ごとに別々のユースケースとは、ユーザ名・メルアド・住所とそれぞれを別々のユースケースとするという意味です 複数項目同時更新…
アプリケーションサービスとは何か ユースケースを実現するオブジェクト 例としてユーザ機能では、CRUD処理がアプリケーションサービスです。 ユーザを登録する ユーザ情報を確認する ユーザ情報を更新する 退会する ドメインオブジェクトから準備する アプ…
テスト用のリポジトリを作成する データベースへのアクセスを行うことなく、実装したリポジトリが正常に動作するかのテストを行うために作成する。 class InMemoryUserRepository implements IUserRepository { private store: User[] = []; private clone(u…
リポジトリとは何か データの保管庫。 ドメインオブジェクト(値オブジェクト・エンティティ)とデータベースを直接やりとりせず、リポジトリを介して行う。 リポジトリのインターフェース 定義するものは、リポジトリの責務である、オブジェクトの永続化に…
ドメインサービスとは何か 値オブジェクト・エンティティに定義すると不自然なメソッドを定義するドメインオブジェクトのこと 不自然なメソッドを確認する ユーザ名の重複処理 こちらをドメインオブジェクトに定義すると重複の有無を自信に問い合わせること…
DDDにおけるエンティティとは何か ドメインモデルを実装したドメインオブジェクトである 値オブジェクトもドメインモデルを実装したドメインオブジェクトである 両者の違いは同一性(id)によって識別されるかどうか エンティティの性質 可変である 同じ属性で…
throw文とErrorオブジェクト console.log("エラーを発生させます"); throwError(); console.log("エラーを発生させました"); function throwError() { const error = new Error('エラーが発生しました'); throw error; } 実行結果(paiza.ioを使用) エラー…
値オブジェクトとは何か システム固有の値を表現するために定義されたオブジェクトのこと プリミティブな値でもシステムを組み上げることはできるが、値オブジェクトが必要なときもある。 プリミティブな値で氏名を表現するコード const fullName = "haga yu…
ドメイン駆動設計とは ドメインの知識に焦点を当てた設計手法です。 ドメインとは何か 領域という意味を持った言葉です。 ソフトウェア開発におけるドメインとは、プログラムを適用する対象となる領域を指します。 重要なのは何か ドメインが何かではなく、…
Next.jsとは何か Reactのフレームワークです なぜ必要か ページ数が多いWebサイトでは読み込み速度が遅くなってしまう Reactはページ数の少ない小規模な開発に向いている ReactとNext.jsの違い レンダリング手法が違う Reactのレンダリング手法 クライアント…