我很确定这已被多次询问,但我想不出一个好的搜索词来获得一些有用的结果,所以我会再问:
假设我有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):
....
有一条黄金法则可以决定吗?或者重要吗?
答案 0 :(得分:0)
我认为你应该关注Separation of Concerns。评论由评论模型处理。它们与用户分开。因此,您应该从Comments模型创建注释。
另外,通过将有关一个模型的信息传递给另一个模型,使用Law of Demeter。不要传递整个对象。仅限执行请求所必需的字段。在您的情况下,user_id足以创建注释。无需传递用户模型。
如果你现在重新发明你自己的ORM,最好实现一些链接相关模型的方法;)