SRP:パラメーターの代わりにインスタンスフィールド値を使用するのはなぜですか?
質問
読んだばかりです SRP、123と同じくらい簡単です…, 、そしてそれはすべて「凝集」という名前のセクションで私と共鳴します(私は以前に「取得」することを主張しましたが、このパラメーターの話とインスタンスフィールドの話は私に一時停止を与えます...):
あなたのクラスを取ってください。あなたの方法を見てください。彼らはパラメーターを持っていますか、それともインスタンスフィールドを使用していますか?パラメーターを使用している場合は、削除します。それらをインスタンスフィールドにします。 5つのインスタンスのいずれかを使用する方法になりますか?それはおそらく、その方法とあなたのクラスの間に存在する低い凝集の警告です。
このパラメーターの削除は、静的性(低い凝集)に近づいている方法を明らかにするための一時的な演習であり、完了時にパラメーターの使用に戻るという考えです。
または、たとえばパラメーターよりもフィールドの好みは、高い結束を維持するための実際の設計手法ですか?
私はどういうわけか引用を文脈から外しましたか?
解決
CRUDは、インターフェイスベースのプログラミングに対する実際の一般的なアプローチです。 CRUDインターフェイスを実装する2つのコンクリートクラスの従業員と建物を取ります。
ここで、コードがパラメーターに基づいているように見える方法を想像してみてください。
Employee employeeObj = new Employee();
Building buildingObj = new Building();
string firstName = "Bob";
employeeObj.Create(firstName);
建物はどうですか?
BuildingTypes buildingType = BuildingTypes.One;
building.Create(buildingType);
woops ...さまざまなパラメーターでCRUDインターフェイスをどのように実装することになっていますか?オーバーロードを作成しますか?より多くのインターフェイス? 2つのParams(FirstName LastName)はどうですか?
これは非常に速くなります.... CRUDインターフェイスを備えたパラメーターを使用するとすぐに、変更する理由が複数あるため、デザインの結束が減少します。
オブジェクト/インスタンスベースのパラメーションを使用してみましょう...
Employee empObj = new Employee();
empObj.FirstName = "Bob";
empObj.Create();
Building buildingObj = new Building();
buildingObj.BuildingType = BuildingTypes.One;
buildingObj.Create();
シンプルなクラッドとパラマリは、多型を振りかけることさえできません。
someObj.Create();
これは、カプセル化された組成、デカップリング、SRPなどにもつながります...