6

TL;博士

在提供RIA交互性的同时,我可以使用什么框架在服务器上保持 100% 的应用程序逻辑?

解释

早在 90 年代,就可以用普通的 PHP 构建 100% 的服务器端应用程序。但随后对页内交互性的需求增加,越来越多的应用程序逻辑被转移到客户端 javascript 中。如今,借助 websocket 和完全动态的 DOM,再次可以构建服务器端应用程序,同时满足所有页面内交互性要求。客户端所需要的只是一个通用的 javascript 库,它通过 websocket 将 DOM 与服务器同步。

虽然我相信这种 Web 开发方法有其优点,但我不想在这里讨论这种技术的优缺点。

我的问题是关于 2014 年底可用的支持这种开发风格的最先进的框架。实验框架也可以,只要它们的架构足够清晰。我不需要现有框架的清单。我想看到一些实现这种软件架构的框架,或者,如果没有这样的框架,我想了解那些最接近理想的框架。

到目前为止,我自己的研究表明Meteor正在朝着正确的方向发展,但它仍然鼓励客户端使用过多的特定于应用程序的 javascript,并将服务器端平台与客户端平台(即 javascript)联系起来。我读过Trello 架构,它在很大程度上将客户端简化为模板处理器,但模板和相关的模板/绑定库是我想移回服务器端的东西之一。Amazon AppStream将所有 UI 逻辑保留在服务器上,但它对于 Web 开发来说非常昂贵,尤其是当用户将应用程序闲置在后台时。

更新:到目前为止,所有答案都集中在 Meteor 上。我删除了 Meteor 标签,因为它可能会产生误导。我提到了 Meteor,因为 Meteor 演示让我可以选择是否要在服务器端或客户端运行代码。现在很清楚 Meteor 不会通过网络传输任何 UI,只会传输数据。因此,它需要客户端上一半的应用程序,至少以模板的形式。

更新 2:我找到了 XML (REX) 的远程事件,这是一种可用于从服务器端应用程序远程操作客户端 DOM 的协议。没有明确的方式将用户操作(点击、编辑)发送回服务器,但也许这些可以定义为 REX 中的扩展事件,这是规范允许的。尽管如此,它仍然只是一个协议。没有真正的软件我可以使用。

更新 3:我必须澄清一件事。简单地获取服务器端模板并将它们转换为客户端模板,然后在客户端上执行这些模板,并不能算作 100% 的服务器端应用程序逻辑。虽然这样的框架允许我使用服务器端 API,但它们不可避免地会给客户端带来负担并暴露出大部分应用程序代码。我正在寻找只将渲染内容(和通用事件挂钩)发送到客户端的东西。

此外,关于小部件/控件,框架可以允许客户端代码处理边缘情况(新的低级小部件),但它不能要求典型应用程序逻辑(模板和高级小部件)的客户端实现。

4

8 回答 8

4

坦率地说,Meteor 不是你要找的。Meteor 框架必须提供的主要优势不是您要使用的部分。

老实说,我不确定适合您的应用程序。但它肯定不是流星。

于 2014-12-24T22:47:45.173 回答
2

Vaadin似乎非常接近您想要的。我自己没有这方面的经验,但根据我的阅读,它应该允许您用服务器端代码 (Java) 编写整个应用程序(包括 UI 逻辑)。该框架负责处理不可避免的客户端内容(Ajax)。

参考

于 2014-12-30T21:12:15.333 回答
1

您可能需要考虑使用组合工具来实现此目标。Meteor 对你来说不是最好的方法,因为它依赖于客户端 JavaScript 并且只在网络上传递数据。

我建议使用 Node.js 作为服务器,因为它是 Meteor 的底层服务器。然后,您可以使用像jade 或类似的服务器端模板引擎来呈现html。这将使您的应用程序动态化,但减少对客户端的依赖。你失去了所有的反应性,但这是在服务器上渲染的权衡。

于 2014-12-25T04:24:48.210 回答
1

Meteor 是非常模块化的,所以你可以使用它,但它的意义非常非传统。

您必须删除其中的客户端/基于 Web 的内容。这包含在meteor-platform包中。

拥有一个“准系统”应用程序可能会更好

meteor create myapp
meteor remove meteor-platform

现在您可以添加一些对开发有用的包(您可以删除其中任何一个):

meteor add logging ddp mongo check underscore random ejson

现在你有一个 100% 的服务器应用程序。

这个应用程序与典型的 Meteor 应用程序略有不同,因为它没有为任何客户端代码提供服务的“Web 服务器”,它几乎是一个纯服务器应用程序。

首先,您必须删除所有样板代码(myapp.html、myapp.css、myapp.js)并拥有一个main = function() { ... }包含您的应用程序的方法的文件。请记住,您需要在此方法中使用一些东西来保持您的应用程序正常运行,例如套接字侦听器(可能是 express js?),一旦它运行,应用程序将停止

同样,我不确定你想要一个 100% 的服务器端应用程序到底想要什么,如果你打算使用 Meteor over Node,它的好处是允许你拥有同步代码、内置的 mongo 和 DDP,这可能是方式去。如果你不想要客户端的东西,或者你不想要的任何东西,你可以使用上面的方法删除它。

于 2014-12-26T07:25:06.177 回答
1

使用带有服务器端事件模型的东西,例如:

Blueprint 的大部分理念和语法都来自 XForms。我们选择了完整的声明性语言,因为这是我们可以在各种设备上有效运行的唯一方式,其中一些设备根本没有脚本。通过使用声明性语法,我们可以封装和隐藏脚本细节。在某些情况下,代码可以在手机上运行,​​在其他情况下,例如 XHTML,我们可以将逻辑放在我们的服务器上。这是处理各种环境及其功能的完美方式。

Orbeon 表单有一个命令行界面,使用称为 XPL 的管道和过滤器实现:

您可以使用 Orbeon Forms 构建运行管道的独立命令行应用程序。用例包括:创建网站的硬拷贝、在关系数据库中导入或导出 XML 数据、测试管道、自动执行对 XML 文件的重复操作(选择、转换、聚合等)。Orbeon Forms 成为您的“XML 工具箱”。

Orbeon Forms 附带一个命令行界面 (CLI)。运行它的最简单方法是使用可执行的 orbeon-cli.jar 文件并将其传递给管道文件:

java -jar orbeon-cli.jar pipeline.xpl

在这种情况下,管道可以使用相对 URL,或者,如果使用绝对 URL,则可以使用 file: 协议访问文件,或者等效地使用 oxf: 协议。

有时,最好将文件分组在 oxf: 协议寻址的资源沙箱下。这是在 Web 应用程序中访问资源(文件)的标准方式,但它对命令行应用程序也很有用。在这种情况下,使用 -r 选项指定资源管理器根目录,例如:

java -jar orbeon-cli.jar -r . oxf:/pipeline.xpl

或者:

java -jar orbeon-cli.jar -r C:/my-example oxf:/pipeline.xpl

参考

于 2014-12-30T00:05:41.833 回答
1

这是一个非常有趣的问题,因为很多人都在努力在客户端构建应用程序并使用 BeASS(后端即服务)。在我的脑海中,以下两个浮现在脑海中:

由于我对 Dojo Tookit 最有经验,因此您可以执行以下操作:

1. Zend 和 Dojo 集成

Zend(PHP 和 Apache 服务器的主要贡献者之一)已将他们的框架与 Dojo 集成。可以在这里看到http://framework.zend.com/manual/1.12/en/zend.dojo.view.html纯粹通过使用 PHP 代码,他们有一种方法可以在客户端呈现 Dojo 小部件。

2. Dojo 与 Node.JS 的集成

通过这样做,Dojo 和 Node.js 的简单集成很容易。http://dojotoolkit.org/documentation/tutorials/1.8/node/

但是,Dojo 小部件(完全交互式,RIA 等,可以在这里看到http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/themes/themeTester.html)可以使用服务器端代码呈现并发送到客户。请参阅此http://dojotoolkit.org/reference-guide/1.9/dijit/_AttachMixin.html和此http://jamesthom.as/blog/2013/01/15/server-side-dijit/

3. 模板框架

与第 2 点一样,存在许多用于 JavaScript 的模板框架。可能有很多框架可能会在服务器端填充这些模板并将视图代码发送到客户端。

不过,请注意上述链接。Dojo 本身一开始就很难学(后来它的力量让你吃惊!)但是上面的链接是非常强大的东西,很难学。

就我个人而言,我认为我们已经进入了一个浏览器几乎可以做任何事情的时代,而服务器只是坐在那里以获取持久数据/促进多个用户和身份验证。

当我遇到更多这样的框架(包括 Pt 的示例)时,我将发布更多链接。3

编辑:这是 PHP 中发生的事情,它有效地将 JavaScript 用户事件减少为对服务器的网络调用。http://www.xisc.com/

于 2014-12-30T14:24:55.750 回答
1

我本着这种精神构建了应用程序,主要是因为我需要支持旧版本的 IE,它不能处理繁重的客户端工作。基本方法是使用服务器端部分并通过 ajax 加载它们。为您提供 RIA,同时将逻辑保留在服务器上。

我已经在 asp.net webforms、asp.net mvc、rails 和 node/express 中完成了这项工作。

一个示例是编辑记录的表单。使用敲除、角度、jquery 等......您的表单将成为 DOM 的一部分,您将通过 ajax 加载数据,然后如果您使用 jquery 之类的东西或让框架以角度进行双向绑定,则执行绑定,昏死, ...

在这种方法中,您将从服务器加载部分内容,DOM 和绑定将在服务器上完成,您将使用响应完全替换 div 的内容。

具体细节取决于您使用的语言,但我有一个使用 asp.net mvc 编写的商业应用程序,它完全可以做到这一点,而我们公司使用的一个内部工具也是用 node/express/jade 编写的,它也可以做到这一点。遵循代码要容易得多,并且您可以获得更多的浏览器兼容性。尽管如此,这不是该行业的发展方向。对于较新的代码,我们使用敲除和角度。

于 2014-12-30T16:23:17.293 回答
1

我建议使用Oracle ADF
它具有一系列 UI 组件,并且它具有内置的 ABC(ADF 业务组件),它对数据层进行了很好的抽象,因此您可以从数据库或 Web 服务或文件或...中获取数据。

您也可以使用JHeadStart,它是一种代码生成器,它为您构建网页和模块,您可以非常快速地构建您的 Web 应用程序。

于 2014-12-30T21:31:59.957 回答