2011-04-26 2 views

答えて

4

前述のように、Catは具体的なクラスであるため、意味を問わずすべて公開することができます。コンストラクタの引数を読み取り専用のプロパティとして公開することは、完璧に分かりやすいことです。

しかし、もしCatがICatを実装していたのであれば、PetManagerのような依存関係をICatで公開すると漏洩抽象となることが強く疑われます。

本質的には、interfaces serve as a sort of access modifierです。依存関係を具体的なクラスに公開するのは意味がありますが、インタフェースには関係しません。依存関係はコンストラクタを介して注入されるので、インタフェースの一部になることはありません。コンストラクタの署名は自由度です。

+0

+1!なぜ猫がペットマネージャーを暴露していたのですか?それは猫の財産ではありません! – Domenic

+0

インターフェイスの説明をありがとう、それは明確です。 PetManagerプロパティは実際には1つではありません。これは、必要な依存関係を取得するプロキシのようなものです。 基本的に私がここでやったことは、ブライアンの言葉を引用すると、関連する依存関係の集まりを別のクラスに抽象化し、単にグループ化の仕方として、そしておそらくオブジェクトの構築を単純化するというものです。 依存性注入との互換性はどうですか? – Roubachof

+1

+1マークは文字通りこれについて本を書いたので、彼はおそらく金持ちではなかったので、少なくとも彼は投票に値する。 –

1

...はい、それは可能だろうと思います。多くの場合、SomethingManagerクラスを持っていることが分かったときには、ロジックをコンポーネントの依存関係に分割するのではなく、1つのクラスにグループ化するだけです。あなたの状況では、あなたは本当にPetManagerクラスを持つべきではなく、代わりにWashingServiceBusinessLayerオブジェクトの依存関係を直接注入しているようです。

+0

+1! _抽象に従う._ – Domenic

1

あなたがコントロール/依存性注入スタイルの逆転に加入している場合(あなたのように思われる)、トレードオフについて考える必要があります。

私は、ダイハードがあなたにがあると言うかもしれないと思います。これにはいくつかのメンテナンス上の問題があります。彼らは確かに、たくさんのパラメータを持っていることについては、あまり気にしていません。たとえば、10種類のペットにPetManagerを使用し、10人のペットのうち1人がPetManagerの変更を引き起こす特別な機能が必要だった場合、はPetManagerに依存する他の9つのクラスに影響を与える可能性があります依存関係を個別に注入する方が良いでしょう。

実践しています...あなたは、関連する依存関係の束を別のクラスに抽象化し、それをグループ化の方法として渡し、おそらくオブジェクト構築を単純化します。私はそれで大丈夫です。私はそれに似ています。

全開示:私は他の人々と同じようにこのことについて頑張っているわけではありません。私は異端者かもしれませんが、より少ないパラメーターが見えて、私にとってはよりきれいなにおいがします。私は5年後にもう一度私に尋ねると、私は違った感情を感じるかもしれないという忍耐力がありますが、それは今のところです。

1

猫が具体的なPetmanagerに依存していると思います.PetManagerをサービスとして抽象化すればは洗濯サービスを提供することができます。

関連する問題

 関連する問題