代码之家  ›  专栏  ›  技术社区  ›  Shiv

使用MVC方法对用户、组、投资组合和媒体进行建模

  •  0
  • Shiv  · 技术社区  · 17 年前

    我有一个名为Users的表,它存储了所有的用户详细信息,我有一个Groups表,它存储了所有的组详细信息,这两个模型之间的关系是has,属于许多,然后我有一个group\u portfolios表,它存储属于一个组的所有投资组合,还有一个user\u portfolio表,它存储与用户相关的所有投资组合信息。 一个用户可以有多个公文包 一个用户可以有许多媒体 一个组可以有许多媒体

    1) 在建模MVC应用程序方面,我的想法是否正确?
    2) 由于我将用户和组的功能分开,因此我最终会得到两个表,其中包含与用户和组相关的所有信息,例如媒体和投资组合。这是否会导致冗余和性能相关的问题,尤其是在搜索投资组合等时?

    4) 有没有更好的方法对系统进行建模?

    非常感谢。

    3 回复  |  直到 17 年前
        1
  •  1
  •   Sander Marechal    17 年前

    您可以使用单个媒体和单个公文包表。添加一个额外字段,告诉您它属于用户还是组。然后,不要将$belongsTo属性添加到模型中,而是使用bindModel方法动态附加正确的模型。

    组,使用相同的字段。这是因为当您使用UUID时,永远不会有与组具有相同ID的用户。例子:

    class Media {
        $belongsTo = array(
            'User' => array('foreignKey' => 'parent_id'),
            'Group' => array('foreignKey' => 'parent_id'),
        );
    }
    

    编辑:

    看见 this Wikipedia article

        2
  •  1
  •   dr Hannibal Lecter    17 年前

    在Sander Marechal对GUIDs说的话中,你可能想考虑一下 PolymorphicBehavior 适用于您的媒体模型。它将加速你的应用程序,你不必担心任何时候关系破裂。

    关于您的设计问题。我们并不了解您的应用程序,也无法提供任何详细的答案。不,这是个谎言:

    不过,我可以给你一些提示。:)你应该坐下来,画出你的模型关系,并思考它们在现实生活中如何使用。然后看看是否有什么遗漏,或者可能有太多的东西。优化并最小化从数据库返回的数据。这里的关键概念是 简单 这是错误的 .

    如果你走了一半,发现自己犯了一个设计错误- 承认你犯了一个设计错误并改正它

        3
  •  0
  •   Luke Schafer    17 年前

    我使用了RoR和Castle,而不是CakePHP,所以我将用一般术语进行讨论。

    您一直在做的和应该继续做的被称为“域建模”——MVC非常适合这样做,因为您的模型成为域模型中对象的表示

    2: 您可以将公文包和媒体模型更改为,而不是引用其父对象的id,您有一个“ObjectId”和“ObjectType”-ObjectId是父对象的id,ObjectType是类型。您将无法自动连接这些关系,但可以使用自定义代码进行连接,以便为用户获取所有媒体

    select * from Media where ObjectId = [userid] and ObjectType = 'User'
    

    select * from UserMedia where UserId = [userid]
    

    三: 是的,这是一个可扩展的设计。记住将尽可能多的特定于模型的工作推到模型本身(或存储库)中,以使其“正常工作”

    也许吧,但你永远不会得到一个“完美”的系统。MVC很棒,您的设计对于一个简单的社交网络来说似乎很可靠。毫无疑问,你会添加帖子/评论等内容。

    推荐文章