Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 单一责任原则的实施_Oop_Solid Principles_Single Responsibility Principle - Fatal编程技术网

Oop 单一责任原则的实施

Oop 单一责任原则的实施,oop,solid-principles,single-responsibility-principle,Oop,Solid Principles,Single Responsibility Principle,如果我将我的对象分解为“单一责任”,是否有一个基本的想法,类似的对象应该一起生活还是分开生活,例如,如果我有 class Employee_DataProvider() : IEmployee_DataProvider { ... }; class Employee_Details() : IEmployee_Details { ... }; class Employee_Payroll() : IPayroll() { ... }; class Employee_LeaveProcessing

如果我将我的对象分解为“单一责任”,是否有一个基本的想法,类似的对象应该一起生活还是分开生活,例如,如果我有

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要求我将对象从现实世界中的表示形式转变为围绕单个功能概念的属性和方法,回到OOP基础:Employee对象应该有反映其功能的方法,虽然还没有人回答我关于原则本身的实际问题,而不是我给出的有点糟糕的例子,对于那些显然对这个问题感兴趣的人来说,员工对象对影响它的过程知道得太多(有两个“最喜欢的”星)虽然我希望能有更多的讨论,但我已经做了一些更深入的阅读

我认为目前的两个答案试图说明的是,分开的责任应该能够独立,而我的例子是一个完美的例子,说明了什么是不应该做的。我非常乐意接受这一点

(Bob叔叔的站点)中有一个段落,其中有一个示例,将连接和DataReader对象(两个对象以前生活在一个调制解调器类中,然后分开)组合到一个ModemImplementation中,但是

但是,请注意,我已重新补偿 这两项责任合为一项 模式实现类。这不是 这是可取的,但可能是必要的。 原因很多,不得不这样做 硬件或软件的详细信息 哦,这迫使我们把事情结合起来 我们不想结婚。然而, 通过分离它们的接口,我们可以 尽可能地将概念解耦 应用程序的其余部分与此有关

我们可以查看模式的实现 阶级是一个烂摊子,或者说是一个疣子;然而, 请注意,所有依赖项都会消失 从它。没有人需要相信这一点 班级。除了梅因,没人需要 知道它的存在。因此,我们将 篱笆后面那个丑陋的家伙。它是 丑陋不必泄漏和污染 应用程序的其余部分


我认为“请注意,所有的依赖关系都会从中消失”这句话在这里很重要

+1:所有这些额外的东西都不是员工的一部分。这是一些涉及员工的应用程序的一部分。“不想对示例中给出的对象的可行性进行批评”是否意味着什么?