软件设计:模型应该属于的模型方法

时间:2015-03-06 01:42:57

标签: design-patterns

我很确定这已被多次询问,但我想不出一个好的搜索词来获得一些有用的结果,所以我会再问:

假设我有3个模型域(app),如果用django框架表示:

class User(Model):
    pass

class Content(Model):
    pass

class Comment(Model):
    created_by = ForeignKey(User)
    content = ForeignKey(Content)

如果我想添加一个方法来创建一个注释对象,我应该在哪个模型中实现该方法?我处于内容和用户之间的两难境地。

如果它以用户为中心:

Class User(Model):
    def add_comment(content, message):
        ....

如果它以内容为中心:

Class Comment(Model):
    def add_comment(user, message):
        ....

有一条黄金法则可以决定吗?或者重要吗?

1 个答案:

答案 0 :(得分:0)

我认为你应该关注Separation of Concerns。评论由评论模型处理。它们与用户分开。因此,您应该从Comments模型创建注释。

另外,通过将有关一个模型的信息传递给另一个模型,使用Law of Demeter。不要传递整个对象。仅限执行请求所必需的字段。在您的情况下,user_id足以创建注释。无需传递用户模型。

如果你现在重新发明你自己的ORM,最好实现一些链接相关模型的方法;)