我已经为此四处搜索过了,但我仍然难以理解 Django 所定义的“应用程序”。
我是否应该为站点中的每个功能部分创建一个新的应用程序,即使它使用来自主项目的模型?
你们有没有一个很好的经验法则,什么时候拆分一个新的应用程序,什么时候保持功能与“主项目”或其他应用程序一起?
我倾向于为每一组逻辑上独立的模型创建新的应用程序。例如:
我更喜欢将 Django 应用程序看作可重用的模块或组件,而不是“应用程序”。
这有助于我封装和解耦特定的功能,提高可重用性,如果我决定与整个社区共享一个特定的“应用程序”,以及可维护性。
我的一般方法是将特定的功能或特性集装进“应用程序”中,就好像我要公开发布它们一样。最难的部分是计算出每个桶有多大。
我使用的一个很好的技巧是想象如果我的应用程序被公开发布,它们将如何被使用。这经常鼓励我缩小桶,并更清楚地定义它的“目的”。
James Bennett 有一个关于如何在 Django 中组织可重用应用程序的很棒的 一组幻灯片。
一个“应用程序”可以是许多不同的东西,这一切都归结为品味。例如,假设您正在构建一个博客。你的应用程序可以是整个博客,或者你可以有一个“管理”应用程序,一个“网站”应用程序的所有公众意见,一个“ rss”应用程序,一个“服务”应用程序,这样开发人员可以用他们自己的方式与博客接口,等等。
我个人会将博客本身作为应用程序,并突破其中的功能。这个博客可以很容易地在其他网站上重用。
Django 的优点在于,它可以将目录树的任何级别中的任何 models.py 文件识别为包含 Django 模型的文件。因此,将你的功能分解成更小的“子应用程序”并不会让任何事情变得更困难。
我遵循的规则是,如果我想在不同的项目中重用这些功能,它应该是一个新的应用程序。
如果需要深入理解项目中的模型,那么将它与模型结合起来可能更有凝聚力。
以下是2008年9月6日的最新简报。
DjangoCon 2008: 可重用应用程序@7:53
幻灯片: 可重用 _ apps. pdf
从幻灯片上取下来的 这应该是它自己的应用程序吗? 它是否与应用程序的焦点完全无关? 它和我做的其他事情是正交的吗? 我需要在其他网站类似的功能? 如果他们中的任何一个是“是的”? 那么最好把它分解成一个 单独申请。
这应该是它自己的应用程序吗?
如果他们中的任何一个是“是的”? 那么最好把它分解成一个 单独申请。
对于这个问题,我在网上找到的两个最佳答案是:
双方都同意在下列情况下应该创建一个单独的应用程序:
这个问题的最佳答案来自 Andrew Godwin (Django 核心开发人员) :
在我看来,应用程序的主要目的是提供可重用组件的逻辑分离——具体来说,就是为模型/管理员等提供一个一流的名称空间——并提供一种简单的方法来打开或关闭组件。
在某种程度上,它是创建 Django 时的遗物——当时 Python 打包和模块还没有得到很好的开发,您基本上必须拥有自己的解决方案来解决这个问题。尽管如此,它仍然是 Django 思维模型的核心部分,而且我认为 INSTALLED _ APPS 仍然是一个比 Python 提供的入口点替代方案更简洁、更容易的解决方案(这使得禁用安装在环境中但你不想使用的包变得相当困难)。
你认为现在有什么特别的东西可以与应用程序的概念解耦吗?模型和管理员需要它来进行自动发现和一个独特的名称空间前缀,所以这很难撤销,而且我正在努力思考你需要它的其他特性(事实上,如果你想要的只是一个库,你可以把它变成一个普通的 Python 库——不需要应用程序包装,除非你发送模型、模板或管理代码 IIRC)