Если я разбиваю свои Объекты на «Отдельные Обязанности», возникает ли фундаментальная мысль, должны ли объекты жить вместе или по отдельности, например, если у меня
class Employee_DataProvider() : IEmployee_DataProvider { ... };
class Employee_Details() : IEmployee_Details { ... };
class Employee_Payroll() : IPayroll() { ... };
class Employee_LeaveProcessing() : ILeaveProcessing_Client { ... };
...
Это неприятный запах - иметь все эти живущие внутри, но слабо связанные через интерфейсы, класс Employee:
class Employee
{
IEmployee_DataProvider _dataProvider;
IEmployee_Details _details;
IPayroll _payroll;
ILeaveProcessing_Client _leaveProcessing;
//My functions call the interfaces above
}
или больше стоит задуматься о том, чтобы эти классы были полностью отделены (или, по крайней мере, настолько малы, насколько это возможно) в коде? Или оба эти метода являются допустимым использованием SRP?
РЕДАКТИРОВАТЬ: Я не хочу критиковать осуществимость объекта, приведенный в примере, я просто придумал, чтобы проиллюстрировать вопрос. Я согласен, что обработка данных, отпусков и начисления заработной платы не относится к классу сотрудников.
Похоже, однако, что SRP просит меня отойти от объекта как представления реального мира к объекту как свойствам и методам вокруг единой функциональной концепции