2011-03-20 110 views
3

我认为服务/应用层与Larman描述的GRASP控制器是一样的,它是超越GUI层的第一个委托给域层的对象,应该可以从不同的层次重用GUI。服务层=应用层= GRASP控制层

服务(埃文斯)层是一样的应用程序(福勒)层,因为福勒本人是这么说的,他在“bliki”关于“贫血域模型”:http://martinfowler.com/bliki/AnemicDomainModel.html

报价: “应用层[他命名为服务层]:定义 软件应该做的工作并指导表现域对象 摸出问题的任务,这层负责的 业务意义的或必要与 应用层的交互。的其他系统,该层保持精简,它不包含业务规则或知识,但不包含 ,但仅协调任务 ,并将工作委托给下一个 下层的域对象的协作。它没有状态反映经营状况, 但它可以有反映任务为 用户或程序的进展状态。”

现在考虑上面的描述(也见捕鸟的PEAA书,关于从用例中识别服务层方法),并考虑福勒描述的服务层中的图片,该层描述服务层是在该URL的“用户界面”之后的第一层:http://martinfowler.com/eaaCatalog/serviceLayer.html

现在比较上述服务/应用层描述 与Larman关于GRASP控制器的一些词汇(第3版 版本的hi (“UML and patterns”),年龄 302-306): “...超出UI层的第一个对象,它接收和协调 (”控件“)系统操作...” “ ...表示系统事件 发生的用例场景...“ ”...通常,控制器应该将需要完成的工作 委托给其他对象;它协调或控制活动。它 并没有做太多的工作本身......”

我认为Larman与的把握控制层是一样的 埃文斯/福勒的应用/服务层。是否有其他人不同意? 然后请解释之间的差异显著这些概念,以及控制器类的一些例子,而不是服务/应用程序类。

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

回答

2

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

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

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

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

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

希望它有帮助!

+0

这些类是按照惯例来排列吗?我有点喜欢在他们的状态存储恕我直言,我觉得它更简单... – Haroon 2011-08-06 08:45:42

+0

@Wanderson桑托斯,伊莫,应该没有分离的控制器作为用户界面和域。在MVC中,没有这样的事情。控制器协调(业务)服务完成的逻辑(进而处理/变换/处理(域)模型)和视图。每个控制器(C)使用(商业)服务来获得模型(M)并提供该模型(M)的视图(V)。 M-V-C的分离允许您交换视图技术,而不是使用Facade模式。 – despot 2014-01-08 12:36:41

+0

当您注意到多个客户端(客户端是另一个服务或控制器 - 内部或客户端是外部系统)使用多个(组)服务时,应使用外观模式用于服务。 – despot 2014-01-08 12:37:31