SRP: зачем использовать значения полей экземпляра вместо параметров? - PullRequest
2 голосов
/ 20 декабря 2010

Я только что прочитал SRP, так же просто, как 123 ... , и все это резонирует со мной, кроме одного абзаца, в разделе под названием "Сплоченность" (я уже говорил, что "получить"Сплоченность, но этот разговор о параметрах против полей экземпляра дает мне паузу ...):

Возьми свой класс.Посмотри на свои методы.У них есть параметры или они используют поля экземпляра?Если они используют параметры, удалите их.Сделайте их экземплярами полей.Вы заканчиваете с методами, которые используют только один из пяти экземпляров?Скорее всего, это предупреждение о низкой когезии, существующей между этим методом и вашим классом.

Является ли это удаление параметров просто временным упражнением для выявления методов, которые приближаются к статической способности (низкая когезия)с мыслью, что вы вернетесь к использованию параметров, когда закончите?

Или предпочтительнее, когда поля экземпляра, а не параметры, являются реальной техникой проектирования для поддержания высокой когезии?

ИмеетеЯ как-то вырвал цитату из контекста?

1 Ответ

2 голосов
/ 20 декабря 2010

CRUD - это действительно общий подход к программированию на основе интерфейса. Возьмите два конкретных класса, которые реализуют интерфейс CRUD: Employee и Building.

Теперь представьте, как ваш код будет выглядеть на основе параметров:

Employee employeeObj = new Employee();
Building buildingObj = new Building();

string firstName = "Bob";
employeeObj.Create(firstName);

А как насчет здания?

BuildingTypes buildingType = BuildingTypes.One;
building.Create(buildingType);

Woops ... как вы предполагаете реализовать интерфейс CRUD с другими параметрами? Создавать перегрузки? Больше интерфейсов? Как насчет двух параметров (имя, фамилия)?

Это будет так уродливо и быстро .... потому что, как только вы используете параметры с интерфейсом CRUD, у вас появляется более чем одна причина для изменения, что снижает согласованность проекта.

Давайте попробуем использовать наши параметры на основе объектов / экземпляров ...

Employee empObj = new Employee();
empObj.FirstName = "Bob";

empObj.Create();

Building buildingObj = new Building();
buildingObj.BuildingType = BuildingTypes.One;

buildingObj.Create();

С простым CRUD и без параметров можно даже посыпать полиморфизмом:

someObj.Create();

Это также приводит к инкапсуляции композиции, развязке, SRP и т. Д. *

...