データと、これらのデータを操作するメソッドをクラスにまとめるメカニズムは、カプセル化と呼ばれます。
ただし、Open/Closed
原則に従うことは、Dependency injection
公共の財産を公開することによって達成されます。
この場合、カプセル化と依存性注入は相反するように見えますね。
データと、これらのデータを操作するメソッドをクラスにまとめるメカニズムは、カプセル化と呼ばれます。
ただし、Open/Closed
原則に従うことは、Dependency injection
公共の財産を公開することによって達成されます。
この場合、カプセル化と依存性注入は相反するように見えますね。
ここで考慮すべき点が 2 つあります。簡単な「人」の例を使ってみましょう。
個人のプロパティには、firstName、lastName、dateOfBirth などが含まれる場合があります。カプセル化を維持するために、これらは非公開にすることができます。人の年齢が必要な場合は、Person オブジェクトに年齢を提供するように依頼する必要があり、その非公開の dateOfBirth を使用して年齢を計算します。これにより、人の年齢を取得するロジックがシステム内の多くの場所で重複するのを防ぎます。これは、dateOfBirth が公開されている場合に推奨される可能性があります。
Person オブジェクトは、他のオブジェクトに依存する場合もあります。これらのオブジェクト自体を作成するのではなく、人はシステム内の他のエンティティに依存して依存関係を作成し、それらを渡します。Person オブジェクトは、これらの依存関係を保持するパブリック プロパティ (または依存関係を設定するメソッド) を公開する場合があります。人の特性、それらは人の依存関係です。
これは実際には、ロジックを 1 か所だけに配置する別の例です。多くのオブジェクトがすべて依存関係を作成するのではなく、システム内に依存関係を作成できる 1 つの「もの」があります。