【问题标题】:Django's equivalent of PHP CodeIgniter's HMVCDjango 相当于 PHP CodeIgniter 的 HMVC
【发布时间】:2015-11-02 01:05:08
【问题描述】:

我已经使用CodeIgniterHMVC moduler extension 开发了一些网络应用程序。我的一个项目的文件夹结构会是这样的

Project
| config(common for module1 & module2)
| | database.php
| | config.php
| modules
| | module1
| | | config(module1 specific)
| | | | database.php
| | | | config.php
| | | model
| | | | ...
| | | view
| | | | ...
| | | controllers
| | | | ...
| | module2
| | | config(module2 specific)
| | | | database.php
| | | | config.php
| | | model
| | | | ...
| | | view
| | | | ...
| | | controllers
| | | | ...

文件夹结构显示我有 common config 用于 module1 和 module2 以及 module specific config。 现在,我计划将 Python 和 Django 用于一个更大的项目,该项目的模块数量比我以前开发的要多。我相信管理可扩展应用程序的最佳方式是使用 HMVC 设计模式。那么,谁能告诉我 Django 中是否有类似 HMVC(通用配置和模块特定配置)的东西。

【问题讨论】:

    标签: python django hmvc


    【解决方案1】:

    在罗马时...

    首先,不管 HMVC 理论的优点如何,如果您正在开始您的第一个 Django 项目,最好不要偏离 Django 中的“常见做法”。稍后,当你适应它时,你就可以做任何你认为会有所改进的改变。

    相反,如果您真正喜欢并认为最好坚持某种模式,那么最好选择最能体现这些模式的工具。如果 Django 让你很难做你认为最好的事情,那么它就不是你的最佳选择。

    现在谈谈细节。 Django 并没有尝试将自己呈现为 MVC 框架,关于 MTV(模型模板,视图)的 FAQ 条目有点过时,因为它试图将这种模式呈现为 MVC 的“重新解释”;但现在它更像是“只是不是 MVC”。主要是因为 Django 中没有“控制器”。

    在第一次快速阅读 HMVC 上的 Wikipedia 页面时,它似乎是将控制器拆分为更本地化的代码,以避免单个“上帝对象”,并改进模块化。而且由于 Django 中没有控制器,乍一看,HMVC 在 Django 中似乎没有任何意义。

    但是,有人说在 Django 中,URL 映射填充了“控制器”的概念。知道吗?它们是分层和模块化的!

    因此,根据您对 HMVC 的定义,您可能会发现 Django 已经在这样做了!

    但是,说真的,当您转换技术时,请抛开先入为主。

    (免责声明:我真的很喜欢 Django 架构,因为我发现它非常容易启动并且非常容易维护。同时,我一点也不关心用于 Web 服务器框架的 MVC,因为我觉得它是为桌面 GUI 模块化应用程序制定的 MVC 理论的糟糕改编。具有讽刺意味的是,前端框架正在偏离“Web MVC”并重新发现“GUI MVC”)

    【讨论】:

    • there's no "controller" in Django 这不是真的。 It's simply a matter of naming。简而言之,Django 将控制器命名为视图,将视图命名为模板。 Where does the “controller” fit in, then? In Django’s case, it’s probably the framework itself: the machinery that sends a request to the appropriate view, according to the Django URL configuration.
    • On first and quick read of the Wikipedia page on HMVC, it seems to be about splitting the controller into more localized code, to avoid a single "god object", and improve modularization 一点也不。看看this TechPortal article。我认为这句话很关键:The two controllers; Controller_Index and Controller_Messages; were both executed by a single request to the application. However each controller was unaware of the others presence.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多