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

ech*_*s7r 5 design-patterns controller grasp

我认为服务/应用程序层与Larman所说的GRASP Controller相同,它是GUI层之外的第一个对象,它委派给领域层,并且应该可从其他GUI重用。

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

Quote:“应用层[服务层的名称]:定义软件应该执行的工作,并指导富有表现力的领域对象解决问题。该层负责的任务对企业来说是有意义的,或者是与之交互所必需的该层保持薄型结构,不包含业务规则或知识,而仅协调任务并将工作委托给下一层的域对象协作,它没有反映业务情况的状态,但它可以具有反映用户或程序的任务进度的状态。”

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

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

我认为Larman的GRASP Controller层与Evans / Fowler的Application / Service层相同。别人不同意吗?然后,请解释这些概念之间的显着差异,以及一些Controller类而不是Service / Application类的示例。

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

Wan*_*tos 3

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

希望能帮助到你!

\n