服务层=应用层= GRASP控制器层

时间:2011-03-20 11:11:35

标签: design-patterns controller grasp

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

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

引用: “应用层[服务层的名称]:定义作业 软件应该做并指导表达域对象 解决问题。这一层负责的任务是 对业务有意义或与业务交互所必需的 其他系统的应用层。该层保持薄。确实如此 不包含业务规则或知识,但只包含协调任务 和代表在下一个工作中合作域对象的协作 层下来。它没有反映业务情况的国家, 但它可以有反映任务进度的状态 用户或程序。“

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

现在比较上面提到的服务/应用层描述 关于Larman关于GRASP控制器的一些话(第3节) 他最畅销的OOAD书“Aplying UML and patterns”,年龄 302-306): “...接收和协调UI层之外的第一个对象 (“控制”)系统操作......“ “...表示系统事件所在的用例场景 发生......” “......通常情况下,控制器应该将工作委托给其他对象 这需要做;它协调或控制活动。它 自己做的不多......“

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

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

1 个答案:

答案 0 :(得分:2)

实际上,UI控制器和域控制器是最常用的模式。

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

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

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

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

希望它有所帮助!