Note
モジュールは一つのドメインに対して責任を持つべき。 ドメインの異なるソースコードは分割する。
ドメイン ≒ アクター
以下はSPRが守られていない例
class OrderService {
/// フルフィルメントのステータスをアップデートする
Future<void> updateStatus() {
UnimplementedError()
}
/// 決済する
Future<void> payment() {
UnimplementedError()
}
}
この場合 updateStatus
とpayment
はアクターが別れる。
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パターンのように窓口となるクラスを作成して、シンプルに利用できるようにすることで、ドメインを分けつつも個別にたくさんのクラスを呼び出す必要なく実装ができる。