concept development

Note

モジュールは一つのドメインに対して責任を持つべき。 ドメインの異なるソースコードは分割する。

ドメイン ≒ アクター

以下はSPRが守られていない例

class OrderService {
	/// フルフィルメントのステータスをアップデートする
	Future<void> updateStatus() {
		UnimplementedError()
	}
 
	/// 決済する
	Future<void> payment() {
		UnimplementedError()
	}
}

この場合 updateStatuspaymentはアクターが別れる。 updateStatusは運営が行う処理なのに対してpaymentはエンドユーザーが行う処理になる。

OrderServiceクラスが持つドメインが複数に渡るため良くない。

ソリューションは以下のようにドメインを切り分ける。

class FulfillmentService {
	Future<void> updateStatus {
		UnimplementedError()
	}
}
 
class PaymentService {
	Future<void> payment() {
		UnimplementedError()
	}
}
 
/// Facadeパターン
class OrderService {
	final PaymentService paymentService;
	final FulfillmentService fulfillmentService;
	
	fulfillmentService.updateStatus();
	paymentService.payment();
}

Facadeパターンのように窓口となるクラスを作成して、シンプルに利用できるようにすることで、ドメインを分けつつも個別にたくさんのクラスを呼び出す必要なく実装ができる。