オブジェクトを「単一の責任」に分解する場合、同様のオブジェクトが一緒に存在するか、個別に存在するかについての基本的な考えはありますか?たとえば、私が持っている場合
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 は、現実世界の表現としてのオブジェクトから離れて、単一の機能概念に関するプロパティおよびメソッドとしてのオブジェクトに移動するように私に求めているようです。