デザインパターン
問題一覧
1
関連するデータやロジック同士が分散している状態のこと 単にデータを保持するだけの、なんら処理ロジックを持たない データクラス は低凝集です データクラスとコントローラークラスが分離しているような状態がそうらしい https://qiita.com/MinoDriven/items/5e69d9bd028aa350e2c4
2
ValueObjectとはデータのラッパーであり、正確には (原則的に)1個のインスタンス変数 インスタンス変数を初期化するコンストラクタ インスタンス変数を正常に操作することを保証したメソッド から構成されるクラスです。 /// <summary>税抜き金額</summary> public class AmountExcludingTax { private int _amount; public AmountExcludingTax(int amount) { // 初期値はコンストラクタで与える _amount = amount; } } // 税抜き金額1000円 var amountExcludingTax = new AmountExcludingTax(1000);
3
オブジェクトを「 newした時点で正しく利用可能な、即ち完全体 」となるよう適切な初期化ロジックをコンストラクタに実装する方法です。 税抜き金額のあるべき姿、要件を考えてみましょう。 0以上の整数であること となりますね。この要件を満たすもののみインスタンス変数に格納するようフィルタリングすれば良いのです。要件未達の値は例外を投げるよう実装します。 /// <summary>税抜き金額</summary> public class AmountExcludingTax { private int _amount; public AmountExcludingTax(int amount) { // コンストラクタで不正値を除外 if (!IsValid(amount)) { throw new ArgumentOutOfRangeException(); } _amount = amount; } // 税抜き金額のバリデーションを用意 private static bool IsValid(int amount) { // 正常値の要件を記述 return 0 <= amount; } } これで正常値のみインスタンス変数に格納できるようになりました。 どうも値の役割をクラスとして定義し、役割外の値や行動をもたせない。 完全に役割が保証されたクラスを定義するということが思想らしい JavaScriptでそれやるのきつくね?
4
/// <summary>税抜き金額</summary> public class AmountExcludingTax { private readonly int _amount; public int Value { get { return _amount; } } /// <summary>コンストラクタ</summary> /// <param name="amount">税抜き金額</param> public AmountExcludingTax(int amount) { if (!IsValid(amount)) { throw new ArgumentOutOfRangeException(); } _amount = amount; } /// <summary>税抜き金額を加算する</summary> /// <param name="amountExcludingTax">税抜き金額</param> /// <returns>税抜き金額</returns> public AmountExcludingTax Add(AmountExcludingTax amountExcludingTax) { return new AmountExcludingTax(_amount + amountExcludingTax._amount); } /// <summary>有効な税抜き金額であるかを返す</summary> /// <param name="amount">税抜き金額</param> /// <returns>有効な場合true</returns> private static bool IsValid(int amount) { return 0 <= amount; } }
5
モジュールの抽象度・抽象化 上位モジュールが、下位モジュールの具体的な内容を知らなくても動作するとき、上位モジュールの抽象度は下位モジュールよりも高いという。 またこのとき、下位モジュールの内容は抽象化されているという。また、上位モジュールは下位モジュールよりも抽象的である、ともいう。 逆に、下位モジュールがモジュールの意味以上の知識を上位モジュールに要求する場合、抽象化に失敗しているという 下位モジュールの仕様を意識させない上位モジュールを作ることが重要!
その他
その他
谷峻輔 · 12問 · 2年前その他
その他
12問 • 2年前LWC
LWC
谷峻輔 · 100問 · 2年前LWC
LWC
100問 • 2年前LWC2
LWC2
谷峻輔 · 28問 · 2年前LWC2
LWC2
28問 • 2年前Javascript
Javascript
谷峻輔 · 100問 · 2年前Javascript
Javascript
100問 • 2年前javascript2
javascript2
谷峻輔 · 58問 · 2年前javascript2
javascript2
58問 • 2年前js1 JavaScript の基礎
js1 JavaScript の基礎
谷峻輔 · 92問 · 2年前js1 JavaScript の基礎
js1 JavaScript の基礎
92問 • 2年前js2 コード品質、オブジェクト基本、データ型
js2 コード品質、オブジェクト基本、データ型
谷峻輔 · 100問 · 2年前js2 コード品質、オブジェクト基本、データ型
js2 コード品質、オブジェクト基本、データ型
100問 • 2年前js3 データ型
js3 データ型
谷峻輔 · 100問 · 2年前js3 データ型
js3 データ型
100問 • 2年前js4 データ型、関数の高度な機能
js4 データ型、関数の高度な機能
谷峻輔 · 100問 · 2年前js4 データ型、関数の高度な機能
js4 データ型、関数の高度な機能
100問 • 2年前js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス
js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス
谷峻輔 · 96問 · 2年前js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス
js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス
96問 • 2年前js6 クラス Promise, async/await
js6 クラス Promise, async/await
谷峻輔 · 100問 · 2年前js6 クラス Promise, async/await
js6 クラス Promise, async/await
100問 • 2年前js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール
js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール
谷峻輔 · 96問 · 2年前js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール
js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール
96問 • 2年前js8 その他
js8 その他
谷峻輔 · 57問 · 2年前js8 その他
js8 その他
57問 • 2年前Javaとは〜
Javaとは〜
谷峻輔 · 83問 · 2年前Javaとは〜
Javaとは〜
83問 • 2年前Reactクイックスタート
Reactクイックスタート
谷峻輔 · 15問 · 2年前Reactクイックスタート
Reactクイックスタート
15問 • 2年前承認申請
承認申請
谷峻輔 · 16問 · 2年前承認申請
承認申請
16問 • 2年前アプリケーションビルダー2
アプリケーションビルダー2
谷峻輔 · 100問 · 2年前アプリケーションビルダー2
アプリケーションビルダー2
100問 • 2年前アプリケーションビルダー3
アプリケーションビルダー3
谷峻輔 · 100問 · 2年前アプリケーションビルダー3
アプリケーションビルダー3
100問 • 2年前アプリケーションビルダー4
アプリケーションビルダー4
谷峻輔 · 100問 · 2年前アプリケーションビルダー4
アプリケーションビルダー4
100問 • 2年前アプリケーションビルダー5
アプリケーションビルダー5
谷峻輔 · 94問 · 2年前アプリケーションビルダー5
アプリケーションビルダー5
94問 • 2年前アプリケーションビルダー6
アプリケーションビルダー6
谷峻輔 · 100問 · 2年前アプリケーションビルダー6
アプリケーションビルダー6
100問 • 2年前アプリケーションビルダー7
アプリケーションビルダー7
谷峻輔 · 100問 · 2年前アプリケーションビルダー7
アプリケーションビルダー7
100問 • 2年前アプリケーションビルダー8
アプリケーションビルダー8
谷峻輔 · 98問 · 2年前アプリケーションビルダー8
アプリケーションビルダー8
98問 • 2年前アプリケーションビルダー9
アプリケーションビルダー9
谷峻輔 · 70問 · 2年前アプリケーションビルダー9
アプリケーションビルダー9
70問 • 2年前フロー
フロー
谷峻輔 · 42問 · 2年前フロー
フロー
42問 • 2年前レポート、ダッシュボード
レポート、ダッシュボード
谷峻輔 · 60問 · 2年前レポート、ダッシュボード
レポート、ダッシュボード
60問 • 2年前SalesCloud
SalesCloud
谷峻輔 · 18問 · 2年前SalesCloud
SalesCloud
18問 • 2年前標準機能
標準機能
谷峻輔 · 72問 · 2年前標準機能
標準機能
72問 • 2年前宣言的開発
宣言的開発
谷峻輔 · 8問 · 2年前宣言的開発
宣言的開発
8問 • 2年前数式、人力規則
数式、人力規則
谷峻輔 · 18問 · 2年前数式、人力規則
数式、人力規則
18問 • 2年前アクセスレベル
アクセスレベル
谷峻輔 · 63問 · 2年前アクセスレベル
アクセスレベル
63問 • 2年前データ型変換
データ型変換
谷峻輔 · 22問 · 2年前データ型変換
データ型変換
22問 • 2年前オブジェクト、項目
オブジェクト、項目
谷峻輔 · 91問 · 2年前オブジェクト、項目
オブジェクト、項目
91問 • 2年前アプリ、タブ
アプリ、タブ
谷峻輔 · 92問 · 2年前アプリ、タブ
アプリ、タブ
92問 • 2年前自動化
自動化
谷峻輔 · 17問 · 2年前自動化
自動化
17問 • 2年前組織、開発モデル
組織、開発モデル
谷峻輔 · 65問 · 2年前組織、開発モデル
組織、開発モデル
65問 • 2年前ボタン、アクション
ボタン、アクション
谷峻輔 · 69問 · 2年前ボタン、アクション
ボタン、アクション
69問 • 2年前インテグレーション
インテグレーション
谷峻輔 · 40問 · 2年前インテグレーション
インテグレーション
40問 • 2年前ページレイアウト、リストビュー、レコードタイプ、プロセス
ページレイアウト、リストビュー、レコードタイプ、プロセス
谷峻輔 · 46問 · 2年前ページレイアウト、リストビュー、レコードタイプ、プロセス
ページレイアウト、リストビュー、レコードタイプ、プロセス
46問 • 2年前標準オブジェクト
標準オブジェクト
谷峻輔 · 42問 · 2年前標準オブジェクト
標準オブジェクト
42問 • 2年前ServiceCloud
ServiceCloud
谷峻輔 · 16問 · 2年前ServiceCloud
ServiceCloud
16問 • 2年前ユーザ、ライセンス、プロファイル、権限セット
ユーザ、ライセンス、プロファイル、権限セット
谷峻輔 · 41問 · 2年前ユーザ、ライセンス、プロファイル、権限セット
ユーザ、ライセンス、プロファイル、権限セット
41問 • 2年前データインポート、エクスポート
データインポート、エクスポート
谷峻輔 · 3回閲覧 · 12問 · 2年前データインポート、エクスポート
データインポート、エクスポート
3回閲覧 • 12問 • 2年前Chatter
Chatter
谷峻輔 · 21問 · 2年前Chatter
Chatter
21問 • 2年前承認申請
承認申請
谷峻輔 · 15問 · 2年前承認申請
承認申請
15問 • 2年前フロー
フロー
谷峻輔 · 44問 · 2年前フロー
フロー
44問 • 2年前レポート、ダッシュボード
レポート、ダッシュボード
谷峻輔 · 65問 · 2年前レポート、ダッシュボード
レポート、ダッシュボード
65問 • 2年前SalesCloud
SalesCloud
谷峻輔 · 18問 · 2年前SalesCloud
SalesCloud
18問 • 2年前標準機能
標準機能
谷峻輔 · 72問 · 2年前標準機能
標準機能
72問 • 2年前宣言的開発
宣言的開発
谷峻輔 · 8問 · 2年前宣言的開発
宣言的開発
8問 • 2年前アクセスレベル
アクセスレベル
谷峻輔 · 52問 · 2年前アクセスレベル
アクセスレベル
52問 • 2年前数式、人力規則
数式、人力規則
谷峻輔 · 17問 · 2年前数式、人力規則
数式、人力規則
17問 • 2年前データ型変換
データ型変換
谷峻輔 · 22問 · 2年前データ型変換
データ型変換
22問 • 2年前オブジェクト、項目
オブジェクト、項目
谷峻輔 · 89問 · 2年前オブジェクト、項目
オブジェクト、項目
89問 • 2年前アプリ、タブ
アプリ、タブ
谷峻輔 · 100問 · 2年前アプリ、タブ
アプリ、タブ
100問 • 2年前自動化
自動化
谷峻輔 · 18問 · 2年前自動化
自動化
18問 • 2年前組織、開発モデル
組織、開発モデル
谷峻輔 · 60問 · 2年前組織、開発モデル
組織、開発モデル
60問 • 2年前ボタン、アクション
ボタン、アクション
谷峻輔 · 69問 · 2年前ボタン、アクション
ボタン、アクション
69問 • 2年前インテグレーション
インテグレーション
谷峻輔 · 40問 · 2年前インテグレーション
インテグレーション
40問 • 2年前ページレイアウト、リストビュー、レコードタイプ、プロセス
ページレイアウト、リストビュー、レコードタイプ、プロセス
谷峻輔 · 44問 · 2年前ページレイアウト、リストビュー、レコードタイプ、プロセス
ページレイアウト、リストビュー、レコードタイプ、プロセス
44問 • 2年前標準オブジェクト
標準オブジェクト
谷峻輔 · 32問 · 2年前標準オブジェクト
標準オブジェクト
32問 • 2年前ServiceCloud
ServiceCloud
谷峻輔 · 17問 · 2年前ServiceCloud
ServiceCloud
17問 • 2年前ユーザ、ライセンス、プロファイル、権限セット
ユーザ、ライセンス、プロファイル、権限セット
谷峻輔 · 18問 · 2年前ユーザ、ライセンス、プロファイル、権限セット
ユーザ、ライセンス、プロファイル、権限セット
18問 • 2年前データインポート、エクスポート
データインポート、エクスポート
谷峻輔 · 11問 · 2年前データインポート、エクスポート
データインポート、エクスポート
11問 • 2年前Chatter
Chatter
谷峻輔 · 21問 · 2年前Chatter
Chatter
21問 • 2年前一時
一時
谷峻輔 · 89問 · 2年前一時
一時
89問 • 2年前一時2
一時2
谷峻輔 · 29問 · 2年前一時2
一時2
29問 • 2年前js9 ドキュメント
js9 ドキュメント
谷峻輔 · 80問 · 2年前js9 ドキュメント
js9 ドキュメント
80問 • 2年前問題一覧
1
関連するデータやロジック同士が分散している状態のこと 単にデータを保持するだけの、なんら処理ロジックを持たない データクラス は低凝集です データクラスとコントローラークラスが分離しているような状態がそうらしい https://qiita.com/MinoDriven/items/5e69d9bd028aa350e2c4
2
ValueObjectとはデータのラッパーであり、正確には (原則的に)1個のインスタンス変数 インスタンス変数を初期化するコンストラクタ インスタンス変数を正常に操作することを保証したメソッド から構成されるクラスです。 /// <summary>税抜き金額</summary> public class AmountExcludingTax { private int _amount; public AmountExcludingTax(int amount) { // 初期値はコンストラクタで与える _amount = amount; } } // 税抜き金額1000円 var amountExcludingTax = new AmountExcludingTax(1000);
3
オブジェクトを「 newした時点で正しく利用可能な、即ち完全体 」となるよう適切な初期化ロジックをコンストラクタに実装する方法です。 税抜き金額のあるべき姿、要件を考えてみましょう。 0以上の整数であること となりますね。この要件を満たすもののみインスタンス変数に格納するようフィルタリングすれば良いのです。要件未達の値は例外を投げるよう実装します。 /// <summary>税抜き金額</summary> public class AmountExcludingTax { private int _amount; public AmountExcludingTax(int amount) { // コンストラクタで不正値を除外 if (!IsValid(amount)) { throw new ArgumentOutOfRangeException(); } _amount = amount; } // 税抜き金額のバリデーションを用意 private static bool IsValid(int amount) { // 正常値の要件を記述 return 0 <= amount; } } これで正常値のみインスタンス変数に格納できるようになりました。 どうも値の役割をクラスとして定義し、役割外の値や行動をもたせない。 完全に役割が保証されたクラスを定義するということが思想らしい JavaScriptでそれやるのきつくね?
4
/// <summary>税抜き金額</summary> public class AmountExcludingTax { private readonly int _amount; public int Value { get { return _amount; } } /// <summary>コンストラクタ</summary> /// <param name="amount">税抜き金額</param> public AmountExcludingTax(int amount) { if (!IsValid(amount)) { throw new ArgumentOutOfRangeException(); } _amount = amount; } /// <summary>税抜き金額を加算する</summary> /// <param name="amountExcludingTax">税抜き金額</param> /// <returns>税抜き金額</returns> public AmountExcludingTax Add(AmountExcludingTax amountExcludingTax) { return new AmountExcludingTax(_amount + amountExcludingTax._amount); } /// <summary>有効な税抜き金額であるかを返す</summary> /// <param name="amount">税抜き金額</param> /// <returns>有効な場合true</returns> private static bool IsValid(int amount) { return 0 <= amount; } }
5
モジュールの抽象度・抽象化 上位モジュールが、下位モジュールの具体的な内容を知らなくても動作するとき、上位モジュールの抽象度は下位モジュールよりも高いという。 またこのとき、下位モジュールの内容は抽象化されているという。また、上位モジュールは下位モジュールよりも抽象的である、ともいう。 逆に、下位モジュールがモジュールの意味以上の知識を上位モジュールに要求する場合、抽象化に失敗しているという 下位モジュールの仕様を意識させない上位モジュールを作ることが重要!