5

我认为服务/应用程序层与 Larman 描述为 GRASP 控制器的东西相同,它是 GUI 层之外的第一个对象,它委托给领域层,并且应该可以从不同的 GUI 重用。

服务(Evans)层与应用程序(Fowler)层相同,因为 Fowler 自己在他关于“贫血域模型”的“bliki”中这么说:http ://martinfowler.com/bliki/AnemicDomainModel.html

引用:“应用层[他的名字为服务层]:定义软件应该做的工作并指导表达域对象解决问题。该层负责的任务对业务有意义或与交互是必要的其他系统的应用层。这一层保持薄。它不包含业务规则或知识,而只是协调任务并将工作委托给下一层领域对象的协作。它没有反映业务情况的状态,但它可以具有反映用户或程序任务进度的状态。”

现在考虑上述描述(另请参阅 fowler 的 PEAA 书,关于从用例中识别服务层方法),并考虑 Fowler 对服务层的描述中的图片,该图片说明服务层是“用户界面”之后的第一层这个网址:http ://martinfowler.com/eaaCatalog/serviceLayer.html

现在将上面提到的服务/应用层描述与拉曼关于 GRASP 控制器的一些话(在他最畅销的 OOAD 书籍“应用 UML 和模式”的第 3 版,年龄 302-306)中进行比较:“......第一个对象除了接收和协调(“控制”)系统操作的 UI 层之外……” “……表示系统事件发生的用例场景……” “…… 通常,控制器应该委托给其他对象需要完成的工作;它协调或控制活动。它本身并没有做太多工作......”

我认为 Larman 的 GRASP Controller 层与 Evans/Fowler 的 Application/Service 层相同。其他人不同意吗?然后请解释这些概念之间的显着差异,以及控制器类而不是服务/应用程序类的一些示例。

我的问题诞生了,因为有人说模型域对象的创建是控制器的责任,而不是其他服务/应用程序层。但是你能给我一个服务层类和控制器类之间的区别的例子吗?

4

1 回答 1

3

实际上有 UI 控制器和域控制器作为最常用的模式。

UI 控制器以 MVC 模式协调对 View 的访问。

域控制器协调对域的访问,它被称为服务层(Fowler,我更喜欢)或应用层(Evans)。

两者都是间接层(Façade Pattern),用于解耦子系统/层之间的类。它带来了模块化和更好的可维护性(您可以将域交换为远程服务或将视图从 HTML 交换为 Flex,并且只需更改间接层)

GRASP Controller 似乎是两者的混合体。我建议您将此术语仅用于分析,而不是用于实施。

希望能帮助到你!

于 2011-03-24T19:35:14.360 回答