Web applications Web应用程序框架中的独特功能

Web applications Web应用程序框架中的独特功能,web-applications,enterprise,Web Applications,Enterprise,有很多web应用程序框架,基于Java/Ruby/Python/PHP等。我热衷于发现、比较和对比各个框架独有的特性 您认为哪一个框架功能有用,为什么了解它很重要 e、 g Stripes:FlashScope—FlashScope非常有用,因为它允许临时使用会话来存储两个请求之间的信息。将信息作为URL参数输入或实现自定义逻辑以在使用后删除参数的替代方法。 您能否将每篇文章的功能限制为一个。 摘要: 条纹闪光镜 Django-模板中的JSONified变量 Symfony-模型生成。后

有很多web应用程序框架,基于Java/Ruby/Python/PHP等。我热衷于发现、比较和对比各个框架独有的特性

您认为哪一个框架功能有用,为什么了解它很重要

e、 g

  • Stripes:FlashScope—FlashScope非常有用,因为它允许临时使用会话来存储两个请求之间的信息。将信息作为URL参数输入或实现自定义逻辑以在使用后删除参数的替代方法。
您能否将每篇文章的功能限制为一个。

摘要:

  • 条纹闪光镜
  • Django-模板中的JSONified变量
  • Symfony-模型生成。后端管理生成
  • Grails-GORM形式的强大ORM
  • Seaside-没有关系数据库,只编写OO代码
  • 西纳特拉-极简主义
  • SpringWebFlow-流和视图范围

您应该知道如何在Django中编写自定义模板标记。例如,下面的标记允许我在模板中JSonifDjango变量

@register.filter
def jsonify(o):
  return mark_safe(simplejson.dumps(o))
这是很有用的,因为我的网站都是Javascript,所以我使用Django模板来制作网站的无脚本版本。这是最有用的,所以谷歌可以抓取我的网站。例如,在打开和关闭Javascript的情况下查看以下页面:

我还有一些其他有用的标签:

@register.filter
def attr_name(id):
  return util.get_attribute(id).name


@register.filter
def dashes(name):
  return name.replace(' ', '-')

Python的decorator语法不是让这些变得简短而甜美吗?

哼。。。我是一名大约15年的PHP开发人员。看看Rails(RubyonRails)框架。它有一些独特的特性,如数据库迁移,接口的实现不同于Java、PHP等语言,配置文件不同于ini文件(您可以编写代码)

希望能有帮助


(来源:)

Symfony在PHP框架方面做了一些非常独特的事情

  • 它可以创建项目或添加模块和应用程序
  • 它使用非常简单的方法,比XML更容易编辑,并且具有比INI文件更好的层次结构
  • 它还将自动为您创建
  • 并将基于YAML模式或通过读取连接到它的数据库

我假设其中一些功能在其他地方使用过,但我认为在PHP中它们是独一无二的。

简约主义。您只能在一个文件中编写整个web应用程序。(显然,这不适用于大型应用程序,但对于快速原型、小型网站和web服务来说,将所有东西都放在一个地方是很好的。)

Smalltalk中的Seaside支持重构和无目的编程。基于组件且无模板意味着您可以避免大量重复。


GORM-我还没有见过另一个具有如此强大的ORM的框架如此易于使用。

Seaside,不必麻烦使用关系数据库(Sanstendb、Magma或Gemstone),允许使用某些方法编写OO代码而不是数据库代码。

-序列化对话/出色的浏览器后退按钮支持

支持浏览器后退按钮和历史记录对于大多数web应用来说都是一件令人头疼的事情,因为客户端的感知状态/页面很容易与服务器上的内容不同步

SWF通过在每次呈现视图时创建整个会话状态的快照来解决此问题。大多数有状态数据都存储在SWF的一个附加作用域(会话、流、视图)中,并因此与会话快照一起序列化

SWF的URL不能识别像页面或操作这样的资源。相反,它们识别一个流程和一个对话。由于SWF隐式地实现了POST-REDIRECT-GET,因此每次呈现页面时,URL都包含flowExecutionId,它唯一地标识会话和序列化的会话快照。因此,当用户使用浏览器后退按钮或历史记录时,每个URL实际上会在该时间点恢复整个对话状态

这导致了理想的后退按钮处理:客户端状态永远不会与会话状态不同步,用户可以自由地从以前的任何状态继续

当用户执行某些操作时,开发人员还可以放弃或使历史记录(保存的快照)无效。这对于修改数据库中某些内容的用户操作是很好的,因为用户不应该能够返回到不代表数据库中的内容的状态

开发人员可以精确限制要保存的快照数量。由于硬盘容量充足,特别是与内存相比,这是一个相当不错的解决方案

然而,一个主要限制是,放置在对话、流或视图范围中的任何属性都必须是可序列化的。

-flow和view-scope

大多数web应用程序都满足于使用Servlet定义的请求、会话和上下文范围。然而,web应用程序中使用的许多有状态数据并不完全适合这些范围。通常,此类数据的持续时间比单个请求长,但比会话短。在这种情况下,通常使用会话范围。这迫使开发人员从本质上执行手动内存管理,将内容放入会话范围,然后在应用程序的该部分不再需要它们时显式删除它们。这可能会很麻烦,因为通常有多个地方必须删除属性,因为用户通常可以调用多个操作来将它们从需要属性的用例中移除

在大型或不断增长的应用程序中,属性清理代码成为贯穿整个代码的必要且普遍的混乱。忘记清理属性,或者错误地清理错误的属性,可能会引入错误

SWF通过提供一些