gpt4 book ai didi

php - MVC 设计约定 : CRUDing inherited models

转载 作者:行者123 更新时间:2023-12-04 05:30:49 27 4
gpt4 key购买 nike

这个问题不太可能帮助任何 future 的访客;它只与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the help center .




9年前关闭。




这是我的数据库结构:

database schema

在我的应用程序中,我对客户、员工和分支机构进行了公司管理。

客户和员工与一个人、一个个人和一个用户相关联。
分支机构与一个人和一个公司相关联。

因此,要插入新客户或员工,我必须先将其公共(public)数据插入 Person表,其人员数据为Person表,然后将其用户数据放入User表,最后在 Customer 中创建一条新记录或 Employee table 。

要插入一个新分支,我必须先将其公共(public)数据插入 Person表,然后将其公司数据放入Company表,最后在 Branch 中创建一条新记录 table 。

我是 MVC 概念的新手,我对如何设计我的模型类来对它们进行 CRUD 有点迷茫。我正在使用 CodeIgniter 框架,但我认为这无关紧要。我应该为每个数据库表创建一个单独的类模型吗?如果是这样,我应该如何编码? (仅理论)

例如,要插入一个新客户...

  • 开始新交易
  • 实例化一个新人
  • 填写个人资料
  • 救人
  • 实例化一个新的个人
  • 填写个人数据并与其人员有关
  • 保存个人
  • 实例化一个新用户
  • 填写用户数据并关联其人
  • 保存用户
  • 实例化一个新的客户
  • 填写客户的数据并与其人员有关
  • 节省客户
  • 结束交易

  • 那是对的吗?在客户的 Controller 中,这段代码应该在哪里?使用该数据库结构有什么更好的约定(我需要使用第三范式设计)?

    最佳答案

    TL;DR .不,您不应该为每个表创建单独的模型。

    首先,您的数据库图是错误的。 User 的碎片化, IndividualPerson .他们都有 1:1 的关系和 User表似乎非常多余。哦..表的单数命名约定是什么?!

    反正 ..

    实际上,您所说的“模型”实际上是domain objects .它们只是模型层的一部分。是的,MVC 中的模型是一层。不是类也不是对象。

    如果实现得当,您的域对象将与实现存储逻辑的类分开(通常:data mappers)。除了秉承SRP这样的实现还将授予您域对象独立于存储形式的能力。数据映射器可以将多个表映射到单个域对象,这与将逻辑与存储机制混为一谈的事件记录(反)模式不同。

    至于 Controller ......好吧。每个 View 都应该有一个 Controller 。 Controller 应该仅通过传递来自传入请求的数据来更改模型层和当前 View 的状态。

    您的问题似乎表明您的域业务逻辑从模型层泄漏到表示层。相反,您应该创建服务(您可以将它们视为“高阶域对象”),这有助于多个域对象与您选择的存储抽象(数据映射器、DAO、存储库、工作单元等)之间的交互。 Controller 应该只有用户管理服务:“这里是数据,给我创建一个新的用户帐户。”

    附言: 您可能会找到 this post相关的。

    关于php - MVC 设计约定 : CRUDing inherited models,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661637/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com