Php 模型、服务或其他位置中的方法?

Php 模型、服务或其他位置中的方法?,php,design-patterns,model-view-controller,Php,Design Patterns,Model View Controller,我有一个用户模型。可以对用户进行审查。因此,我还有一个表示对用户的审查的审查模型。通过查看,将保存用户的评级 假设我要创建一个方法,根据用户的所有评论获取用户的评分,例如getRating方法。我会在用户模型上创建此方法吗?或者您会创建一个review管理服务类,并在该类中包含该方法吗 将getRating方法添加到用户模型感觉像是一件合乎逻辑的事情,但另一方面,事情可能会在某一点上失控,给我留下一个巨大的用户模型类 这是一个简化的例子,实际上,审查可以来自多个来源 PS我读过一些关于这方面的帖

我有一个用户模型。可以对用户进行审查。因此,我还有一个表示对用户的审查的审查模型。通过查看,将保存用户的评级

假设我要创建一个方法,根据用户的所有评论获取用户的评分,例如getRating方法。我会在用户模型上创建此方法吗?或者您会创建一个review管理服务类,并在该类中包含该方法吗

将getRating方法添加到用户模型感觉像是一件合乎逻辑的事情,但另一方面,事情可能会在某一点上失控,给我留下一个巨大的用户模型类

这是一个简化的例子,实际上,审查可以来自多个来源

PS我读过一些关于这方面的帖子和文章,但我找不到一个满意的答案。

为什么不将getRating添加到评论模型中呢。该方法将根据方法中的逻辑接受用户对象或用户Id。 用户模型不需要了解评论。 但是我的想法是。

你不应该有一个用户模型和一个评论模型。MVC中的模型是您的整个核心应用程序,它包含所有数据结构、服务、数据库适配器和使您的应用程序工作的辅助工具。你应该拥有的是:

一个用户业务对象和一个审查业务对象,纯粹定义数据结构 UserRepository或UserDAO或UserORM或任何其他用于与数据库交互的范例,用于将数据库中的数据转换为用户对象或从用户对象转换为用户对象;同上,以供审查 一个UserService,用于处理与用户相关的任务,例如通过数据库接口存储和检索这些任务,同样用于查看,或者可能是一些名称不同的服务同时负责这两个任务 它不必全部映射为1:1;一个业务对象实例可以映射到多个数据库表,相应的*Repository/*DAO/任何东西都会处理这些表,其中的多个表可以组合到一个服务中,从而使有用的事情发生


检索某些特定数据的操作属于服务。

谢谢您的回复!这是因为我的例子被简化了。事实上,评审可以来自多个来源,因此不仅仅链接到评审模型/db记录。最好创建一个评审服务来处理复杂的逻辑。服务的方法可以接受处理逻辑所需的相关对象。尽管它唯一需要的对象每次都是用户模型。这就是为什么将这些方法从用户模型移动到服务类感觉如此奇怪的原因——它们只需要关于用户的信息,还不如将它们保留在用户模型中?我明白你的意思。保留在用户模型中更简单,但实际上,由于评论可能来自另一个模型/表或其他来源,因此我仍然坚持使用服务。如果该方法将来需要更多对象怎么办?这可能会搞砸。嗯,我也明白你的意思:。我认为,除非其他人提供另一种见解的答案,否则我现在只会坚持将方法保留在用户模型中,如果需要,我会将它们转移到服务中。我对一个好的解释和简洁的答案表示感谢,这有助于用户正确地理解模型层。同意,但是我发现很难去掉数据库作为模型的概念。这绝对是编程技巧的另一层。@TimMorton一旦你尝试了它,它实际上会让你的代码变得简单得多,因为如果做得好,每一部分都会变得简单,因为你不再把几个职责混在一个类中…@deceze,而不是滥发这些评论,我发布了一个问题,希望您感兴趣: