- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在寻求澄清是将代码放入 Controller 、实体还是提供服务。
我有“cardset”和“card”对象(其中许多后者嵌入前者 MongoDB 中),由普通的 PHP 类/对象表示。这些包含属性,例如'id', 'postal_address'.
我有一个生成卡片 PDF 的方法。目前我在“Card”对象中有它,所以我可以从 Controller 调用:
$card->makePDF()
这对我来说似乎很干净而且面向对象,但我怀疑我错了。
如果我将所有逻辑都放在 Controller 中,这会变得又长又笨重,而且我不确定 Controller 是否是作用于我的对象的方法所在的地方。这就是服务的目的吗?
尝试总结一下:一个对象是否应该知道它可以“对自己”做的所有常规事情并将它们作为成员函数包含在内部,或者是否应该将其他地方的方法传递给对象以进行操作。如果是这样,这些方法应该保存在哪里?
我很确定它不是“存储库”,因为它似乎只是帮助检索/存储实体。
谢谢!
最佳答案
PDF 生成应该是一种服务,而不是对象上的方法。
一般来说,尤其是在 Symfony2 中,模型应该只用于存储数据。 Controller 用于操纵模型之间的关系, View 用于以人类或计算机可读的形式表达数据。服务适用于实际上不属于上述任何内容的事物——与您的 Web 应用程序的状态无关的事物。
一个很好的例子是发送电子邮件。电子邮件包含数据(模型)。用户已发送电子邮件( Controller )。电子邮件看起来以某种方式(查看)。然而,实际发送电子邮件的行为独立于 Web 应用程序的状态(所有服务都知道它被要求将此电子邮件发送给这些人)。因此,有一个仅处理发送电子邮件的独立服务是有道理的。
同样,生成 PDF 文件的行为独立于 Web 应用程序的状态。 PDF 生成器不需要知道您的应用程序中发生了什么,它只知道它被要求制作 PDF。
关于php - Symfony2 MVC : where does my code belong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440519/
有一个网站曾经销售实体产品......现在他们想要销售一些完全不同的服务之王......比如信用套餐来向用户帐户收费(购买产品)或购买短信..诸如此类 所以数据库以前是这样的 order : user
所以,我一直在尝试用 SQL 编写查询,但遇到了问题。我正在尝试写一个“属于”的条件。我想要做的是,如果要获取的值属于另一个表中的列,则填充一件事,否则填充 null。 例如。 NAME table
如何为属于模型 B 或模型 C 但不属于两者的模型 A 编写关联? 假设我有一个员工模型、承包商模型和一个事件模型。关联如下: 员工有很多事件。 承包商有许多事件。 事件属于承包商或员工。 我是否创建
我想创建一个字符串,其中包含当前用户预期能够在键盘上输入的所有字符。对于英语文化中的用户,这将是 26 个大写字母和 26 个小写字母、10 个十进制数字和 30 多个符号。来自其他国家的用户会有一些
我不知道为什么我要为此苦苦挣扎,这似乎是一个非常简单的概念。所以我的挣扎让我觉得也许我的数据建模需要另一个组件...... 我正在使用 Laravel 5 并尝试定义一些模型关系。 BelongsTo
假设我有一个从给定软件工具调用的函数 foo(在 C/C++ 中)。 函数 foo 只允许写入由 foo 分配的内存或由 foo 调用的函数之一,但不允许写入写入由调用 foo 之前执行的函数分配的内
大家好,我目前在 FCC 上遇到这个算法挑战。这就是挑战的全部内容: 返回排序后应将值(第二个参数)插入数组(第一个参数)的最低索引。返回值应该是一个数字。 例如,getIndexToIns([1,2
edit - 根据下面的回复,我将重新审视我的设计。我认为我可以通过更加巧妙地设置我的业务目标和规则来避免这种困惑。感谢大家的帮助! -- 我有以下模型: S属于T T有很多S A,B,C,D,E (
我正在使用 https://github.com/go-pg/pg处理这些东西,在建立一个基本的属于关系方面有很大的问题。 所以基本上我有一个包含列 receipient_id 和 sender_id
我想定义non-line-termination-character = 在 lexer.mll .我试过let non_line_termination_character = [^('\x0D'
几周以来,我开始开发 CakePHP 项目。从一开始我就在为 Controller 内部的代码量而苦苦挣扎。在大多数情况下, Controller 的代码行数比模型多。通过了解“瘦 Controlle
因此,在我没有真正关注新发展的一段时间后,我再次研究了 MVVM,我注意到教程/指南等的数量已经大大增加。然而,MVVM 的大多数示例/示例实现都缺乏解释一些我不太清楚的东西。所有这些示例都非常简单,
Groovy版本2.4.8 Grails 2.5.1版 我试图使用like子句从Advisor表中提取行,并且如果该方法中传递了Firm名称,那么我只想从该Firm中提取Advisor。 我构造了两个
我是 DDD 概念的新手,我正在尝试设计一个严格遵循 DDD 和 Prism (WPF) 的解决方案结构。我正在堆放创建 DTO 项目(数据传输对象)的位置。据我所知,DDD 将有 4 个通用层: 演
假设我找到了一个元素: Element link = div.select("a:not([class])").first(); 我现在想知道这个特定 元素是否包含在 中-- 不一定是直系后代。 有
我正在创建一个非常简单的 Java Card Applet(版本 2.2.2),但我是 Java 卡的新手,我不知道如何将 .class 文件转换为 .cap 文件。我正在使用 converter.b
我正在寻求澄清是将代码放入 Controller 、实体还是提供服务。 我有“cardset”和“card”对象(其中许多后者嵌入前者 MongoDB 中),由普通的 PHP 类/对象表示。这些包含属
我是 ORM(和 GORM)的新手,如果这是一个明显的问题,我深表歉意,但它似乎没有被文档涵盖。 我将使用 examples from the documentation作为我的问题的基础 问题1:属
我想更好地理解类文件和内部/嵌套类,我想知道以下几点: 是InnerClasses属性用于引用“包含”类中的内部/嵌套类,还是在内部/嵌套类中用于引用“容器”类? 是InnerClasses类文件中的
我正在尝试使用 ibexpert gui 在 firebird 2.5 上创建我的第一个程序。 该过程将返回属于特定“PROCESS_ID”的“PROCESS_DATE”。我准备了以下代码: begi
我是一名优秀的程序员,十分优秀!