首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个具有多个型号的应用程序与具有单一型号的多个应用程序

一个具有多个型号的应用程序与具有单一型号的多个应用程序
EN

Stack Overflow用户
提问于 2011-05-24 00:20:16
回答 5查看 28K关注 0票数 46

我目前正在用Django开发我自己的博客。但我在一开始就已经做好了准备。所以,下面是我的树形层次结构:

代码语言:javascript
复制
/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

我所做的是:创建了一个名为blog的新应用程序,并描述了我在blog/models.py中创建博客所需的所有模型(用户、帖子、评论等),但后来我看了Jeff Hui's video,意识到这可能是一个坏主意,在Django-world中人们不会这样做……我们在做什么.使用我们的PHP FrameworksPHP-world。我想最好是为标签、评论、用户等提供与众不同的Django应用程序……

所以,我想问的是:

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

我想说:

代码语言:javascript
复制
/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

正如你所看到的,我从blog应用程序中去掉了models.pyadmin.py,所以现在的blog应用程序更像the appmain app,它使用了所有的模型(django-apps),主要由views.py组成。我认为现在我们不需要在所有的django-apps中都使用views.py (尽管这一点有一个很大的问号--它只是理论上的)。

我的方法有没有好处,或者我现在可能会遇到一些看不见的问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-24 02:28:39

是不是每个Django-app都有一个模型更好?

可重用应用程序的关键思想之一是:做一件事,并把它做好

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

有没有最佳实践?

为了对一个好的应用程序组织有一个感觉,我首先看一下Django Reusable App Conventions

然后您就准备好听James Bennett关于DjangoCon 2008 (Slides)中的Resuable Apps的演讲了。关于同一主题的另一个较新的观点是来自PyCon 2011的Pluggable Django Application Patterns

票数 45
EN

Stack Overflow用户

发布于 2011-05-24 00:30:52

经验法则是,一个“应用”应该是一个完整的功能。如果你的博客不能在没有标签的情况下运行(就像字面上说的那样,有标签的博客比没有标签的博客更好),那么标签应该是博客应用程序的一部分。

然而,这里没有明确的答案。一些应用程序纯化者完全专注于可重用性,并使每个应用程序成为独立的功能块,几乎不依赖于其他任何东西。有些人使用单个Django应用程序创建整个应用程序。在你的特定场景中,什么才是最有意义的,这真的由你自己决定。

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

在任何比简单的待办事项列表更复杂的应用程序中,你几乎不可避免地会以大量的交叉而告终。没有一个正确的答案。只要使用常识,干净利落地思考(不要重复自己),你就会做得很好。

票数 17
EN

Stack Overflow用户

发布于 2015-02-03 16:32:58

我在youtube上找到了一个家伙,上面说他解决了这个问题:既有一个巨大的应用程序,也有很多他认为不好的小应用程序。

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

根据我自己的经验:你不会想要一个大的应用程序,因为人们可以处理更好的文件夹树,这些文件夹树分散得很少,但不会太多。另外,只有一个应用程序会让你更难掌握项目的组成部分(对于新人来说)

另一方面,你拥有的应用程序越多(它们确实是相互依赖的),你遇到循环导入问题的可能性就越大。所以你需要一个策略来避免这些事情。在这里,新成员往往会将项目带入问题。

总而言之,在更多项目上开发过更长时间的人通常应该是架构决策的制定者。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6100021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档