我对责任驱动的设计理念很困惑。主要是因为根据源的不同,定义总是有微小的变化。
引用BlueJ (我正在学习的书,教Java):
责任驱动的设计表达了这样的想法,即每个类都应该负责处理自己的数据。通常,当我们需要向应用程序添加一些新功能时,我们需要问自己应该在哪个类中添加实现这个新函数的方法。哪个班应该负责这项任务?答案是,负责存储某些数据的类也应该负责对其进行操作。
稍后,在BlueJ书中的“概念框”中:
响应性驱动的设计是通过为每个类分配定义良好的责任来设计类的过程。此过程可用于确定应该实现应用程序函数的哪个部分的类。
第二个定义让我感到困惑,因为我看不出这与第一个“定义”有什么关系;“它表达了每个类都应该负责处理自己的数据的想法”。
有人能说明一下责任驱动设计的概念吗?
发布于 2020-01-05 11:00:42
类责任是指用它应该处理的事物来表达的类的目的。
这个术语的出现伴随着CRC卡 (类、责任、协作),这是1989年Beck & Cunningham在关于面向对象思维教学的论文 (全版)中首次提出的XP技术:
职责确定要解决的问题。这些解决方案将存在于许多版本和改进中。责任是讨论潜在解决方案的一个句柄。对象的责任用几个动词短语来表达,每个短语都包含一个主动动词。这些短语表达得越多,设计就越有力和简洁。同样,在设计过程中,寻找合适的单词是对时间的宝贵利用。 - Kent Beck & Ward Cunningham (OOPSALA,1989年)
它的目标是在协作中有明确的界限,关于什么类做什么。您的第二个定义正是关于这一点,以紧凑和优雅的方式表达。
你的第一个定义不是错误的,而是误导的。事实上,这不是一个定义,而是责任驱动设计的实际结果,结合了基本的OO实践:
警告:“责任”对不同的人意味着不同的事情。在OO文献中,您还可以找到“单一责任原则(SRP)”。请注意,这个原则的命名是令人困惑的,因为SRP中的责任与类的责任无关。只是处理类的责任。
https://softwareengineering.stackexchange.com/questions/403326
复制相似问题