php mvc 业务逻辑 - 需要建议

标签 php mysql model-view-controller business-logic

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




9年前关闭。




我真的迷失在这个案子上。我正在尝试将自定义 MVC 框架应用于我的 Web 应用程序。困惑源于组织 SQL 查询。好的,情况是这样的:
UserRepository , ThreadRepositoryPostRepository都是保存与它们相关的 SQL 查询的存储库。例如,在 ThreadRepository我有 getThread通过 ID 从数据库中检索线程的函数,在 UserRepository 中我有 getUser功能等等...

但是,假设我在必须检索帖子、帖子和提交者的页面中。当我应用上述逻辑时,我必须调用 getUser , getThreadgetPost明确地。如果我没有使用 MVC,那么我可能会创建一个这样的 SQL 查询:

SELECT * FROM user
LEFT JOIN thread on userid = tuserid /* Thread user id = user id */
LEFT JOIN post on pthreadid = threadid /* Post thread id = thread id */

瞧,我会在一个查询中检索所有必需的东西。但是在这种情况下,即使我写了这样一个SQL,我应该将它放在哪个存储库中?我的意思是,看到如下代码很尴尬:
$pr = new PostRepository();
$user = $pr->getPostAlongItsThreadAndItsSubmitter($postid); 

来看看这个,首先代码不清楚。您必须查看 PostRepository 以发现正在从那里检索用户,这实际上不太可能是您作为第三人看到的第一个地方。其次,它不可扩展。将来,随着应用程序的增长,我将不得不应用相同的逻辑,例如,在检索用户统计信息、用户 friend 或用户消息时。那么一切都会变得复杂。

另一方面,如果我调用上面提到的函数(例如 getUser )来分别检索一个帖子、它的线程和提交者,那么这意味着我将不得不牺牲很多性能,因为我正在制作(在至少)三个不同的 mysql 查询来检索一些可以通过简单连接成功管理的基本内容。 (这里我假设 3 个查询比一个简单的连接慢,这就是我在搜索时读到的)

所以最后,我在这里真正要问的是如何组织业务逻辑,以便我可以轻松检索帖子,它所属的线程及其提交者(实际上,这可能很难满足以下选项)而过程是:
  • Crystal Clear 适用于第三方人员(例如将被招募到团队中的其他开发人员)
  • 性能方面
  • 可扩展

  • 所有评论和意见都受到高度赞赏。

    P.S:我知道这不是一个什么是这个或为什么是这个问题,但是请,我真的需要这个案例的帮助,所以不要因为这不是一个可以用一句话回答的问题而点击关闭。如有必要,请让我改进问题。

    最佳答案

    首先这看起来你的数据库抽象没有抽象连接表:你在你的数据库抽象中缺少一个实现,它等同于示例 SQL SELECT ... JOIN。询问。

    因此,我将其定位为您的基本问题。

    当您使用数据库抽象时,您可以提示每个抽象层都有一个价格(三个数据库查询而不是一个),或者在这里学习一个教训:每个抽象都有一个价格。

    不:设计中没有 Elixir 。

    因此,如果您可以通过教育新开发人员来解决您的问题(例如,您实际上对您编写的软件有规范,对吗?)这有什么不好呢?这将完成这项工作。

    最后,您将在某处拥有一个正在执行您的 JOIN SQL 查询的函数。但是,您将其命名。该函数将返回从您的数据存储中查询的三个对象。然而你转动它。

    抽象的好处是,在您的业务逻辑中您不需要处理数据存储,但您只需使用您的(也许您会为它找到更好的名称)函数:

    $pr = new PostRepository();
    $user = $pr->getPostAlongItsThreadAndItsSubmitter($postid);
    

    但我想知道你为什么使用 PostRepository返回 $user ,也许这只是因为你无法真正下定决心。

    无论如何,您的数据存储抽象似乎非常多余,因为所有类的名称都相似,只是它们的类型不同。也许你只有一个 DataRepository可能是 DataQuery object 哪些方法可以返回单个对象( Recordset like Pattern )或这些对象的列表。

    关于php mvc 业务逻辑 - 需要建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019042/

    相关文章:

    php - 如何从 MD5 恢复密码?

    java - JDBC Mysql 错误?

    php - 在 codeigniter 中插入批处理选项

    javascript - 在模式中从 SQL 数据库加载数据

    design-patterns - 在 MV* 模式中,模型到底是什么?

    c# - 为 api 资源管理器文档动态忽略 Controller 上的 WebAPI 方法

    javascript - 如何在 php 循环中为网格中的每个帖子运行 jquery (wordpress)

    php - 由于 htaccess 文件而禁止传递变量

    php - 如何使用来自 PHP 的 jQuery/AJAX 调用遍历 JSON 数组?

    ruby-on-rails - 适用于小型开发人员和设计人员团队的 Git 工作流程