ZF + 原则 2:重型模型类还是轻量级模型 + 服务层?

2023-12-23

我正在整合Zend框架 and 学说2,我正在发现服务层.

现在我明白(我错了吗?)我有两种可能的架构:

  • A model,其中类包含域逻辑,即属性 + getter/setter + 复杂方法
  • A 轻量化模型,其中类包含属性 + getters/setters 和Service层,包含领域逻辑,并修改模型类

各自的优点/缺点是什么?

通过将域逻辑置于模型外部而失去 OOP 对我来说似乎很奇怪,所以我不明白为什么要使用服务层。


是什么让您认为您的服务层是external到你的模型?事实并非如此。事实上,它是模型的核心部分,还有实体、存储库等。

如果您使用 Doctine2,您将需要一个服务层。原因之一是您不希望您的实体了解 EntityManager(损害可测试性)。另一个原因是您也不希望控制器驱动 EM(控制器的工作不是了解持久性)。

我通常使用的架构中,服务层是控制器与模型的接口。服务层公开对实体进行操作的函数(将它们作为参数,或返回它们,或两者兼而有之)。实体的持久性被服务层隐藏。服务类要么驱动 EM 和存储库本身,要么将其委托给控制器永远不会知道存在的其他代码。

因此,服务层提供了控制器可以用来操作您的业务数据的 API。

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

ZF + 原则 2:重型模型类还是轻量级模型 + 服务层? 的相关文章

  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 如何从 URL 获取当前的 Web 目录?

    如果我有一个网址http www example com sites dir index html http www example com sites dir index html 我想提取 sites 这个词 我知道我必须使用正则表达式
  • 为什么 count 比 $count 差

    我只是在查看不同问题的答案以了解更多信息 我看到一个answer https stackoverflow com a 4891402 429850这表明在 php 中编写这样的做法是不好的做法 for i 0 i
  • PHP 7.2 计数错误

    警告 count 参数必须是数组或对象 实现 Countable in 我在以下行中收到上述错误 if 0 gt count this gt xprop 有人可以帮助我理解这一点吗 我对 PHP 还很陌生 问题显然是 this gt xpr
  • PHP7.1上读取会话数据失败

    分享一个我遇到的问题 现已解决 在我的开发机器上 我使用 PHP 运行 IIS 我升级到 PHP7 突然我的代码不再工作 返回此错误 session start 读取会话数据失败 用户 路径 C WINDOWS temp 看起来像是权限问题
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • 将 int 转换为 float/double [重复]

    这个问题在这里已经有答案了 当我想要转换时遇到了麻烦integer价值观float 带点的数字 a 7200 b a 3600 echo b 2 b floatval b echo b 2 但它应该回响2 0 or 2 00 我也尝试过se
  • WAMP PHP 启动错误:无法加载动态库

    我的 WAMP 服务器昨天工作得非常好 今天我不得不重新启动计算机 但有些事情搞砸了 服务器从未完全启动 任务栏图标保持橙色 我的项目将打开 但仅加载 HTML 而不加载 PHP 这是我的 PHP 错误日志 04 Oct 2014 01 3
  • PHP 可以解压缩使用 .NET GZipStream 类压缩的文件吗?

    我有一个 C 应用程序 它与基于 PHP 的 SOAP Web 服务进行通信以进行更新和许可 我现在正在开发一个反馈系统 供用户通过软件自动提交错误和跟踪日志 根据我之前发布的问题 我认为 Web 服务将是实现此目的的最佳方法 最有可能以最
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • 如何将值发布到输入框中?

    Intro I would like to get the current time after clicking at click and POST the value into input text box Note 假设包含引导样式表
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • 如何通过开始索引和结束索引提取子字符串?

    str HelloWorld sub substr str 3 5 echo sub prints loWor 我知道 substr 采用第一个参数 第二个参数是开始索引 而第三个参数是要提取的子字符串长度 我需要的是通过提取子字符串起始索
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 如何处理致命错误:cURL错误7:无法连接到xxxx端口443

    我有一个连接到第三方 API 的脚本 它是并且应该在 24 7 不间断循环上运行 我在重新启动循环之前在最后使用睡眠 问题是 有时第三方 API 会被拒绝 或者连接会因以下错误而中断 致命错误 未捕获的异常 GuzzleHttp Ring
  • Laravel 5 命名约定

    我对 Laravel 约定有点困惑 因为我是这个框架的新手 我正在关注 Jeffrey Way 他使用的 Laracasts 视频Plural对于控制器名称 E g 页面控制器 卡片控制器 帖子控制器 但如果我参考官方文档Laravel g
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • 通过 Facebook 图 api 点赞帖子

    你好 我对 facebook PHP SDK 没有什么问题 我想通过 facebook PHP SDK 点赞帖子或其他内容 我正在执行此代码 我认为它应该是正确的 但显然它不起作用 给定的错误代码是的 PHP SDK不知道这种POST请求

随机推荐

  • MATLAB在NumPy/Python中的平滑实现(n点移动平均)

    MATLAB的smooth默认情况下 函数使用 5 点移动平均值平滑数据 在 python 中执行相同操作的最佳方法是什么 例如 如果这是我的数据 0 0 823529411764706 0 852941176470588 0 705882
  • postgis-2.0.so:未定义符号:GETSTRUCT

    当我使用 pg upgrade 检查将 postgresql 9 0 beta2 升级到 postgresql 9 3 beta1 出现以下错误 uptest db 172 16 3 33 gt cat loadable libraries
  • jq json解析器哈希字段值

    我有一个 JSON 文件 如下所示 macAddress ac 5f 3e 87 d7 1a ip 1 2 3 4 macAddress ac 5f 3e 87 d7 2a ip 1 2 3 4 macAddress ac 5f 3e 87
  • Android webView保存状态

    我有一个带有 3 个选项卡的选项卡主机 在每个选项卡中都有一个网络视图 当我单击一个选项卡时 即使我以前去过那里 网络视图也需要 重新加载 但它尚未保存 有什么办法可以保存webview吗 这可以通过在 Activity 中覆盖 onSav
  • 如何将 Outlook-Mail 拖放到 richTextBox 中

    我的 WinForms 应用程序出现问题 我想将 Outlook 邮件拖放到 RichTextBox 中 我发现了很多关于拖放功能的文章 但它们都将邮件文本插入到 rTB 中 请参阅 Link https stackoverflow com
  • 在 Flutter 中只让一个 widget 浮动在键盘上方

    我想在键盘上方可见时显示 关闭键盘 按钮 我知道 resizeToAvoidBottomInset 会影响键盘与应用程序其余部分的交互方式 但它并不能完全满足我的要求 我有一个背景图像和其他小部件 在下面的示例中未显示 当显示键盘时 它们不
  • Chrome 开发者工具用户代理覆盖在模拟其他浏览器方面的效果如何?

    Chrome 开发人员工具具有将用户代理更改为欺骗服务器的功能 使开发人员能够测试其他设备和浏览器的应用程序 而无需在桌面终端上舒适地使用 Chrome 浏览器 我认为 Chrome 会模拟这些其他浏览器 而不是虚拟地模拟它们 Chrome
  • 如何重用 HierarchicalDataTemplate?

    我有两个相同的 HierarchicalDataTemplates 唯一的区别是模板的数据类型
  • 在delphi中更改字段值的DBGRID行颜色

    如何更改delphi中字段上具有相同值的dbgrid行的颜色 例如具有相同老师的所有行 注意 这些行被分组 并且在 dbgrid 中彼此相邻 提前致谢 您可以使用 DBGrids onDrawColumnCell 事件轻松实现此操作 pro
  • MSVC 是否有像 gcc 的 -M 那样的依赖生成标志

    MSVC 是否有像 gcc 那样的依赖生成标志 M flag 我用过的每个 C 编译器都有这种标志 如何创建依赖项 自动使用 MSVC cl 编译器 我只对最新的编译器版本感兴趣 即 MSVC9 或更高版本 但如果它与 MSVC8 一起工作
  • 在 HTML 页面中包含数据的最佳方式是什么?

    在 HTML 页面中包含数据的最佳方式是什么 该数据不是人类可读的 并且在页面加载后将由脚本处理 我能想到的选项是 在隐藏 空上使用类和标题属性 div or span 页面内的元素 JSON 中的 span div
  • std::regex -- 是否有一些需要链接的库?

    我收到以下代码的链接器错误 include
  • 如何在 Ruby 中输出尾随零? [复制]

    这个问题在这里已经有答案了 请考虑以下代码 class Book def initialize price price price end def book price puts Price price end end book1 Book
  • 点击隐藏选项卡时谷歌地图部分加载

    我使用 2 个选项卡 第一个用于显示列表 另一个用于显示地图 第一次加载页面时 默认显示 1 个选项卡 单击第二个选项卡时显示地图 但是当我单击列表选项卡并再次单击地图选项卡时 地图部分加载 这是我的 JAVASCRIPT 代码 docum
  • Visual Studio 参考和平台之间的冲突

    自从我将 C ASP Net 项目的目标框架升级到 4 6 1 后 我在构建过程中收到了很多冲突警告 50 多条消息 例如 考虑将程序集 System Runtime InteropServices RuntimeInformation C
  • 将 WHERE IN 子句添加到 JPA 规范

    我正在尝试实现受 IN 子句限制的搜索功能 我想实现具有过滤器限制的搜索实现 GetMapping find public Page
  • pandas dataframe滚动窗口与groupby

    我可以添加一个新列c这是最后两个值的总和b如下所示 df c df b rolling window 2 sum shift df a b c 0 1 3 NaN 1 1 0 NaN 2 0 6 3 0 3 1 0 6 0 4 0 0 6
  • 计算每个类别列的出现次数

    我正在尝试计算每个 SNP 名称的 iets 列中 Opp 的出现次数 最终我想将 Opp 的出现次数除以 df MM library data table df lt structure list SNP structure c 1L 1
  • 在 R markdown 中混合文本和引用

    是否可以在 R markdown 文档中混合常规文本和引用 使它们看起来如下 作者 2018 方法 目前 我已经尝试过 Author2018 Methods 这使 Author 2018 Methods 和 Author2018 Metho
  • ZF + 原则 2:重型模型类还是轻量级模型 + 服务层?

    我正在整合Zend框架 and 学说2 我正在发现服务层 现在我明白 我错了吗 我有两种可能的架构 A model 其中类包含域逻辑 即属性 getter setter 复杂方法 A 轻量化模型 其中类包含属性 getters setter