服务层=应用层=GRASP控制器层[关闭]

2024-02-05

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

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

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

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

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

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

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


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

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

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

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

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

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务层=应用层=GRASP控制器层[关闭] 的相关文章

  • 方法链接的优点和缺点以及用对象本身替换所有 void 返回参数的可能性

    我最感兴趣的是Java 但我认为这是一个普遍的问题 最近我一直在使用 Arquillian 框架 ShrinkWrap 使用了大量的方法链 方法链的其他示例是以下方法StringBuilder StringBuffer 使用这种方法有明显的
  • Cakephp:将 AppController 抽象到另一个层次,可能吗?

    我想知道是否可以在 AppController 和我的应用程序的其他控制器之间添加另一个抽象控制器 这样我的控制器 例如UsersController 扩展了 SecureController SecureController 扩展了 Ap
  • JavaFX 中 ImageView 的顺序转换

    我已经看过了如何在 javafx 2 1 中等待转换结束 https stackoverflow com questions 11188018 how to wait for a transition to end in javafx 2
  • PHP 设计模式

    好的 我想首先让您注意到我一直在寻找 php mvc 设计模式 所以我还没有真正找到我想要的东西 现在 在写我的问题时 我找不到我要问的任何相关且具体的问题 但我知道我可能是错的 无论如何考虑这个问题和一个可能有用的问题包 Question
  • SQL Server T-SQL 中的 REGEXP_LIKE 转换

    我在一份需要转换为 SQL Server 的旧报告中遇到了这一行 REGEXP LIKE examCodes learner code examCodes 是源 learner code 是模式 我知道 SQL Server 没有 REGE
  • 是否有用于序列化和反序列化各种格式的对象层次结构的模式?

    给定一个复杂的对象层次结构 幸运的是它不包含循环引用 如何实现支持各种格式的序列化 我不是来讨论实际实施的 相反 我正在寻找可能派上用场的设计模式的提示 更准确地说 我正在使用 Ruby 我想解析 XML 和 JSON 数据以构建复杂的对象
  • 用简单的英语来说,什么是单例?

    我已经在谷歌上搜索了大约一个小时 但我仍然不清楚什么是单例 谁能让我更清楚一点 也许可以发布一个代码示例 我所知道的是 一个给定类只能有一个实例 但是你不能为此使用静态类吗 提前致谢 The simple plain English1 ve
  • Javascript 沙箱模式示例实现

    在 Stoyan Stefanov 的伟大著作 JavaScript Patterns 的第 101 页中 他解释了沙箱模式 我非常喜欢他的书 但我真的错过了一些现实生活中的例子 然后更好地理解他所谈论的内容 我正在寻找一个现实生活中的工作
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • 您将如何整理这个控制器逻辑?

    我在控制器中有一些逻辑 如果满足某些条件 它会设置对象的状态 if params concept consulted legal 0 params concept consulted marketing 1 concept attribut
  • “TryParse / Parse like”模式:实现它的最佳方法是什么

    这个问题是来自的后续问题如何指示方法不成功 https stackoverflow com questions 161822 how to indicate that a method was unsuccessful xxx Tryxxx
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • 在 C++ 中创建观察者设计模式的好方法

    我正在尝试用 C 实现观察者设计模式 如下所示 include
  • AngularJS 服务并承诺最佳实践

    我有一个 AngularJS 应用程序services 调用 http资源并返回promise我在控制器中解决了这个问题 这是我正在做的事情的示例 app service Blog function http q var deferred
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • 工厂模式和策略模式

    我需要创建一个类来负责结果集处理 但可能会发生应该使用不同的算法来处理该结果集的情况 我知道以下选项 1 使用策略模式 伪代码如下 interface Strategy processResultSet ResultSet rs class
  • 工厂模式中创建者的角色

    我无法理解为工厂类定义抽象类 接口的作用 这是我在网络上的所有教程中总是看到的东西 有人可以阐明 CreatorInterface 的重要性吗 工厂模式参考UML图 https i stack imgur com 3VpUM png 为了以
  • 处理大数据二进制文件

    我正在处理包含原始数据的大型二进制文件 每个大约 2 GB 这些文件具有明确定义的结构 其中每个文件都是一个数组events 每个事件都是一个数组data banks Each event and data bank有一个结构 header
  • C# 扩展方法 - 设计模式

    我想知道 C 扩展方法是否基于任何现有的设计模式 设计模式只是一种众所周知的范例 即 当你想实现 X 时 就做 Y 面向对象语言 例如 C 中的一个众所周知的范例是 当您想要对对象的状态进行操作时 调用它的实例上的方法 但是 在创建扩展方法

随机推荐

  • BizTalk Server 有哪些可行的替代方案? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在评估不同的系统集成策略时 我听到了一些关于 BizTalk Server 的鼓励的话 但也听到了一些
  • 如何在不停止站点的情况下更新 ASP.Net 站点 dll

    是否可以在不停止 IIS 的情况下更新预编译站点的站点 dll 目前 如果我尝试复制新文件来覆盖当前文件 则所有用户在复制文件时都会收到运行时错误 有办法避免这种情况吗 即使您不停止 对 web config 文件 BIN 文件夹 App
  • 如何使用选择文件浏览器的意图来选择文件

    如何使用意图提示用户选择 完成操作 来选择应用程序来选择文件 假设设备中有几个应用程序来浏览文件 我想使用扩展名过滤文件 例如 sav props 先感谢您 你可以使用这样的东西 Intent intent new Intent Inten
  • Mongoid 查找器不工作?

    我已经设置了一个 Rails3 mongoid 应用程序 当我打开 Rails 控制台时 所有查找器似乎都不起作用 http d pr FNzC http d pr FNzC User all User find all condition
  • Channel ManagedChannelImpl 未正确关闭

    如果我运行这两个测试 我会收到错误 1st test Rule public GrpcCleanupRule grpcCleanup new GrpcCleanupRule Test public void findAll throws E
  • 没有名为“ASP.NET 4.6.81.0”的事件日志源。该模块需要.NET Framework 2.0

    我刚刚安装了 VS 2015 Community 并在尝试访问 IIS 中托管的 ASP NET 应用程序 使用 ASP NET v4 0 应用程序池 时 收到了该错误消息 我刚刚下载了 NET Framework 4 6 离线安装程序 它
  • 查找谁在调用该方法

    我想以某种方式找出哪个 CFC 正在调用我的方法 我有一个记录 CFC 它被许多不同的 CFC 调用 在此日志记录 CFC 上 需要存储哪个 CFC 调用日志 虽然我可以简单地将 CFC 名称作为参数传递给 log cfc 但我发现这是一项
  • 从 DataReader 访问 DateTime 字段时出现 MySqlConversionException

    我有一个基于 MySql 的 C 应用程序 使用MySQL 连接器 http www mysql com 我正在尝试做一个 DataReader 请求 查询执行正常 但是 当尝试访问 DateTime 字段时 我收到 MySqlConver
  • PHP Mail() 中的 Base 64 附件不起作用

    我有一个脚本 当函数运行时 它会发送一封自动电子邮件 我希望能够发送 HTML 电子邮件以及 PDF 附件 我知道我需要将文件编码为 Base64 但是我只是将 Base64 代码附加到我的电子邮件底部 我认为这与哑剧有关 有人看到这个问题
  • 如何在加载到数据表时取消合并并填充 Excel 文件中的单元格

    I have an excel file as show below 我使用以下代码将文件加载到数据表中 string sSheetName GetSheetName Get data sheet name string connStrin
  • TextInputLayout 提示颜色

    我正在使用新的 Google 设计库 com android support design 22 2 0 但遇到问题android support design widget TextInputLayout 如果我以编程方式设置其 Edit
  • 如何使用 JAXB 删除 XML 中的标签

    我正在使用 JAXB 将 java 对象转换为 xml 文件 在我的 XML 文件中 我需要删除标签不使用 XSLT 例如 删除标签订单
  • 如何在 Spring 中注入具有受保护方法的 JDK 代理类?

    我的情况相当奇怪 我使用 Spring 3 0 6 和一个实现和接口的 bean 到目前为止 都是很正常的事情 我的 bean 也有一些受保护的方法 我正在使用一些 AOP JDK 代理 一切正常 当我想将此 bean 注入另一个包类时 我
  • Angular 测试获取实际的 HTTP 响应

    我是角度单元测试的新手 我想要做的是从我的 API 获取实际结果 我检查了this https angular io guide http testing http requests文档 但据我了解 我应该创建模拟响应 这是我的代码 myS
  • Visual Studio Code 有“后退”按钮吗?

    When I Cmd click在函数的执行行 f 它带我到定义函数的地方 f 既然我已经看完了这个功能 如果有一个 后退 按钮可以回到之前的位置就太好了 有谁知道这样的功能或有帮助的功能 附 我在 Mac 上 在 Windows VS C
  • Java ME 日历不显示

    我一直在这里关注本教程 教程链接 http www developer nokia com Community Wiki Building a Java ME Canvas based calendar date picker 但我似乎无法
  • 如何使用 Sphinx 标记引用记录的 Python 函数参数?

    我想在 Python 文档字符串中的其他位置引用先前记录的函数参数 考虑以下 诚然完全是人为的 示例 def foo bar Perform foo action param bar The bar parameter def nested
  • RubyMine 2.0 作为 Rails IDE 能赚 99 美元吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近看到很多博客都在谈论 RubyMine 它是同类最佳的 Rails IDE 目前 我正在使用 NetBeans IDE 来处理 Ruby
  • 对包含数字的 JavaScript 字符串数组进行排序

    我有一个 JavaScript 数组 其中包含以下内容 值 1 值 5 值10 值11 我将如何对该数组进行排序 使其不会出现如下所示 值 1 值 10 值11 值5 But as 值 1 值 5 值10 值11 任何帮助都会很棒 您需要从
  • 服务层=应用层=GRASP控制器层[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我认为服务 应用程序层与 Larman 描述的 GRASP 控制器相同 是 GUI 层之外委托给域层的