1

来自经典的 ASP,我们现在正在开发一个相对较大的 Django 应用程序。我们正试图弄清楚如何将这个项目的代码分成可管理的部分。

为了便于讨论,假设我们有 CLIENTS,他们与 USERS 具有多对多关系,这些用户具有一个 ROLE,并且每个角色与 RIGHTS 具有多对多关系。
目前,我们将所有这些都放在一个名为“后台”的应用程序中。

缺点是后台应用程序中的 forms.py 和 views.py 包含所有这些实体的类。因为应用程序肯定会增长,我们希望将这些实体的代码分成几个文件。因此,即使它们不是真正独立的应用程序(我认为),它们肯定在处理我们项目后台部分的不同部分。

我在互联网上阅读过,似乎有两种情绪;一种是将models.py和views.py等拆分成文件夹/模块。在这些文件夹中,我们可以有一个 clients.py/users.py/roles.py 等。这将保持应用程序完整,但将代码分开。最后,我们将拥有一个包含大量文件的大型应用程序。

另一种选择是拆分代码并将客户端、用户和角色转换为单独的应用程序,并完全删除我们现在拥有的“后台”应用程序。Django 鼓励分割成更小的应用程序,但这些并不是真正独立的应用程序,客户端用户和角色密切相关,我们正在创建的维护工具反映了这一点。

我实际上是通过在“后台”应用程序中创建更小的(子)应用程序开始的,但我发现这里是不行的。

问题是,应用程序应该鼓励重复使用,我们正在构建的大型网络应用程序有很多部分相互交织并相互依赖。没有真正的方法可以将它分成更小的可重复使用的部分,这些部分在现实世界中是有意义的。

所以问题真的是;在此示例中,分离用户/客户/角色的代码的明智方法是什么?这两种方法的优点/缺点是什么?也许甚至还有一种完全不同的方法,我们还没有找到......

谢谢你的时间。

4

2 回答 2

1

始终使用单独的应用程序。细分 models.py 等是一种 hack,并且可以像您期望的 hack 一样工作。您将花费大量时间来修复接线。

小型、独立的应用程序的主要优点是可重用性。实际上,您甚至不必让它们成为您项目的一部分。事实上,我建议你不要这样做。相反,您可以单独打包每个部分,然后像任何其他第三方应用程序一样安装它们,然后在INSTALLED_APPS. 这样,您的项目只关注您项目的独特之处,您可以稍后将它们放入其他项目中。这还有一个附带的好处,那就是迫使您编写自包含代码并减少对各个部分和您的项目的依赖。

但是,FWIW,您描述的大多数功能已经在 Django 的authcontrib 包中融入了它。尚未烘焙的内容已作为第三方软件包提供,因此无论如何您实际上只是在这里旋转您的轮子。

于 2012-06-29T14:40:10.333 回答
0

我会考虑将每个分离到自己的应用程序中。应用程序结构可能会产生误导。尽管有许多可重用/可插入的 django 应用程序,但许多项目并没有尝试重新打包每个应用程序以供重用。应用程序只是提供了很好的代码分离。

我会想象一个Role有一个模型。可能具有特定于角色的实用功能,如果它是面向外的,则可能具有特定于滚动的 url。

这些可能是基本的 crud 操作。

/roles/add, /roles/delete /roles/create,/roles/update/ 这些中的每一个都可以保证他们自己的应用程序和 urls.py。如果客户端具有相同的操作,那么它们真的不应该位于同一个视图中。

这可以通过同一个应用程序中的多个视图来解决,但我认为这不恰当地利用了应用程序结构。

于 2012-06-29T13:52:13.723 回答