Django式框架模式

时间:2015-05-09 23:55:20

标签: django design-patterns frameworks software-design web-frameworks

我使用Django多年(自Django 1.2以来)。在过去,我使用了不同类型的Web框架(例如 CakePHP Rails ASP.NET MVC ,以及其他一些完整的 - 堆栈框架)。 Django不是我的第一个框架。

不同的框架在方法和效益方面存在差异。我喜欢这些框架中的某些部分而且我不喜欢。在这种情况下,我想更具体地看一下Django Framework的设计。

转换到Django之后,我喜欢它如何设计它的框架。在学习一门新语言(例如Go,Scala,Ruby,Haskell)时,我试图寻找一个在设计上有一些相似性的框架,特别是我后面提到的那些。

以下是2个Django框架设计决策的不同之处:

我不相信Django先锋这样的功能。我相信这种模式在框架设计中非常普遍。只是我不知道,这个(设计)模式叫什么?这个概念在其他框架中应用非常有用。我相信知道模式的名称可以帮助我理解甚至用相同的概念构建不同语言的新框架。

目前有大量的Web框架,其中大多数都遵循经典的MVC模式。有些人使用插件的概念来添加某些功能。然而,插件根据上下文解决了不同方法的可重用性。

所以我确实试图学习尽可能多的框架,以便找到不同语言的替代框架。希望我能找到Django使用的模式。但是,我很难学习all of them。事实上,到目前为止我还没找到。

我一直在寻找:

不幸的是,他们都没有真正突出我感兴趣的概念。

在本Q& A中,我想知道人们称这种框架为何? (或者Django使用什么模式?)如果你能在这个设计中给出其他框架可能也在使用它的参考文件,那会不错?

3 个答案:

答案 0 :(得分:2)

看着Django design philosophies

我认为他们使用/结合了许多不同的设计模式,试图实现哲学。很难映射到单一概念。

提示是查看Software Design Pattern,应该可以识别django中使用的许多模式。许多模式在其他框架中当然也很常见。

例如(或多或少使用的模式):

  • modelform_factory映射到" Builder"
  • QuerySet可以映射到"延迟初始化"
  • ORM /数据库映射到"适配器"

答案 1 :(得分:1)

您在其他语言中无法做到的django是什么?

  • 是访问数据库还是模型? - 不,python也有SQLAlchemy; ruby有Active Record ...
  • 是视图还是Web框架? - 不,您可以使用FlaskPyramidrailsphp ...
  • 提供观看次数
  • 这是模板系统吗? - 不,你也有Jinja; mustacheLiquid ...
  • admin个贡献包吗? - 不,你有phpmyadminworkbench ...
  • 是一套可以让您的开发变得简单的库吗?工具包?

django有很棒的工具,你可以使用很多套餐;它是一个平台,意味着它有足够的核心作为许多项目的起点,并且足够的社区背后有很多软件包可以集成到一个转弯-key解决方案轻而易举。

django使用 DRY Don't Repeat Yourself)原则作为设计理念。从可重用性的角度来看,为每个部分/应用程序保持明确的职责可以轻松地重用组件。但这并不是一个精心设计的平台;重点应放在以重用方式编写的组件上。例如。通用标记,配置/数据驱动的组件......

答案 2 :(得分:0)

Django是MVC

MVC是模式,不是必须应用严格的规则框架。该模式试图为常见问题提供普遍接受的解决方案。问题是"如何正确组织一个Web框架"解决方案是通过分离数据,逻辑和用户界面来解决问题。在有意义的模块中。

因此Django是MVC。 Django在逻辑上将这些概念(以及许多其他概念)分离出来。这对IMO来说至关重要。 Django视图与MVC视图不同,但是...... poteto potato ...

关于应用可重用性

Django是完美主义者的网络框架(...)完美主义者(或者只是优秀的开发人员)编写可重用的代码。这由Django DRY philosophy表示,并在Django应用程序中实现。

我非常确定您可以使用其他网络框架设计类似应用的组件。当然,由于多年以来 apps 属于Django的性质,它有更好的支持!