【问题标题】:How do you grow beyond web frameworks to create your own application framework? [closed]您如何超越 Web 框架来创建自己的应用程序框架? [关闭]
【发布时间】:2011-06-26 12:02:03
【问题描述】:

Web 框架很棒。我认为自己滚动而不考虑流行的开源库是一种设计味道。因此,如果有人打算在不使用像 Rails 这样流行的服务器端 Web 框架和像 jQuery 这样的流行客户端框架的情况下开始一个 Web 项目,我认为他们要么是疯狂的、无知的,要么是非常小众的。

也就是说,Web 框架不会尝试为您做很多事情。恕我直言,Rails 和 jQuery 等框架之所以成功,是因为它们试图将 80% 的工作带到那里,而剩下的 20% 则留给你做。做 80% 可以让它们足够灵活,可以被广泛使用,而不会变得过于拘束或尴尬。所以问题就变成了,剩下的 20% 怎么办,尤其是当你的应用程序变得越来越大时?

在过去的 1.5 年里,我们开发并维护了一个 Rails/jQuery-UI 应用程序。如前所述,事实证明,这些框架的不受约束的力量对于让我们快速上手、保持我们的生产力和加强良好的设计非常有用。然而,在过去的几个月里,我开始认为我们应该能够更快地开发和部署新功能,而且我开始觉得我们在 Rails 和 jQuery 提供的基础上构建的不够多我们。新功能似乎每次都必须从 80% 的点开始开发,而不是更可取的 90-95% 点。

为什么您的战略是超越 Web 框架?您使用了哪些技术或技术将 80% 的起点移动到接近 90-95% 的位置?您在构建自己的应用程序框架或工具包时遇到或克服了哪些具体障碍?在 vanilla Rails 和 jQuery 上进行开发的原因是什么促使您寻求更紧密的应用程序集成?

【问题讨论】:

    标签: jquery ruby-on-rails web-applications architecture


    【解决方案1】:

    框架和库会留下您记下的“20%”,以便您可以在它们之上构建。如果您发现每次需要添加新特性或功能时,您仍然在 80% 的水平上工作,那么您什么都没做。

    就我个人而言,我使用过许多 PHP 框架,我在其中构建了自定义库和功能,这有助于将我的项目提高到 90-95% 的水平。 15% 的项目差异非常重要。该代码的一些示例如下:实用程序函数、权限系统、内部 api 和模板管理器(有助于使用您的视图呈现数据)。

    至于客户端、Javascript、库(jQuery、Prototype、Dojo 等),这听起来好像您没有长期考虑。越来越多的人意识到他们需要从严格的 Javascript 应用程序结构开始,然后再考虑使用哪个库。库提供了一些标准方法来绑定事件、选择元素等,但似乎都没有真正内置大规模应用程序逻辑。您需要自己构建。

    松耦合(或Pub/Sub - 发布订阅)已经变得非常流行,并且有一些很棒的库可以帮助 MVC 和查看状态,例如 jQuery BBQBackbone.js(就像 @Raynos 建议的那样)。此逻辑可帮助您以整个应用程序的标准方式扩展和正确管理新功能。也就是说,您仍然应该理解并从您理解的纯无库应用程序结构开始。我在这里 (http://darcyclarke.me/development/javascript-applications-101/) 写了一篇很好的 101 帖子,Addy Osmani 也为此提供了很好的资源 (http://addyosmani.com/blog/large-scale-jquery/)。与服务器端有点不同,我建议您在决定使用哪个库之前构建 15-20%。毕竟,它们确实具有许多相同的功能,不应该仅仅依靠它们来构建您的客户端应用程序。

    我仍然认为你最好拥有这些工具,而不是从头开始构建自己的工具,但我认为你需要开始在它们之上构建自己的工具集。

    【讨论】:

    • 我认为像jQuery BBQ 这样的视图状态管理真的不应该属于你的服务器端。
    • 取决于您正在构建的应用程序类型。 SproutCore、jQuery BBQ 和 Backbone.js 之类的东西都使用哈希 URL(或“hashbangs”)处理视图状态。随着 Twitter 和 Gawker 采用这种 hashbang 方法,您将开始看到越来越多的视图状态管理被推送到客户端。我确实建议拥有可用于任何类型的永久链接或 SEO 目的的视图状态的备份/服务器端版本(在明年,直到谷歌最终排除、渲染和索引基于 JS 的应用程序和 hashbang)
    • Javascript 模板最近也变得非常流行,这将是采用更多客户端管理和呈现视图状态的另一个原因。 Mustache.js (github.com/janl/mustache.js) 和官方 jQuery 模板插件 (api.jquery.com/category/plugins/templates) 只是其中的两个。另外,谁不喜欢创建 API 来提供视图状态数据以供内部、客户端或第三方使用
    • 我并不是说我粗略的 80/20 声明会误导您认为我们的应用程序不是建立在共享模型、库和可重用组件的核心之上。我的问题实际上是关于客户端和服务器技术的全栈集成以实现快速开发,为此,您回答的后半部分非常有帮助。我将查看您在答案和 cmets 中建议的资源。谢谢。
    【解决方案2】:

    我并没有真正对服务器端框架做太多事情,因为我们的 ASP.NET 后端已经处理了 90%,而其他人编写的所有自定义服务器端控件都处理了最后 5%。

    就客户端而言,除了编写通用的可重用控件之外,您几乎无能为力。我使用 jQuery 的主要原因是因为它抽象了跨浏览器的合规性。我像使用 JavaScript 一样使用它,只是它在 IE 中可以毫不费力地工作。

    在 jQuery 之上构建可重用的控件。制作自定义插件。使您编写的所有自定义代码更加通用,以便您可以在项目之间重复使用它。

    我建议你看看backbone.js。它是一个真正允许您自定义 Web 应用程序的客户端 MVC 框架。在这样的 MVC 框架之上构建使代码非常易于扩展且易于管理。这样做的好处是您有很多控制权,并且您可以在此基础上设置自己的通用框架,允许重用、重用和重用。

    要记住的重要事情之一是将跨浏览器合规性委托给 jQuery 等底层库,然后在其之上构建抽象。

    以我个人的经验,到处都是通用的错误代码比 jQuery 的限制更能拖累我们。也许如果每个人都写了很棒的代码,我们会注意到 jQuery 的局限性。我还看不出 ASP.NET 框架的任何限制。

    【讨论】:

    • 感谢您的回复。阅读回复后,我可能并不完全清楚我正在考虑更紧密的前端和后端集成,但你却一头雾水。我们一直在使用 jQuery UI Widget abstraction 构建可重用的 js 小部件来构建可重用的前端小部件,但我们还没有添加您在这里谈论的那种后端集成。我会将backbone.js 添加到我们的其他客户端框架列表中以查看:knockout.js 和 jQueryMVC。
    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2010-09-20
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多