0

这是我第一次尝试使用Tornado框架构建 json 网络服务,我对模型设计有疑问。

目前我有一个模型文件(models.py),其中包含代表我的对象的所有模型(这是一个逻辑表示)

class person():
  name = StringField()
  age  = IntField()

class phone():
  number = IntField()
  person = ReferenceField(Person)

因为我有很多方法可以实现,例如 person.is_granted()、person.is_admin()( 例如) 我想知道在这些对象上声明方法的最佳方法是什么(在应用程序设计中),我应该扩展它们吗?或者在模型文件定义上声明方法是否干净?

谢谢您的回答。

4

1 回答 1

0

通常,您希望所有模型都有一个共同的祖先(就继承而言),您可以在其中为所有模型实现共同的方法。通常它会处理序列化/反序列化、数据库 API 抽象、搜索、访问控制等。ORM 几乎总是提供这样的祖先,但有​​时需要使用特定于应用程序的逻辑对其进行扩展。

将与模型相关的方法放入其对象中是一种很好的做法,特别是如果此逻辑应在不同的处理程序中使用(如密码检查、更改和生成用户模型 - 它们可以从一堆与身份验证相关的处理程序和模型中使用)是放置这个逻辑的好地方)。同时,像is_admin()这样检查其他属性(例如角色)是否包含特定值的东西可以包装在@property装饰器中,使它们看起来像普通的布尔属性。

使用这种方法,您可以在代码中将特定于数据的逻辑与特定于应用程序的逻辑分开,以便您可以明智地将其分布在这两个模块之间。随着项目的发展,您将希望从 handlers.py 和 models.py 演变为带有一堆子模块的处理程序和模型包,以分隔应用程序的不同部分并使代码更具可读性。

PS:顺便说一句,这实际上与 Tornado 甚至 ORM 无关,例如,我使用与纯数据库 API 类似的代码布局

于 2011-11-06T16:58:44.660 回答