代码之家  ›  专栏  ›  技术社区  ›  Jon

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

  •  4
  • Jon  · 技术社区  · 7 年前

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

    哪一个 框架特征 你认为它有用吗?为什么了解它很重要?

    你能不能把每篇文章的特写限制在一个范围内。

    总结:

    • 条纹闪光镜
    • Django-模板中的JSONified变量
    • Symfony-模型生成。后端管理生成
    • Grails-GORM形式的强大ORM
    • Seaside-没有关系数据库,只编写OO代码
    • 西纳特拉-极简主义
    13 回复  |  直到 17 年前
        1
  •  3
  •   Jon Winstanley    7 年前

    alt text
    (来源: symfony-project.org )

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

    我想这些功能中的一些已经在其他地方使用了,但是我 认为 在PHP中,它们是独一无二的。

        2
  •  2
  •   Lukas Stejskal    17 年前

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

        3
  •  2
  •   Rodrigo Rivera    17 年前

    Grails http://www.cjsdn.net/JVM/Grails/Docs/1.1/img/grails.png

    GORM-我还没有见过另一个框架有如此强大的ORM,但这么容易使用。

        4
  •  2
  •   hannson    17 年前
        5
  •  1
  •   Jørgen Fogh    17 年前

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

    @register.filter
    def jsonify(o):
      return mark_safe(simplejson.dumps(o))
    

    这是很有用的,因为我的网站都是Javascript,所以我使用Django模板来制作网站的无脚本版本。这是最有用的,所以谷歌可以抓取我的网站。例如,在打开和关闭Javascript的情况下查看以下页面: http://www.trailbehind.com/Yosemite%20National%20Park/

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

    @register.filter
    def attr_name(id):
      return util.get_attribute(id).name
    
    
    @register.filter
    def dashes(name):
      return name.replace(' ', '-')
    

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

        6
  •  1
  •   Stephan Eggermont    17 年前

    Seaside不必费心处理关系数据库(SansteneDB、Magma或Gemstone),它允许使用某些方法编写OO代码而不是数据库代码。

        7
  •  1
  •   Stephan Eggermont    17 年前

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

        8
  •  1
  •   InverseFalcon    17 年前

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

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

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

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

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

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

        9
  •  1
  •   InverseFalcon    17 年前

    Spring Web Flow -流和视图范围

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

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

    SWF通过提供一些更适合应用程序属性生命周期的附加作用域来解决这个问题。

    SWF引入了流的概念,流是可重用的模块化行为分组,表示为由状态和状态之间的转换组成的状态机。流可能包括用于调用服务器端行为的操作状态、用于向用户呈现页面的视图状态等。流通常表示用例。流范围的属性在流的持续时间内保持不变,并在流结束时自动清除。这将导致属性只在用例需要时持续存在。

        10
  •  1
  •   RaYell    9 年前

    CakePHP Logo

    CakePHP的显著特点:

    • bake 用于从数据库自动创建模型和控制器的工具
    • 零配置-您只需要设置一个数据库连接,就可以开始了
    • 脚手架-你甚至不需要生成你的视图,cake会为你生成它们
    • 有很多帮助程序——AJAX、JavaScript、HTML、表单、分页、XML、RSS等等
    • ActiveRecord
    • 单元测试的SimpleTest
    • 数据验证-易于使用,但功能强大
    • 数据清理—不必担心代码注入
    • 路由器-允许您将“自定义”URL重定向到特定控制器/操作

    总结:很多人认为Cake是PHP的,就像Rails是Ruby的一样。

        11
  •  0
  •   xpepermint    17 年前

    希望能有帮助。

        12
  •  0
  •   hobodave    9 年前

    Zend Framework

    Zend Framework

    • 挑选你用的东西。ZF是轻量级松散耦合组件的集合。
    • 融入 Google , Amazon , Yahoo! , Flickr ,以及其他几个API
    • 易于使用的XML-RPC、SOAP和REST服务器/客户端
    • 与AdobeAIR&弯曲
    • Zend_CodeGenerator
    • 内置数据库、LDAP和;OpenID身份验证
    • 大融合 Dojo jQuery
    • 适用于企业应用程序的框架(FOX、IBM、Right Media)
    • 非常活跃的社区(irc.freenode.net上的#zftalk)
    • 创建您的模型。(这是一件好事)。
        13
  •  0
  •   Dani Cricco    17 年前

    Icefaces 具有强大的可扩展ajax推送框架