3

我不是 Web 开发人员,我对那里的 Web 应用程序框架了解不多。

然而,最近,我进入了Wt。这是一个用 C++ 编写的 Web 框架(这就是我进入它的原因),但最让我印象深刻的是它所基于的想法。

它的 API 不同于我听说过的任何 Web 框架(CppCMS、Yii、Django、Pylons、Zope、Drupals、Java Servlets、Struts ......):为任何用户会话创建一个新的应用程序对象,并且它一直存在直到会话过期(仅在此时 Application 对象被销毁)。这个应用程序对象就像一个桌面窗口:你把小部件放在里面(像表单、链接、标签这样的小部件......);当用户点击一个链接时(当 HTTP 服务器接收到一个新的 GET/POST 请求时),一个函数被调用到紧贴用户会话的对象上(以一种很好的 Signal/Slot 方式),它可以删除/添加/更改小部件,从而改变用户将看到的页面。

正如我所说,我对 Web 框架不是很熟练,我几乎只开发桌面应用程序;也许出于这个原因,我认为Wt 背后的这种范式很棒。

我想知道这个框架 API 相对于其他 API 的优缺点是什么,以及是否还有其他基于相同概念的框架(也有其他语言)。

4

3 回答 3

3

Wt 对于它的预期应用范围来说是一个很好的框架。

Wt 非常适合:

  • Web 应用程序与会话紧密耦合,即
    • 只能由登录的用户访问(登录页面除外)
    • 显示大量与用户相关的内容(因此不适用于 wiki)
    • 严重依赖国家
  • 需要大量控件/按钮和用户输入的网络应用程序。

例如,我打算写一个浏览器 MMORPG。页面都将具有与用户相关的状态,并且会有很多按钮。Wt 是完美的。我曾经是一名 Ruby on Rails 开发人员,为这种应用切换到 Wt 是一个很棒的时刻。使用试图强制执行纯 REST 的传统框架来设计表单非常麻烦。

Wt 对于某些过程的控制界面也是完美的。例如,允许您的客户配置他们的广告词活动的界面等。

当然,使用 Wt 在控制和分离方面并不完美,但是当您只需要“经典”功能(按钮、编辑器等)时,它可以实现极快的开发。

因此,根据经验,如果您尝试将桌面应用程序放在网络上(这是一个好主意,无需在客户的机器上进行部署和更新),Wt 是一个不错的选择。

此外,如果您正在与现有的 C++ 代码库交互,Wt 具有优势。

于 2011-11-16T17:40:33.160 回答
0

我认为这通常是个坏主意。

Web 应用程序与 GUI 非常不同,原因有很多:

99% 的网络是关于内容的,而不是关于迭代的。

您访问网络是为了获取或共享内容,而不是进行一些实时交互,例如绘制图片、使用电子表格或其他任何东西。Web 是内容驱动而不是“事件驱动”的交互式应用程序。

这对您如何创建大部分网络有很大的影响——您将信息带给用户,而不是与他互动。

服务器和客户端编程有很大不同

有一些 Web GUI 应用程序,如电子邮件、聊天客户端,但要运行良好,它们需要在用高质量 Java 脚本编写的客户端和通过 AJAX 用于内容检索的高质量服务器端后端之间进行很好的分离。

像 Wt 那样隐藏这种分离或(其他已知框架)会导致糟糕的软件,并且从长远来看通常会带来比解决方案更多的问题。

因为服务器端和客户端作业之间应该非常清楚地分开,因为有些需要实时响应而有些则不需要。

当您尝试一次性解决所有这些问题时。请注意,有用于 GUI 的客户端-服务器解决方案(参见 X-Server 示例),但与 Web 不同的是,它们为此设计的,更像是 IPC,而不是客户端-服务器解决方案。

网络大部分时间都是无状态的。

或者更正确地说,状态通常保留相当少量的数据。

创建即时会话对象是个好主意,直​​到您需要... 长期扩大保存状态,然后这个模型变得不太好,当然这不是 Wt 的“强制”模型,但它是适合某些概念的一般概念,并且有些没有。

底线

如果你想设计好的 GUI,比如 Web 应用程序。开始学习 JavaScript 并使用适合 GUI 甚至驱动设计的良好 GUI JavaScript 框架。然后将它们与一些服务器端 API 结合使用一些交互 RPC 模型,如 Json-RPC、XML-RPC 和其他 AJAX 工具。

这是为高度交互的应用程序做正确事情的方法。

如果您的应用程序更加面向内容,那么大多数服务器端 Web 框架都做得很好 - 专注于服务器端及其适合该工作的出色工具。

一站式解决方案?它只是不起作用......

披露:我是CppCMS的开发人员,我认为 Wt 只是走错了路。

于 2010-11-11T20:15:16.107 回答
-1

ASP.NET is similar; it has the same goal to make web development look like desktop application development.

于 2010-11-11T18:31:09.590 回答