ポートとアダプターパターン
書くとなるビジネスロジックを分離するパターン。
システムが複数の入力デバイスをサポートする必要がある、または入力デバイスが変わる可能性がある場合に効果がある。
要素
レイヤー。使用するデータやイベントの発生場所に関する知識を持たないドメイン、またはビジネスロジック。
ポート。レイヤーとアダプター間のインターフェースを記述したもの。レイヤーを具体的なアダプターから切り離す。
アダプター。外部のデータソース、デバイスなど。レイヤーがその他のコンポーネントとやり取りするためのもの。
関係
〜をさらす。🤔
レイヤーAがポートBをさらす? ポートAをレイヤーBにさらす?
〜を実装する。アダプターAはポートBの制約を実装する。
〜を差し込む。レイヤーAのためのポートBに、アダプターCを組み合わせる。
規約
レイヤーはポートを持つことで利用可能になる
ポートがないレイヤーもある(内部レイヤー)
アダプターは1つ以上のポートの制約を満たさねばならず、ポート用のインタフェースを実装している場合のみ、ポートに差し込むことができる。
強み
テスト容易性、保守容易性、修正容易性を促進する。
様々なチームが様々なレイヤー/アダプターで並行的な作業ができる。
弱み
実行時に使用されるアダプターを選択するメカニズムが必要。
セキュリティや信頼性など、実行時の品質特性はアダプターに依存する。 サードパーティ性のアダプターの選択は変更可能ではないので慎重に選択する必要がある。