在SRP中,"责任"通常被描述为"改变的理由",因此每个类(或对象?)应该只有一个人应该去那里并改变它的原因.
但是,如果你把它变成极端细粒度,你可以说一个对象将两个数字加在一起是一个责任,也是一个可能的改变原因.因此,对象不应包含其他逻辑,因为它会产生另一个改变的原因.
我很好奇是否有人有任何"范围"策略,单一责任原则稍微不那么客观?
Q1.在我的大学对面向对象建模和设计的研究中,他们建议考虑对象可以为其方法做什么,以及它对其属性的责任.所有澄清的尝试都导致了进一步的混乱.
这往往会生成一个类图,其中包含具有所有操作的actor,以及仅包含数据的内部类.
这似乎不正确.还有另一种思考如何建模对象的方法吗?
Q2.此外,该课程似乎强调在真实世界对应物之后对物体进行建模,但在域模型中并不一定有意义.IE浏览器.在医疗实践中,他们有,Patient: CreateAppointment(), CancelAppointment()
但不是如何实施(你会修改约会集合).还有另一种思考方式吗?
示例Q1
秘书:RecordAppointment(),RecordAppointmentCancellation()
预约:时间,日期,...(没有方法)
例Q2
医生:SeePatient()
虽然SeePatient
是一个用例,但它对实际类的方法没有意义.你觉得这个怎么样?
所以我有10个对象,每个对象有1-3个依赖项(我认为就松散耦合而言是可行的),还有一些可用于定义行为的设置(超时,窗口大小等).
在我开始使用Inversion of Control容器之前,我会创建一个工厂,甚至可能为每个需要多于1个设置的对象创建一个简单的ObjectSettings对象,以将构造函数的大小保持为建议的"小于4"参数尺寸.我现在正在使用控制容器的反转,我只是没有看到它的重点.当然,我可能会得到一个带有7个参数的构造函数,但是谁在乎呢?无论如何,这一切都被IoC填补了.
我在这里遗漏了什么或这基本上是正确的吗?