RSS DEV コミュニティ

OOP(オブジェクト指向プログラミング)が現実世界™と出会うとどうなるか

著者は、オブジェクト指向デザインの原則、特にカプセル化、を複雑なシナリオ(例えばオブジェクトの複製やバージョニング)に適用することを疑問視しています。彼らは、データと振る舞いを一緒に保持する重要性を認識していますが、特定のアクションを実行するためにどのオブジェクトが知るべきかを決めることに苦労しています。著者は、Parent-Child モデルの例を挙げています。そこでは、Parent がネストされたレコードの複製を調整すべきです。これにより、複数のオブジェクトにわたる調整ロジックをどこに配置するかという問題が生じます。3つのオプションが提示されます。オーケストレーターもしくはサービスオブジェクトパターンを使用する、集約ルートに責任を負わせる、もしくはネストされたオブジェクトに複製を委ねる。これらのオプションには、ドメインモデルの外部に調整ロジックを保持する利点と、集約ルートに調整ロジックを蓄積するデメリットがあります。著者は、カプセル化は有価値であるが、バージョニングや複製のような文脈依存の振る舞いは、常にドメインオブジェクトに属さないと結論づけます。これらの振る舞いは一時的で、複数のオブジェクトにわたり、オブジェクトが持つべきではない知識を必要とする。解決策は、どの知識コンテキストとオブジェクトが最も適切にカプセル化するかを再定義することにあると考えられます。このアプローチは、ドメインエンティティが状態と不変性をモデル化するが、すべての手続きフローをモデル化しないことを認め、オブジェクト指向の原則に対する裏切りではありません。
favicon
dev.to
What happens when OOP meets Real World™