Django的.一个应用程序有很多模型与许多应用程序与单一模型

Nem*_*den 39 django django-models

我正在开发自己的博客Django.但是我已经开始坚持了.所以,这是我的树层次结构:

/pyroot/nemoden/
|~blog/
| |-__init__.py
| |-admin.py
| |-models.py
| |-tests.py
| `-views.py
|+css/
|+images/
|+js/
|~templates/
| |-index.html
| `-postslist.html
|-__init__.py
|-manage.py
|-settings.py
`-urls.py
Run Code Online (Sandbox Code Playgroud)

我所做的是:创建一个名为blog的新应用程序并描述我在博客中所需的所有模型blog/models.py(用户,帖子,评论等),但后来我观看Jeff Hui's 视频并意识到这可能是一个坏主意并且在Django-world人们中做那个......我们做什么... PHP-world用我们的PHP Frameworks.我想最好为标签,评论,用户等设置杰出的Django应用程序......

所以,我要问的是:

每个Django-app有一个模型更好吗?如果是这样,当我不应该为模型创建新的Django-app时会有一些例外吗?

我想跟:

/pyroot/nemoden/
|~blog/ # this is actual application (not a django-application). It uses all the models in views.py, so django-apps becomes just models
| |-__init__.py
| |-tests.py
| `-views.py # all the views (controllers in other frameworks) used by our (well,... my) weblog
|+css/
|+images/
|+js/
|~templates/
| |-index.html
| `-postslist.html
|-__init__.py
|~post/
| |-__init__.py
| |-tests.py
| |-admin.py
| |-models.py # only Post model goes here
| `-views.py
|~tag/
| |-__init__.py
| |-tests.py
| |-admin.py
| |-tag.py # only Tag model goes here
| `-views.py # <---- I don't know why we still need it here!
|-manage.py
|-settings.py
`-urls.py
Run Code Online (Sandbox Code Playgroud)

正如你看到的我拼切出models.py,并admin.pyblog应用程序,所以现在blog应用更喜欢the app或者main app如果你希望它使用所有型号(Django的应用程序),主要包括views.py.而且我认为现在我们根本不需要所有views.py这些django-apps(这个问题在一个大问题之下 - 它只是在理论上).

我的方法有什么好处,或者我现在会遇到隐形的问题,也许吧?

如果我的问题不够明确,我很抱歉,如果是,请在下面发表评论,我会对其进行编辑以使其更加清晰.

有最佳做法吗?

谢谢.

ari*_*rie 36

每个Django-app有一个模型更好吗?

可重用应用程序的一个关键思想是:做一件事,做得好

如果一个应用程序需要几个模型(PostEntry,PostAuthor,如果是博客应用程序),这绝不是坏事.然而,标签,类别,评论代表了不同的功能,理想情况下可以在另一个上下文中重复使用,因此应该作为独立的应用程序进行分发.

有最佳做法吗?

为了感受一个好的应用程序组织,我首先要看看Django可重用应用程序约定.

然后你准备好了James Bennett关于DjangoCon 2008(Slides)的Resuable Apps的讨论.另一个更近期对同一主题的看法是来自PyCon 2011的Pluggable Django Application Patterns

  • 我认为,如果您创建不必要的应用程序,那么在不提及您的迁移将成为PITA的情况下讨论此主题是不容错过的.添加更多应用需要付费; 例如,挤压迁移可能会成为一场噩梦.如果您没有计划提取应用程序的任何部分并在其他地方重用它们(即您的公司中只有一个应用程序),那么我认为您应该考虑使用单个应用程序,并在程序包中实现清洁模块化下面的水平. (6认同)
  • @arie 但是评论与帖子无关?那么,评论应用程序不依赖于博客应用程序吗? (2认同)

Chr*_*att 12

经验法则是"应用程序"应该是一个完整的功能.如果您的博客无法在没有标签的情况下运行(就像字面意思一样,不仅仅有一个带有标签的博客比没有标签更好)那么标签应该是博客应用程序的一部分.

但是,这里没有明确的答案.一些应用程序纯粹主义者完全专注于可重用性,并使每个应用程序成为一个独立的功能,几乎没有任何依赖性.有些人使用一个Django应用程序创建整个应用程序.您需要决定在特定情况下最有意义的内容.

一般来说,我会说组合功能不会被其他用,但是应用程序需要,所有这些都在同一个应用程序中.像标签或评论这样的东西可能是他们自己的应用程序的候选者,事实上,你可以找到许多这样的应用程序可以简单地插入你的应用程序来提供该功能.

在任何比简单的待办事项更复杂的应用程序中,你几乎不可避免地会以大量的交叉结束.没有一个正确的答案.只需使用常识并思考DRY(不要重复自己),你就可以了.


vla*_*ean 6

我在youtube上找到了这个人,他说他处理了这个确切的问题:他们都有一个巨大的应用程序和许多他认为不好的小人物.

http://youtu.be/URztqq1kiqI?t=22m39s

根据我自己的经验:你不需要一个大的应用程序,因为人们可以处理更好的文件夹树,但不是太多.拥有一个应用程序会更难掌握项目的组成部分(适用于新人)

另一方面,您拥有的应用程序越多(彼此依赖),您遇到循环导入问题的可能性就越大.所以你需要一个避免这些事情的策略.在这里,新成员也倾向于将项目推向问题.

总而言之,那些在更多项目上开发更长时间的人通常应该是做出架构决策的人.