Gáb*_*kós 1 oop model-view-controller ooad design-patterns grasp
我刚开始阅读应用 UML 和模式(第 2 版)这本书。GRASP 模式之一是信息专家,与 Modell 形式的 MVC 等效吗?
他们是否具有相同的职责(存储和检索信息)?
GRASP 的 Information Expert 和 MVC 的 Modell 是一样的吗?
是和否。
他们是否具有相同的职责(存储和检索信息)?
不可以。信息专家的资格不限于存储和检索信息。它更常见的是由我们称为“纯制造”的持久层完成。
GRASP 模式(我更喜欢它们作为原则)用于确定哪个责任属于哪个类,或者这个责任是否需要一个新类。它帮助我们在类级别保持我们的设计整洁。另一方面,MVC 是关于整个系统的设计——你如何划分它。MVC 的 3 个部分中的每一个通常都包含多个类。
首先确定架构模式和/或设计模式。然后,我们将 GRASP 原则应用于系统必须执行的每个职责。
假设我们有一个应用程序,但客户希望它具有不同的风格或 UI。数据和业务逻辑是一样的。所以 MVC 是一个很好的候选者,可以将模型分开并为所有客户端重用它。
现在在我们的模型中,我们有一个 Customer 类。系统的一项职责是向客户发送电子邮件。Customerclass 存储有关客户的信息,因此它是信息专家。我们在Customer类中存储电子邮件地址并添加一个方法getEmailAddress()。如果我们把“发邮件”的责任加到Customer课堂上,就违反了“高内聚”。因此,我们可以应用“纯制造”并添加一个新类EmailSender,该类采用电子邮件地址、主题和电子邮件正文。这个例子可能听起来很傻,但这是我能想到的最好的例子。
(在 MVC 架构中,模型拥有控制器和视图所需的所有数据。我想,从这个角度来看,OP 已经将模型视为信息专家。)