りゅうじの学習blog

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

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/17 ドメイン駆動設計Chapter5 テストから

テスト用のリポジトリを作成する データベースへのアクセスを行うことなく、実装したリポジトリが正常に動作するかのテストを行うために作成する。 class InMemoryUserRepository implements IUserRepository { private store: User[] = []; private clone(u…

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

DDD

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

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

DDD

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

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

DDD

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

5/14 TypeScript 例外処理

throw文とErrorオブジェクト console.log("エラーを発生させます"); throwError(); console.log("エラーを発生させました"); function throwError() { const error = new Error('エラーが発生しました'); throw error; } 実行結果(paiza.ioを使用) エラー…

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

DDD

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

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

DDD

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

5/5 Next.jsとReactの違い・必要性

Next.jsとは何か Reactのフレームワークです なぜ必要か ページ数が多いWebサイトでは読み込み速度が遅くなってしまう Reactはページ数の少ない小規模な開発に向いている ReactとNext.jsの違い レンダリング手法が違う Reactのレンダリング手法 クライアント…

4/25 TypeScript try-catch構文のcatchの引数の型

前提 tsconfig.jsonの設定でuseUnknownInCatchVariablesがtrueである(strictモードがtrueであればこの設定がtrueになるので同義です) なぜ必要な知識か catch (err) の errの型は設定がtrueであれば、unknownになり、falseであれば、any になる unknownで…

4/24 express x TypeScriptの環境でnodemonを使用してホットリロードする設定

前提 expressをTypeScriptでバックエンドを実装している。 なぜ必要か コードを変更するたびに、手動でサーバーを再起動する手間を省き、開発の効率を上げるためにホットリロードを導入したい。 ホットリロードとは ホットリロード(Hot Reload)とは、コード…

4/18 TypeScript Class宣言 ゲッターセッター

ゲッターセッターとは ゲッター データを取得した時に何かの関数を実行したい時に使う セッター 何かの値を変更・代入したい時に使う ※TypeScriptには存在しないもの、es6には存在する 使い方 class Teacher extends Person { get subject(): string { if (!…

4/17 TypeScript クラスの継承

extendsを使用して、他のクラスの機能を継承する 継承とは あるクラスに機能を追加・拡張した別のクラスを作成する機能です。 特徴 継承元(親クラス)継承して作った別のクラス(子クラス)とする 子クラスのインスタンスは親クラスのインスタンスの代わり…

4/16 TypeScript 静的プロパティ・静的メソッド

静的プロパティ(static property)・静的メソッド(static method) クラス宣言に含むことができる インスタンスではなく、クラスそのものに属する 通常のプロパティ・メソッドの宣言の前にstaticと付ければいい class Person { static adminName: string = 'ko…

4/14 TypeScript Class構文

オブジェクト思考プログラミング(OOP)とは OOPとは現実世界のものに見立ててプログラムする方法 どのようにアプリケーションを作るかという方法の一つ 人間にとってわかりやすくロジックを分割する方法の一つ どうやって作るの?となった時に、現実世界のも…