您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 40利用元数据和RIA简化企业应用程序的开发
利用元数据和RIA简化企业应用程序的开发曹晓钢BEAUGGuangzhou,2006-3-12Agenda•MVC面临的用户体验困境•构件化界面组织-Qooxdoo•RichBrowser/Server所需的DataTransport•DataBinding与metadata的关系•DemoRequirment•Hibernate基础知识•MVC基础知识•Spring基础知识JavaWeb编程模型•Servlet规范–Request–Response–Session•JSP–本质上是servlet编译生成器MVC•Model–对应域模型•View–观察域模型的不同视角•Controller–真正进行对象操作MVC出现的背景•在JSP中混杂进行数据库编程•将数据准备与数据展现混杂在一起•将数据处理与结果展现混杂在一起•因为以上的混杂,无法有效的利用OO进行对象建模•Struts和WebWork解决了这两个主要的混杂问题MVC没有解决的问题•MVC模型仍然基于request/response,因此需要用多次交互才能完成一次“用户操作”–保存现场于session•反例:将Hibernatesession绑定到httpsession–使用continuation•仍然是低层协议,界面建构仍然留给程序员完成•界面建构时,客户端界面代码同时出现在客户端和服务器端新的web框架方向•Continuation解决交互不连贯问题•构件化界面开发–Tapestry–JSF–以上二者都仍然在服务器端进行界面建构–使用纯粹客户端控件进行界面建构–JavaScriptRIAJavaScriptRIA•基于IEbehaviour的控件封装•基于XAML/XUL的控件封装–zk•纯粹javascriptDHTML的控件封装–Bindows(付费授权)–Qooxdoo(开放源代码)•注意:JavascriptRIA在激烈演进中,仍然需要更多的时间等待其稳定Qooxdoo••OpenSource•跨浏览器平台–InternetExplorer=5.5–Mozilla=1.3–Firefox=1.0–Opera=8.0•有对应的实际公司(德国)•在实际工程中使用•仔细的进行过内存泄露测试,没有已知的泄露•开发活跃,基础设施较完善Qooxdoo•对象继承基础设施–QxNative–QxExtend•事件基础设施–QxEvent–Button.addEventListener(“click”,function(){xxx})–PropertyeventQooxdooLayout•CanvasLayout–使用横纵座标对控件绝对定位•BoxLayout–单方向堆叠式自动对齐控件•FlowLayout–对控件进行自动换行•DockLayout–在行列两个方向均可以自动堆叠•GridLayout–提供类似于HTMLTable的定位方式QooxdooAppearence•对CSS和Border的封装•引入State,分离用于表达控件状态的代码•引入Theme,用于切换外观主题•对字体的统一控制尚欠缺QooxdooWidget•Qooxdoo提供:–Atom–Button–Menu–Toolbar–Spin–combobox–Listview–Treeview–Tabcontrol–Window–...Qooxdoo控件扩展•实例:扩展listview的例子Qooxdootransport•AJAXenabled•Transports:–IFrame–xmlhttpgetRIA编程•MVC转移到客户端•通过AJAX与服务器端的MVC基础设施联系•用户在客户端使用javascript表达一个连贯的操作,逻辑前移–Onepage,oneoperation–客户端逻辑取代在服务器端的session/continuation•更好的分离界面逻辑与业务逻辑BrowserasaMACHINE?•Browser作为javascript语言运行的内存•HTTP作为数据访问协议•客户端Object与服务器端Object的映射?需要考虑的问题•界面元素的展现形式–每个界面元素对应于域模型的一个POJO–界面元素中的property和POJOproperty对应–是否需要在客户端了解property的属性?•Validation的需要•Format的需要•Query的需要–是否需要在客户端了解POJO之间的关联关系?•在多个界面中维护同一对象同一属性一致的外观和操作•在对象关联的时候,在界面中直接进行对象选择操作ClientSideMVC•Model层的Cache?•Model之间的reference•View的表述方式–XUL/XAML–DHTML–Widget在B/S之间传递数据•QxTransport•Buffalo(burlap协议)•JSON(自定协议json-rpc)•...•Buffalo和JSON使用的协议较详尽,适合作为B/Sremotecall使用•()MichaelChen的blog中有较完整说明•传输流程图Buffalo••MichaelChen(陈金洲)作品•在多个正式系统中使用•使用简洁明快•服务器端和spring方便的集成•使用burlap协议•尚缺乏timeout的支持•同步与异步切换的支持DataBind•如何把数据绑定到客户端控件•XMLDataIsland无法跨越浏览器•此领域尚未有标准方法•Bind后客户端控件重新渲染时,利用元数据进行格式化•对关联类型的绑定•Metadata是DataBind的最重要来源metadata•Entity所需的metadata–Property属性•Nullable•Identity•Length•Scale•Type–Entity之间的关联•JDBCResultSetmetadata中内容有限•Hibernatemetadata和Mappingconfiguration可以提供•model层的metadata在view层的表现形式–可能被override•SDO4JS?JavascriptRIAPros&Cons•Pros–可以直接调用springbean;–逻辑前移,客户端的MVC模型对应•Cons–框架在激烈的演进中,尚未稳定–DataBind需要特别关注–同步AJAXRPC与异步AJAXRPC的使用场景•Buffalo这点上尚需改进•异步AJAXRPC拓扑图•异步竞态问题Pros&Cons2–N+1问题:AJAXobjectlazyloading•注意:客户端无法使用Cache–AJAXQueryinterface•注意到服务器端可能不是数据库•QueryFetchPath强制指定–Javascript本身带来的问题•速度•内存泄露That’sAll,ThankYou•Aboutus:––满江红开放技术研究组织•OpenDoc–Hibernate开发指南–Spring开发指南–iBatis开发指南–WebWork开发指南–CruiseControl使用指南–ShifttoDynamic:Smalltalk–Java开发者的Continuation指南•Translations:–HibernateReference–LuntBuild手册–ScottAmbler:将对象映射到关系数据库:对象关系映射(ORMapping)详解–JBossCache–HibernateAnnotationsReference
本文标题:40利用元数据和RIA简化企业应用程序的开发
链接地址:https://www.777doc.com/doc-3550748 .html