SRP: Зачем использовать значения поля экземпляра вместо параметров?

StackOverflow https://stackoverflow.com/questions/4491338

Вопрос

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

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

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

Или предпочтение, например, поля по параметрам фактической техникой проектирования для поддержания высокой сплоченности?

Я как -то вышел из контекста?

Это было полезно?

Решение

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

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

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

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

А как насчет строительства?

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

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

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

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

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

empObj.Create();

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

buildingObj.Create();

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

someObj.Create();

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top