我是一位长期的开发人员(我49岁),但是是面向对象开发的新手。自从Bertrand Meyer的Eiffel以来,我一直在阅读有关OO的文章,但是几乎没有做过OO编程。
关键是每本有关OO设计的书都以船,汽车或我们经常使用的任何常见对象为例开始,并且它们开始添加属性和方法,并说明如何建模对象状态以及如何使用对象它。
因此,它们通常会采用“模型越好,模型在应用程序中代表对象的能力越强,结果就越好”的想法。
到目前为止,到目前为止还不错,但是,我发现有几位作者给出了一些食谱,例如“一个类应该放在一个页面上”(我会添加“显示器尺寸是多少?”,因为我们尝试不这样做)打印代码!)。
以一个PurchaseOrder
类为例,该类具有控制其行为的有限状态机和的集合PurchaseOrderItem
,此处工作的一个论据是,我们应该使用一个PurchaseOrder
简单的类,并带有一些方法(比数据类多一点),并且具有PurchaseOrderFSM
处理的有限状态机的“专家类” PurchaseOrder
。
我想说的是Jeff Atwood 在《编码恐怖》上的Code Smells帖子的“特征嫉妒”或“不适当的亲密关系”分类。我将其称为常识。如果我可以签发,核准或取消我的真正的采购订单,那么PurchaseOrder
类应该有issuePO
,approvePO
而且cancelPO
方法。
这不是我理解为面向对象的基础的“最大化内聚力”和“最小化耦合”的古老原则吗?
此外,这是否有助于提高类的可维护性?
PurchaseOrder
,你可能只是命名方法issue
,approve
和cancel
。该PO
后缀仅增加了负值。