1

我刚开始阅读 Applying UML and Patterns (2nd edition) 这本书。信息专家的 GRASP 模式之一是否等同于 Modell 形式的 MVC?

他们是否有相同的职责(存储和检索信息)?

4

1 回答 1

5

GRASP 的 Information Expert 和 MVC 的 Modell 是一样的吗?

是和否。

他们是否有相同的职责(存储和检索信息)?

不可以。信息专家的资格不限于存储和检索信息。它更常见的是由我们可以称为“纯制造”的持久层来完成。

GRASP 模式(我更喜欢它们作为原则)用于确定哪个职责属于哪个类,或者该职责是否需要一个新类。它帮助我们在课堂上保持我们的设计整洁。另一方面,MVC 是关于整个系统的设计——你如何划分它。MVC 的 3 个部分中的每一个通常都包含多个类。

首先决定架构模式和/或设计模式。然后,我们将 GRASP 原则应用于系统必须执行的每项职责。

假设我们有一个应用程序,但客户希望它具有不同的风格或 UI。数据和业务逻辑是一样的。因此,MVC 是保持模型分离并为所有客户端重用它的好选择。

现在在我们的模型中,我们有一个 Customer 类。系统的一项职责是向客户发送电子邮件。Customer类存储有关客户的信息,因此它是信息专家。我们在类中存储电子邮件地址Customer并添加一个方法getEmailAddress()。如果我们将“发送电子邮件”的职责添加到Customer类中,则违反了“高凝聚力”。因此我们可以应用“纯虚构”并添加一个新类EmailSender,该类接受电子邮件地址、主题和电子邮件正文。这个例子可能听起来很傻,但这是我能想到的最好的例子。

(在 MVC 架构中,模型拥有控制器和视图所需的所有数据。我猜,从这个角度来看,OP 认为模型是信息专家。)

于 2014-03-31T04:09:06.383 回答