GRASP的信息专家和MVC的模型是一样的吗?

时间:2014-03-28 16:17:04

标签: oop design-patterns model-view-controller ooad grasp

我刚刚开始阅读“应用UML和模式(第2版)”一书。 GRASP模式之一是信息专家,与Modell形式MVC相当吗?

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

1 个答案:

答案 0 :(得分:4)

  

来自MVC的GRASP和Modell的信息专家是否相同?

是和否。

  

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

没有。信息专家的资格不仅限于存储和检索信息。更常见的是持久层,我们称之为“纯粹制造”。

GRASP模式(我更喜欢它们作为原则)用于确定哪个责任属于哪个类,或者此责任是否需要新类。它有助于我们将设计保持在类级别。另一方面,MVC是关于整个系统的设计 - 你如何划分它。 MVC的3个部分中的每一部分通常包含多个类。

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

假设我们有一个应用程序,但客户希望它有不同的风格或UI。数据和业务逻辑是相同的。所以MVC是一个很好的候选者,可以将模型分开并为所有客户重用它。

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

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