随着可用的 Web 开发框架种类繁多,似乎总是有一种“尝试新事物”的永久动机。因此,我们中的一些人发现自己用一个框架换另一个框架,从来没有对最终结果完全满意。当然,总会有一个特定的 Web 框架可以完美服务的利基市场。但是,有很多人已经决定使用 C++、Java 或 C# 来构建桌面应用程序。对于 Web 开发应用程序,情况并非如此。Joel Spolsky 在链接文本中提到了这一点。
假设我要构建这样一个框架:功能需求是什么?这里的目标是列出具体的功能期望(当然,为了stackoverflow 发布而简洁地定义)。将根据其票数选择最佳答案。
只是为了让每个人都开始,以下是部分要求列表。请注意,这些项目是故意留下一些抽象的,目的是人们可以从中得出更具体的项目:
OOP 一致性:服务器端和客户端模块之间的无缝数据交换和本机对象表示:也就是说,给定客户端的
clientFoo()
一个函数:和服务器端的一个函数:一个serverFoo()
应该能够传递一个对象无需任何编组obj
的任何类型:T
define clientFoo() { T obj = createObject() serverFoo(obj) } OR define serverFoo() { T obj = createObject() clientFoo(obj) }
这增加了本地对象表示在客户端和服务器端必须相同的要求,包括所有组合、类间耦合和封装语义。基本上,给定的类或给定的实例是驻留在客户端还是服务器端应该是完全无关的。
功能一致性:无缝的功能和线程执行:应该能够在客户端/服务器端创建一个函数并将其传递到边界以执行。这包括对多线程的统一支持(在客户端和服务器端都应该一致地工作)。
多应用程序会话互操作性:这里一个完美的例子是应用程序间的“剪切和粘贴”(如上面指出的文章中所述)。我不是在谈论将浏览器中的文本简单地复制到另一个浏览器实例(或选项卡)。如果想将 MySocialApp 中的联系人对象粘贴到 YetAnotherSocialApp 怎么办?这种应用程序间的数据交换很重要。
一致的跨浏览器兼容 UI:创建 AJAX“对话框”、进度指示器、选项卡等都应该使用与框架的其余部分无缝连接的 API 来实现,就像上面讨论的客户端/服务器集成一样。哦,是的,它必须在所有浏览器上都一样(开发人员完全看不到浏览器的区别)。