为我的 MVC 应用程序创建服务层?

2023-12-28

据我了解,MVC 通过控制器这一“粘合剂”将类定义(模型)与表示(视图)分开。控制器应该有单一的职责,因此是可测试的。 ViewModel 用于将来自多个实体的数据汇集在一起​​,并“按摩”来自视图控制器的数据。

似乎业务逻辑并没有真正占有一席之地......所以我认为另一层服务将是合适的。我只是不确定将该层放在哪里,或者如何构建服务 - 它应该是一个包含一堆函数的名为“服务”的类吗?我对 MVC 有点陌生,所以任何阅读材料、示例或一般新手技巧都会很棒。


我在开发 ASP.NET MVC 应用程序时通常使用服务层。它类似于服务层模式 http://martinfowler.com/eaaCatalog/serviceLayer.html马丁·福勒 (Martin Fowler) 在企业应用架构模式。它封装了您的业务逻辑并使控制器变得非常薄。基本上,控制器使用服务层来获取域模型,然后将其转换为视图模型。我也用工作单元设计模式 http://msdn.microsoft.com/en-us/magazine/dd882510.aspx处理交易和存储库设计模式 http://msdn.microsoft.com/en-us/library/ff649690.aspx封装数据访问层,以便更轻松地进行单元测试并能够轻松替换 ORM。该图显示了我在 MVC 应用程序中使用的典型层。

在此图中,服务层被标记为“应用程序或域层”,因为我发现当您使用术语“服务层”时,人们会感到困惑。他们倾向于认为这是一项网络服务。它实际上是一个程序集,可供您最喜欢的 Web 服务技术(例如 ASP.NET Web API 或 WCF)以及控制器使用。

至于命名约定,我通常使用描述域的名称,后跟服务。例如,如果我有一个处理用户成员资格的服务层,那么我将有一个名为 MembershipService 的类,该类具有控制器和 Web 服务查询和操作成员资格域所需的所有方法。请注意,同一应用程序中可能有多个域,因此您可以拥有多个服务层。我的观点是,您不必拥有一个负责整个应用程序的单一服务。

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

为我的 MVC 应用程序创建服务层? 的相关文章

随机推荐

  • 2022年如何应对后台地理围栏?

    情况如下 当用户创建地理围栏时 我将其保存到后端并向操作系统注册地理围栏 但是每当我的应用程序重新启动时 我都会从后端获取地理围栏并再次在操作系统中重新注册它们 因为它们不断消失 我有两节课MainActivity and FormActi
  • 当 EB 环境为 python 3.6 时,使用 python 2.7 安装需求时出现 AWS 错误

    如何让 AWS EB 实例使用实例上已安装的 python 3 版本 我无法获得运行 Python 3 6 并运行 Django 2 1 的新环境 本地 不在虚拟环境中 which python gt usr local bin pytho
  • cucumber-testng 4.0 并行执行默认为 10 始终

    这是我的酷跑者 我试图通过重写 dataprovider 方法来使用 cucumber jvm 4 0 0 中内置的并行性 我看到我的场景是并行调用的 但线程数始终默认为 10 我尝试使用 threads 选项作为状态执行GitHub ht
  • 如何通过 SSH 连接到 Mac 容器中的 Docker [重复]

    这个问题在这里已经有答案了 我正在运行 Mac 版 Docker 版本 1 12 0 rc2 beta16 内部版本 9493 我已从本地存储库中提取了一个映像 并使用 docker run d 创建了一个容器 使用 docker ps 我
  • OllyDbg 中的左下窗格显示什么?

    我使用 NASM 组装了以下代码 global start section data var1 DD 0xA1A2A3A4 4 bytes var2 DD 0xB1B2B3B4 4 bytes section bss var3 RESD 1
  • 使用Officer 除了Word docx 之外还创建pdf

    我在循环中使用官员 过去使用记者 来创建 150 个独特的文档 然而 我需要将这些文档从 R 导出为 word docx 和 pdf 有没有办法将用officer创建的文档导出为pdf 这是可能的 但我的解决方案取决于 libreoffic
  • 使用 Alamofire/Codable 解析 JSON 行

    是否可以使用 Alamofire 和 codable 解析 JSON 行 这是我现在的代码 Alamofire request url method get parameters parameters encoding URLEncodin
  • 无法将属性“溢出”设置为 null

    webView getSettings setJavaScriptEnabled true webView加载这个html代码
  • 自动向下滚动聊天div

    我有这个代码 用于加载聊天 function getMessages letter var div messages get msg show php function data div html data setInterval getM
  • C++ 跨平台高分辨率定时器

    我正在寻找用 C 实现一个简单的计时器机制 该代码应该可以在 Windows 和 Linux 中运行 分辨率应尽可能精确 至少毫秒精度 这将用于简单地跟踪时间的流逝 而不是实现任何类型的事件驱动设计 实现这一目标的最佳工具是什么 更新了一个
  • 一个简单的java多线程

    嗯 我遇到了一个奇怪的问题 public class Test private boolean state new boolean false false public void createThread Thread th1 new Th
  • ng build -prod 与 ng build --prod --build-optimizer=true

    我的 Angular 项目是 Angular4 3 3 ng 构建产品 构建需要 77 秒 ng build prod build optimizer true 构建需要 190 秒 没有供应商块 大小更小 但大小差异不大 Chunk di
  • Angular2 - ContentChild 查询找不到嵌套组件

    我正在尝试设置一个 Angular2 组件 该组件自动聚焦通过内容投影插入的输入元素 我使用的解决方案基于这个答案 https stackoverflow com a 34503163 1592971 我还有一个额外要求 即输入元素可以嵌套
  • 如何检查服务器是否发送垃圾邮件?

    我今天检查了我的 IP 地址 因为我收到了退回的电子邮件 并且我发现它已被列入一些列表的黑名单 我只使用我的网站发送客户电子邮件 不发送时事通讯电子邮件 所以我不会发送很多电子邮件 我不知道为什么我的专用IP地址会被列入黑名单 有没有办法检
  • 如何检查是否安装了 .net for excel 互操作性

    我在代码中使用 net Primary Interoperability Assembly for Excel 但是 该应用程序可以在未安装 net PIA for Excel 的计算机上运行 我想如果没有安装就给出错误信息 即使我正在检查
  • FAILED_NOT_VISIBLE 负载平衡中 Google 管理的 SSL 证书

    我正在与负载平衡合作 将 https 连接到我的静态网站 并且我在 GoDaddy 中拥有我的域名 在初始阶段 我只有 Http 所以我用指向 c storage googleapis com 的 cname 绘制了我的域名 并用域名进行存
  • Google 地图 API 函数 map.getCenter()

    当用户调整地图时 我将 Google Map API 设置的缩放和位置保存在 cookie 中 当他们回来时 地图位于同一个地方 该函数大部分时间都有效 var h JSON stringify map getCenter null 2 j
  • 无法将 FFmpeg C 库移植到 android 中

    我到底想要做什么 访问ffmpeg c文件来修改int main int argc char argv 功能为JNI并将 ffmpeg 命令作为字符串传递 我尝试将 ffmpeg C 库移植到 android ARM 处理器 我遵循了不同的
  • 新部署上的 System.Web.AspNetHostingPermission 异常

    我有一个朋友正在将 Web 应用程序从一台服务器转移到另一台服务器 新服务器的设置与第一台服务器相同 但是 他遇到了安全问题 这是错误详细信息 请求 System Web AspNetHostingPermission System Ver
  • 为我的 MVC 应用程序创建服务层?

    据我了解 MVC 通过控制器这一 粘合剂 将类定义 模型 与表示 视图 分开 控制器应该有单一的职责 因此是可测试的 ViewModel 用于将来自多个实体的数据汇集在一起 并 按摩 来自视图控制器的数据 似乎业务逻辑并没有真正占有一席之地