`
likebean
  • 浏览: 18204 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

基于组件的Web框架,始终是个传说...

阅读更多

很多框架,都在B/S架构下,企图实现Delphi/VB/Swing风格的基于组件式的编程模型,确实,基于组件/事件的编程模型最符合我们的思维习惯,一切自然的东西都会给人带来美感和舒适的,自然的扩展性。

 

比如一个列表页面,当填完查询条件点‘查询’按钮时,最自然的写法是

 public onSubmitButtonClick() {

       //从inputField组件获得用户输入的值
       String fieldValue = inputFieldComponent.getValue();
       //调用业务逻辑层获取查询结果
       List queryResult = service.query(fieldValue);
       //将查询结果组装到listView组件
       listViewComponent.setData(queryResult);

}


你在处理按钮的响应事件时可以很专注,你的脑海中有一个页面在哪里,然后一个按钮被点击了,你所做的仅仅是处理这个点击请求。

但是,在B/S下,这是一种臆想。点查询按钮其实是一次浏览器请求提交,你的事件处理代码只是request处理漫漫长路中的一部分,你得考虑最终的响应页面是如何形成的。

在B/S下,如果你从组件式的思路出发,你想不明白浏览器刷新算是怎么一回事,是获取服务器端的组件的最新状态?也不是,当用户刷新浏览器时,他显然希望在listView中能看到最新的业务数据。

同时,你还得考虑listViewComponent的setData会引起什么后果,可能导致服务器端内存爆炸。

所以,在上面的例子中,你的代码不得不写成:

page.addListView(new ListView() {
      //定义listView如何获取数据
      public List getData() {
         String fieldValue = inputFieldComponent.getValue();
         return service.query(fieldValue);      
      }

});

 

是不是已经觉得很不自然了。

在基于组件的自然的思路中,UI组件应该是有状态的,是有形状的(谈到形状也要叹口气,b/s下组件的形状是什么?不知道,一个label可能有几十种不同的html对应写法),是可以响应事件的,而且,我们不会考虑浏览器刷新/回退等这些程序无法预知的,也无法捕捉到的用户事件。

所以,一切基于组件的web框架,到最后都沦为东施效颦式的复杂和丑陋,JSF/wicket/tapestry/click...【属个人观点,没有任何攻击意味】。

所以,还不如不要讲组件,单纯的MVC,springMVC/struts...说明白了,也许更简单些。

 

本文也作为 非常诱人的web层框架Itsnat(一) 的续篇和结篇,想对Jose Maria Arranz【itsnat的作者,大佬,很尊敬您的创新】说抱歉,在经历对基于组件的web框架的一次一次希望到失望后,我决定很长一段时间内不再关注类似框架,改而期待B/S的革命性创新,GWT算是一种革命(但目前使用起来问题多多,前面也有所提及),comet也许是,希望有类似的大变革出现。

 

分享到:
评论

相关推荐

    H5小游戏源码 中秋传说.zip

    《中秋传说》是一款基于H5技术开发的小游戏源码,其设计和编程充分展示了H5在游戏开发领域的应用。H5(HTML5)是超文本标记语言HTML的第五个版本,它不仅增强了网页的交互性,还引入了大量新的功能和API,使得开发者...

    微信HTML5在线朋友圈游戏源码带安装部署教程-中秋传说.rar

    2. **JavaScript框架**:可能使用了如React、Vue或Angular等框架进行状态管理和组件化开发。 3. **动画效果**:CSS3动画或者用JavaScript实现的游戏动画效果。 4. **事件监听**:监听用户在屏幕上的触摸或点击事件,...

    基于SSM的泉水文化管理系统源码.zip

    【标题】"基于SSM的泉水文化管理系统源码"是一个典型的Java Web开发项目,它采用Spring、Spring MVC和MyBatis(简称SSM)三大框架构建。这些框架是Java领域中广泛使用的开源技术,用于构建高效、灵活的企业级应用...

    传说中的投票系统

    综上所述,“传说中的投票系统”是一个基于Eclipse开发的Web应用,使用Java作为后端语言,并且有完善的测试结构。通过深入研究这个项目,开发者可以提升自己的技能,了解实际项目中的开发流程和技术选型。

    framework:这是亚瑟框架的核心

    亚瑟框架(Arthur Framework)是一个基于PHP开发的MVC(Model-View-Controller)架构的框架,其核心设计思想是分离业务逻辑、数据处理和用户界面,以提高代码的可维护性和可扩展性。框架的命名可能来源于传说中的...

    Vaadin 开发资料

    Vaadin是一款基于Java的开源框架,专用于构建富互联网应用程序(Rich Internet Applications,RIA)。它由芬兰的IT Mill公司开发,起初名为IT Mill Toolkit,后来在2009年更名为Vaadin,取自芬兰民间传说中的神话...

    asp.net--asp--PHP上传说下载资源

    ASP.NET是微软推出的一种用于构建Web应用程序的框架,它基于.NET Framework,提供了丰富的功能和高效性能。ASP.NET支持多种编程语言,如C#、VB.NET等,可以方便地创建动态网页和Web服务。在上传和下载功能中,ASP...

    hs-clone:在vue.js中重制炉石

    在当今的Web开发领域,JavaScript框架的使用日益普及,Vue.js作为一款轻量级、易上手的前端框架,深受开发者喜爱。本项目“hs-clone”旨在利用Vue.js来重制经典游戏——炉石传说的部分功能,从而帮助开发者学习和...

    NETCTOSS项目

    "NETCTOSS项目"是一个基于.NET技术栈的软件开发项目,从描述中的"通天塔 代码"我们可以推测,这个项目可能涉及到构建一个大型、复杂的系统,寓意着项目目标之高,就像古时传说中的通天之塔。在.NET框架下,开发者...

    springboot甘肃非物质文化网站的设计与开发.zip

    本文将深入探讨如何利用先进的Web技术,特别是SpringBoot框架,来设计和开发一个专门展示甘肃非物质文化的网站。SpringBoot以其便捷的起步、自动配置以及丰富的生态,成为构建高效、稳定和易维护的Web应用的理想选择...

    基于c#开发的汉诺塔游戏+支持自动演示rar

    汉诺塔游戏是一种经典的逻辑谜题,源自印度的古老传说,目标是将一叠盘子从一根柱子移动到另一根柱子,遵循每次只能移动一个盘子且大盘子不能位于小盘子之上的规则。在本项目中,基于C#语言在Visual Studio 2017环境...

    黑色一条龙网站程序

    "黑色一条龙网站程序"是一个专为网站开发设计的全套解决方案,通常包含了一系列相互关联和集成的组件,旨在帮助用户快速构建并管理一个完整的网站。这个程序的名称可能来源于其提供了从设计、开发到运维的全链条服务...

    JQueryGanttEditor

    **jQueryGanttEditor**是一款基于jQuery的开源项目,主要用于创建和编辑甘特图。这个工具提供了丰富的功能,便于用户在Web应用中展示项目的时间线、任务进度和依赖关系。通过提供的源码,开发者可以深入了解其工作...

    dubbo-admin-2.5.4.war

    "**dubbo控制台**":即dubbo-admin,它是Dubbo生态系统中的一个重要组件,通过Web界面为开发者提供服务的可视化管理。 【压缩包子文件的文件名称列表】"incubator-dubbo-master":这可能是指Apache Dubbo项目在...

    Laravel开发-laravel

    Laravel是一款基于PHP的开源框架,它以其优雅的语法和强大的功能深受开发者喜爱。"Laravel开发-laravel"这个标题暗示我们将深入探讨Laravel 5版本的开发实践,特别是其在构建应用程序时的角色和优势。 Laravel 5是...

    java 拍照 截取图片

    在Java编程环境中,实现“拍照”和“截取图片”的功能涉及到多个技术层面,包括Web应用、设备访问、图像处理等。以下将详细介绍这些知识点: 1. **Java Web 应用**: Java Web应用程序是基于Java技术构建的,可以...

    HTTP服务器(vc)

    使用VC++开发的HTTP服务器程序通常基于MFC(Microsoft Foundation Classes),这是一个C++库,提供了Windows应用程序开发的框架。 MFC库为开发者提供了许多方便的功能,包括窗口、控件、网络和数据库访问等,使得...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 做一个最简答web框架 05 MVC模式和MTV模式 06 django的一个简单应用 07 django静态文件之static 08 django的url控制系统 09 django的urlConf补充 第50章 01 django之视图函数的介绍 02 django视图之redirec 03 ...

    zelda-vue:zelda项目的前端

    "塞尔达"项目可能是一个以游戏《塞尔达传说》为主题,或者与之相关的Web应用。无论其具体功能为何,前端设计和实现都需要考虑到性能、响应式布局、用户体验等因素。Vue.js的组件化结构使得这些需求得以满足,它允许...

Global site tag (gtag.js) - Google Analytics