ACCOUNT_LOCK || customer.getStatus() == TEM_LOCK || customer.getStatus() == ANTI_SOCIAL) { {無効な顧客用の処理} return; } Account account = accountRepository.getAccount(customer.getAccountId()); if(account.getStatus() == xxxx || …etc ) { {無効な口座用の処理} return; } If … 実装 • 実装の中で行われている顧客の状態の検証は、機能を満たすための検証とビジネス上のルールが混在している • この機能として必要な情報は、あくまで「無効な顧客であるかどうか」である。 • この機能は有効/無効な顧客に対して何を行うかに関心を持つべきであり、ビジネス上の無効な顧客の条件に関しては関心を持つべきでは ない。 • ルールの変更の都度、このモジュールに対しても変更が加えられ、テストも必要になる。 • ルール変更時に検証すべきは新たなルールに従い有効/無効な顧客を判定できているかであり、判定によって提供する機能ではない。 ・顧客のデータを取得する ・顧客の状態を確認する。※以下の場合は無効な顧客とする。 ・アカウントロック ・一時ロック ・反社 ・有効な顧客だった場合、口座情報を取得する。 ・口座の状態を確認する。 ・条件1 ・条件2 …etc ・口座の利用可能残高に応じてxxxxをする。 設計書 機能を満たすモジュールは様々なビジネスルールに依存している。 設計の段階で、機能として提供すべき処理とビジネスルールとして定義すべきものを識別する必要がある