我认为服务/应用程序层与 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 层相同。其他人不同意吗?然后请解释这些概念之间的显着差异,以及控制器类而不是服务/应用程序类的一些示例。
我的问题诞生了,因为有人说模型域对象的创建是控制器的责任,而不是其他服务/应用程序层。但是你能给我一个服务层类和控制器类之间的区别的例子吗?