コレクションの複雑さをなくす
from 現場で役立つシステム設計の原則
概要
配列やコレクションを用いる場合、ロジックが分散して関連する場所が増え、複雑さが増す
これを回避するための、コレクション操作が発生するロジックを専用のクラスに閉じ込めることで、解決をする
code:ts
// 顧客クラス
class Customer {
constructor(private name: string, private age: number) {}
}
// 顧客一覧クラス
class Customers {
constructor(private customers: Customer[]) {}
public add(customer: Customer) {
...
}
public removeIfExist(customer: Customer) {
...
}
public count() {
...
}
}
上記のように、コレクションとロジック(業務ロジック)をセットにしたクラスのことをコレクションオブジェクト(ファーストコレクションという)
コレクションオブジェクトは業務の関心事が発生した時に作成をする
次回実装する機能中に、顧客一覧が必要になった
ロジックで発生する処理は基本的に、イミュータブルで行うようにする
NGの例
code:main.ts
class Customers {
constructor(private customers: Customer[]) {}
public add(customer: Customer) {
this.customers.push(customer)
return this.customers
}
OKな例
code:main.ts
class Customers {
constructor(private customers: Customer[]) {}
public add(customer: Customer) {
const result = this.customers
result.push(customer)
return result
}
}