我已经为此搜索了一下,但我仍然无法解释Django定义为“apps”的问题。
我是否应该为网站中的每个功能创建一个新的应用程序,即使它使用主项目中的模型?
你们有什么经验法则可以解决何时拆分新应用,何时将功能与“主项目”或其他应用保持在一起?
答案 0 :(得分:40)
James Bennett对如何在Django中组织可重用的应用程序有一个很棒的set of slides。
答案 1 :(得分:18)
我更喜欢将Django应用程序视为可重用模块或组件,而不是“应用程序”。
这有助于我将某些功能相互封装和分离,如果我决定与整个社区共享特定的“应用”并提高可维护性,则可以提高可重用性。
我的一般方法是将特定功能或功能集添加到“应用程序”中,就好像我要公开发布它们一样。这里的难点在于确定每个铲斗的大小。
我使用的一个好方法是想象如果我的应用程序是公开发布的,我将如何使用它们。这经常鼓励我缩小桶并更清楚地定义它的“目的”。
答案 2 :(得分:12)
以下是2008年9月6日的最新简报。
DjangoCon 2008: Reusable Apps @7:53
取自幻灯片
这应该是它自己的应用吗?
- 它与应用程序的重点完全无关吗?
- 与我正在做的其他事情正交吗?
- 我是否需要在其他网站上使用类似的功能?
如果其中任何一个是“是”?然后最好把它打成一个 单独申请。
答案 3 :(得分:11)
我倾向于为每个逻辑上独立的模型集创建新的应用程序。 e.g:
答案 4 :(得分:5)
我遵循的规则是,如果我想在不同的项目中重用该功能,它应该是一个新的应用程序。
如果需要深入了解项目中的模型,那么坚持使用模型可能更具凝聚力。
答案 5 :(得分:1)
'app'可能有很多不同的东西,这一切都归结为品味。例如,假设您正在构建一个博客。您的应用可能是整个博客,或者您可以拥有一个“管理”应用,一个适用于所有公共视图的“网站”应用,一个“rss”应用,一个“服务”应用,因此开发人员可以在其中与博客进行交互自己的方式等。
我个人会将博客本身作为应用程序,并打破其中的功能。然后可以在其他网站上轻松地重复使用该博客。
关于Django的好处是,它会将目录树中任何级别的任何models.py文件识别为包含Django模型的文件。因此,将您的功能分解为“应用”本身内的较小“子应用”并不会让事情变得更加困难。
答案 6 :(得分:1)
我在网络上找到的对该问题的两个最佳答案是:
两个消息来源都同意您在以下情况下应创建一个单独的应用程序:
答案 7 :(得分:1)
这个问题的最佳答案是由Andrew Godwin(Django核心开发人员)给出的:
在我看来,应用程序的主要目的是提供可重用组件的逻辑隔离-特别是为model / admin / etc提供一流的名称空间。 -并提供一种简单的方法来“打开”或“关闭”。
从某种意义上讲,这是创建Django的遗物-Python封装和模块的开发远不如以前,您基本上必须有自己的解决方案。也就是说,它仍然是Django心理模型的核心部分,我认为INSTALLED_APPS还是比Python替代入口点的产品更干净,更容易的解决方案(这使得禁用安装在环境中的软件包非常困难,但是您却不愿意这样做)不想使用)。
您今天是否特别认为可以与应用程序概念脱节?模型和管理员需要它来进行自动发现和唯一的名称空间前缀,因此很难撤消,而且我正努力考虑您需要它的其他功能(实际上,如果您想要的只是一个库,您可以做到这一点一个普通的Python-除非您要运送模型,模板或管理代码IIRC,否则无需包装应用程序