我是编程新手,正在学习设计知识。
我被告知,SRP非常重要,因此每一堂课都应负一个责任。因此,我想继承其他班级的职责。但是后来,我意识到java不允许多重继承,而只允许接口。我认为实现多个接口的问题是,您必须在始终实现接口的一个类中编写方法。因此,您必须转到实现该接口的类以修复该方法。那不是认为它违反了SRP吗?
简而言之,我想要一个构造东西的A类(例如狗),并且需要关于A的方法B(树皮),C(吃)和D(睡眠)。如何在不违反SRP的情况下做到这一点?
答案 0 :(得分:0)
通常将SRP声明为“每个班级都应承担一项责任”,但这是不准确的。更好的说法是:“模块应该有一个并且只有一个改变的理由。”正如我在Single Responsibility Principle: Is It a Fundamental Mistake?中所描述的,我可以想到两个可能的变化轴:
将业务更改减少为“更改原因”意味着在业务中只有一个人要求您更改特定模块。例如,一些可能要求更改的人是产品负责人或设计负责人。因此,这意味着我们应该将事物的行为与事物的外观分开。
技术变革的一个例子是改变事物的存储方式。 “我们需要从SQL数据库更改为平面NoSQL存储。”
它的作用,外观,所依赖的基础架构–这些是应该分开的。不是你的狗。接口隔离原理导致接口的薄片化,例如“吠叫”和“饮食”。这样一来,呼叫者就可以依靠这些薄片,而不必依赖诸如Animal之类的庞大接口,而接口上有很多不需要的东西。
所以我会说
class Dog: Barking & Eating & Sleeping
不一定违反SRP,尤其是当每个接口都很薄时。
也就是说,我已经看到人们将不相关的界面拍打在一起以制造怪兽。这主要是由于懒惰地使用现有类作为垃圾场的结果。只要您不断问,“可以分开吗?”看看你是否可以承担责任,你比大多数人做得更好。