我注意到我的几个控制器位于顶部。他们往往看起来像这样:
def app_description(app):
""" Dictionary describing an app. """
return {'name': app.app,
'id': app.id,
'is_new': app.is_new(),
'created_on': app.created_on.strftime("%m/%d/%Y"),
'configured': app.configured }
我将在控制器中通过几个不同的操作来调用它,但通常不在控制器之外。它访问属性。它调用方法。它格式化不透明对象(如日期)。
我的问题是:这是控制器代码还是型号代码?
控制器的情况:
模型的案例:
.description()
的东西,子类只定义属性的黑/白名单,并覆盖方法本身来调用函数。我很确定代码行数会减少(因为它可以节省重复'name': app.name
之类的内容),这似乎是一件好事。答案 0 :(得分:0)
不确定您使用的是哪个框架,但我建议在自己的类中创建此帮助程序功能并将其放在lib /
之类的共享文件夹中或者,您可以拥有一个应用程序帮助程序模块,它只包含许多这些有用的应用程序范围的函数。
无论哪种方式,我都会远离模型和控制器。
答案 1 :(得分:0)
我最终决定的答案:
在短期内,控制器中使用这些方法很好。如果他们定义输出,那么,好吧,他们可以留在那里。它们仅用于模型中。
有几件值得注意的事情,这表明他们已经长大,需要去其他地方:
@ajaxify
装饰器,可以执行诸如设置Content-Type
标头,进行JSON编码等操作。在这种情况下,我将日期时间标准格式转移到那里 - 当JSON编码器到达日期时间时(以前不可序列化的,它总是对待它(自纪元以来的几秒钟,对我而言)。我怀疑还有更多,但基本上,我认为没有像我原先认为的那样相似。我现在很高兴将它们视为我们(小型,新型)代码库中简单对象的约定,并且理解经过几次迭代后,可能会出现更好的解决方案。与此同时,他们留在控制器中并定义我的AJAXy-JSON专用接口。