【问题标题】:MVC - Is it okay for a Model to be composed of a few other models? [closed]MVC - 一个模型可以由几个其他模型组成吗? [关闭]
【发布时间】:2012-03-31 22:31:38
【问题描述】:

我有两个控制器:一个用于查看单个玩家,一个用于查看团队。我目前有它,团队由一堆玩家模型组成。

我是 MVC 的新手,在我读过的所有内容中,我没有看到太多关于模型由其他模型组成的内容。有没有其他方法可以解决这种情况,或者这看起来是一个非常标准的实现方式?

【问题讨论】:

  • 您需要对更具体的事情发表意见吗?
  • 模型是你的应用程序。它包含解决您构建它的问题的所有相关部分。 V 和 C 只是它的一个愚蠢的接口。

标签: php model-view-controller


【解决方案1】:

是的,一千次是的!这就是依赖注入框架(例如 Robotlegs 和 Swiz)的工作方式。他们有一个注入器,作为模型和工厂的组合,只提供视图或命令所需的位(在大多数情况下,他们也没有真正的大型单片控制器的想法)。

【讨论】:

  • 听起来像是一场调试噩梦
  • 许多小类(IMO 和许多高级开发人员的意见)比一些大类更容易调试。它们当然更容易进行单元测试。
  • 我在 PHP 中实现了各种 DCI。它们看起来仍然很像美化的静态注册表。
【解决方案2】:

模型不是“事物”或“类”。它是一个层。

模型层由多个元素组成。两种最重要的类型是域对象[1][2]数据访问对象(通常实现为 DataMappers[1][2] 模式)。第三种结构是服务,但我会尽量保持简单。

领域对象是业务逻辑与模型层结合的地方。不仅可以让域对象包含其他域对象,而且通常是最好的方法。这是一个小例子:

$group = $this->modelFactory->buildObject('group');
$mapper = $this->modelFactory->buildMapper('group');

$group->setName('wheel');
$mapper->fetch($group);

$user = $this->modelFactory->buildObject('user');
$user->setName('foobar');
$user->setHomeDir('/home/user');
$user->setShell('/bin/csh');

$group->addUser( $user );
$mapper->store($group);

阅读this topic,您也可能会受益。

【讨论】:

    【解决方案3】:

    当然!这就是面向对象的编程!

    【讨论】:

    • 我想的差不多了,谢谢。
    【解决方案4】:

    团队自然是包含一些额外数据(姓名、经理等)的玩家集合。我觉得应该没问题。

    【讨论】:

      【解决方案5】:

      鉴于您的问题,您将模型称为单个实体(例如用户模型)。如果您只使用模型而忘记了应用程序,那么模型实际上就是这个词所说的,一个概念模型。

      问题解决和软件工程中的领域模型可以是 被认为是感兴趣领域的概念模型(通常 称为问题域),它描述了各种实体, 他们的属性、角色和关系,加上约束 管理构成该问题的模型元素的完整性 域。

      http://en.wikipedia.org/wiki/Domain_model

      心智模型捕捉问题领域中的想法,而概念模型 模型表示“概念”(实体)和它们之间的关系。 计算机科学领域的概念模型也称为 领域模型。

      http://en.wikipedia.org/wiki/Conceptual_model_(computer_science)

      回答您的问题:您的域模型将由实体组成,它们之间存在关联,换句话说,一个实体可以具有包含其他实体(关联或聚合)集合的组合。

      领域模型创建了一个相互关联的对象网络,其中每个对象 对象代表一些有意义的个体,无论是大 公司或小到订单上的一行。

      http://martinfowler.com/eaaCatalog/domainModel.html

      为了让它变成一层别的东西,你需要从OOA(面向对象的分析)跳到OOD(面向对象的设计)。

      面向对象分析 (OOA) 将对象建模技术应用于 分析系统的功能需求。面向对象 设计(OOD)详细说明分析模型以产生实施 规格。 OOA 关注系统做什么,OOD 关注如何 系统做到了。

      http://en.wikipedia.org/wiki/Object-oriented_analysis_and_design

      因此,请记住“模型”关键字的两个含义。它可以是问题域的心智模型,也可以是描述心智模型如何在技术上实现的应用程序层。

      【讨论】:

        猜你喜欢
        • 2018-06-04
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多