??xml version="1.0" encoding="utf-8" standalone="yes"?>
Ҏ(gu)一: 使用标准?/SPAN>JDBC对象完成数据操作.
Dorado提供了一个工L(fng)Q?/SPAN>com.bstek.dorado.common.TransactionManagerQ该cL供一个静态方法:(x)
获取与指定的上下?/SPAN>(DoradoContext)相关的事务对?/SPAN>.
q样我们得到一个默认的处理事务对象Q通过该事务对象提供的Ҏ(gu)Q?/SPAN>
获取一个与本事务相关的ConnectionQ自定义的更新就通过q个Connection对象处理Q最后系l会(x)自动理整个事务?/SPAN>
代码CZ:
注意 |
?/SPAN>Connection 对象Q你可以执行close操作Q但是不允许执行commit?/SPAN>rollback操作。因?/SPAN>commit?/SPAN>rollback操作在pȝ所有更新完成之后才允许q行, commit?/SPAN>rollback操作是由Transaction对象理的?/SPAN> 即(zhn)在Transaction执行commit之前?/SPAN>Connection执行?/SPAN>close操作也不?x)媄响到你在?/SPAN>Connection上所作得数据修改. (zhn)不必担心由于提前关闭了Connection而导致所作的数据修改q了事?/SPAN>. |
Ҏ(gu)?/SPAN>: 使用标准?/SPAN>dorado?/SPAN>Dataset?/SPAN>DBStatement对象完成数据操作.
除了使用上面的方法之?/SPAN>, 我们q可以?/SPAN>dorado中提供的Dataset?/SPAN>DBStatement对象完成数据操作. q种做法优点在于:
1. 可直接集?/SPAN>Context中的当前事务, 代码量小.
2. 支持命名参数, 使用方便.
使用SqlDatasetd记录的代码示?/SPAN>:
使用DBStatement对象的代码示?/SPAN>:
以下的说明基于利?/FONT>Dorado?/SPAN>MVC框架的基本开发方?/SPAN>:
1. Request(h)Q?/SPAN> ?/SPAN>Client?/SPAN>(览?/SPAN>)发vh?/SPAN>, 改请求将首先?/SPAN>Dorado的控制层(Mapping)接受.
2. Dispatch(分发): 控制层会(x)跟据用户的配|决定激zd一?/SPAN>Action.
3. Forward(转向): 商业逻辑执行完成?/SPAN>Action根据商业逻辑的执行结果将Request转向l具体的视图(ViewModel). 具体的{向方式由Action的用户配|信息决?/SPAN>.
4. Extract(提取): 视图(ViewModel)被激zd?x)通过其中?/SPAN>Dataset对象?/SPAN>Module中提取业务数?/SPAN>. 同时视图也会(x)Ҏ(gu)配置信息自动创徏各种可视化的控g用于展现提取到的业务数据.
5. Response(反馈): 视图?/SPAN>Server端准备工作完成后?x)自动将各种信息输出?/SPAN>Response对象中反馈给Client?/SPAN>.
注意 |
上图中以虚线标出?/SPAN>dorado?/SPAN>MVC架构与传l?/SPAN>MVC的不同点. q种不同主要是由dorado强大?/SPAN>Client带来?/SPAN>. 1. ׃dorado?/SPAN>Client不再以传l的HTML FORM作ؓ(f)?/SPAN>Server交互的途径, 而是?/SPAN>XML替代. XML所能构承蝲的信息量和复杂度q远高于HTML FORM. 所以在dorado的开发模式中往往不在Action中直接调用业务逻辑, 而是{到ViewModel?/SPAN>Module这?/SPAN>XML解析成对象后再调用业务逻辑. 2. dorado?/SPAN>Client中除了有普通的cMFORM提交的操作之?/SPAN>, q存在着一U数据请求操?/SPAN>. 例如在不h面的情况下下蝲数据集的分页信息、远E方法调用等. q种h与普通的提交的操作的处理方式有着很大的不?/SPAN>, 也同样难以通过Actionq行l一的处?/SPAN>. 而且利用dorado?/SPAN>MVC开发方式却可以很好解决q一问题. 以上变化, l过锐道公司extra?/SPAN>dorado两代产品的数十家不同cd、层ơ的开发的实践证明是完全可?/SPAN>, 且对pȝ的扩展性、复用性、安全性完全无害的. |
上图解释了数据如何通过各个功能层从数据库中转换到可是化控g中的q程. 1. ViewMode用于定义一个视囄模型Q包括数据模型(DatasetQ和可视化组ӞControlQ的模型?/SPAN>Dataset是一U用于ؓ(f)Client服务的二l数据表?/SPAN>Control可以l定?/SPAN>DatasetQ用于展C和操作Dataset中管理的数据?/SPAN> 2. DatasetRefrence是一U对Module?/SPAN>Dataset的引用,用于使用ViewModel之外的其它的Dataset的数据?/SPAN> 3. Module一般用于描qCl相关的商业逻辑或作为后台的商业逻辑的前端(商业逻辑前端也称为:(x)BusinessDelegateQ?/SPAN>Module可通过Dataset的事件来?/SPAN>Client?/SPAN>Dataset中数据的操作译成真正的业务逻辑操作?/SPAN> 4. 在默认模式下Q用户可通过SQLq行数据库操作,此时用户可利?/SPAN>Module中的Dataset对象直接Ҏ(gu)据库q行操作?/SPAN>
l Dorado Web UI控g集及UI引擎Q?/SPAN>Dorado Web UI Components and UI EngineQ?/FONT>
n 包含各种常用的界面控Ӟ?/FONT>:可编辑的表格、树(wi)、下拉框{?/SPAN>, 可轻松构造出令h耳目一新的Q具?/SPAN>RIA(Rich Internet Application) 特征?/SPAN>Web应用界面?/FONT>
n 无需下蝲安装M览器插?/FONT>, 卌实现cMC/S应用的界面风格和操作?fn)惯Q根?/SPAN>B/S应用难以满用户体验的顽症?/FONT>
n 可扩展的UI数据?/SPAN>, 可快速地与各U第三方的开发框架或应用整合.
n 独树(wi)一帜的Client?/SPAN> / Server端事件编E机?/SPAN>, 充分保证Web界面的扩展性和灉|性?/FONT>
n 利用XMLHttp技术实现数据交?/SPAN>, 可大大降?/SPAN>Web面的刷新频率?/FONT>
n 支持皮肤切换?/FONT>
l Dorado可视化集成开发工?/SPAN> Q?/SPAN>Dorado StudioQ?/FONT>
n 全面支持ZDorado套g开发的各个环节的可视化配置、管?/SPAN>. 如界面设计、可视化数据q接配置、可视化数据层定义、可视化控制层配|、国际化资源配置{?/FONT>
n ?/FONT>Web应用以项目方式管理,同时可以完成寚w目的~译、部|Ӏ测试的全过E?/FONT>
n 提供多种向导帮助用户快速上手?/FONT>
n 支持Java?/SPAN>JavaScript?/SPAN>XML?/SPAN>HTML?/SPAN>SQL的高亮编辑?/FONT>
n 支持Ҏ(gu)据视图进行预览同时提供可视化?/FONT>SQL的查询向对{?/FONT>
l Dorado MVC开发框?/SPAN> Q?/SPAN>Dorado MVC FrameworkQ?/FONT>
n 提供cMStruts?/SPAN>MVC开发框?/SPAN>, 以便于更加方便地利用Dorado套gq行ZMVC架构的开发?/FONT>
n 提供性能监控控制?/FONT>, 可方便的对系l运行过E中各功能点的运行效率进行统计和分析?/FONT>
n 支持国际化资源配|?/FONT>
n 支持模块化配|?/FONT>
n (?/SPAN>: Dorado MVC开发框架是一个可选g?/SPAN>Dorado套g完全支持其它的各U第三方开发框?/SPAN>, ?/SPAN>Struts?/SPAN>WebWork{?/SPAN>)
l Dorado Web应用框架 Q?/SPAN>Dorado Web Application FrameworkQ?/FONT>
n 可方便对Web应用的登录状态进行管?/SPAN>. 快速实现整个应用的d状态校验功能?/FONT>
n Z角色?/FONT>Web界面配置, 可方便的支持Z同角色的用户提供有区别的Web界面?/FONT>
n 提供一套完整的支持角色、权限组的权限的实现. 包括默认数据库结构、相应的实现代码、维护界面。同时也可以通过扩展支持用户数据库结?/SPAN>(暂未提供)?/FONT>
n 提供一套登录画面、主面{的模版和相应后台管理界?/FONT>. (暂未提供)?/FONT>
l Z么一定要有这L(fng)差异存在?
l q种差异在多大的程度上影响我们企业原有的系l或开发框?/SPAN>(开发规?/SPAN>)?
l q种差异在多大的程度上影响E序员原有的~程?fn)?/SPAN>?
l Dorado的开发方式是否拥有够的健壮性、够的扩展?/SPAN>?
Z深入的解{上q这些问?/SPAN>, 我们首先来了解一下传l的MVC开发模?/SPAN>. 如下?/SPAN>(此处?/SPAN>Control以目前最为流行的StrutsZ):
图表 传统的基?/SPAN>MVC架构开发模?/SPAN>
1. Request(h)Q?/SPAN> ?/SPAN>Client?/SPAN>(览?/SPAN>)发vh?/SPAN>, 改请求将首先被控制层(Struts?/SPAN>Action)接受.
2. Dispatch(分发): Action调用具体的Model中的BO对象来完成实际的业务逻辑操作, 然后执行结果存贮于Request?/SPAN>Attributies?/SPAN>. (一般惯例是q样?/SPAN>)
3. Forward(转向): 商业逻辑执行完成?/SPAN>Action根据商业逻辑的执行结果将Request转向l具体的视图(JSP).
4. Extract(提取): 一般而言JSP不会(x)ȝ接访?/SPAN>Model?/SPAN>, 而是直接?/SPAN>Request?/SPAN>Attributies中提取已l在W?/SPAN>2歩存攑֥的业务数?/SPAN>.
5. Response(反馈): 视图?/SPAN>Server端准备工作完成后?x)自动将各种信息输出?/SPAN>Response对象中反馈给Client?/SPAN>.
从上面的分析我们不难看到在这U开发模式中, 业务逻辑主要都是?/SPAN>Action中完成调用的, 然后通过Request?/SPAN>Attributies作ؓ(f)上下文对象在Action?/SPAN>JSP之间传递信?/SPAN>.
那么Zdorado的开发是否也可以按照q种方式来操作呢? {案是可?/SPAN>, 但是dorado中某些高U功能会(x)受到一些媄?/SPAN>.
因ؓ(f)在传l的B/S应用?/SPAN>, Client?/SPAN>Server端的交互完全是通过HTML FORM来完?/SPAN>. 而且每次执行完一个业务逻辑操作之后往往?x)刷新整?/SPAN>Client面, 卌同操作结果和HTML一起下载ƈ重新装蝲整个Client面. 可是?/SPAN>dorado?/SPAN>Client中我们可以实现很多类似页面局部刷新、数据分批下载、远E方法调用、复杂数据对象的整体提交q样的功?/SPAN>. q些功能的实C能完全依赖于传统?/SPAN>HTML FORM的提交来完成, 而是需要依靠浏览器?/SPAN>XMLHTTP技?/SPAN>.
提示 |
上面提到的dorado中的面局部刷新、数据分批下载、远E方法调用、复杂数据对象的整体提交{功能?zhn)可以通过dorado的SampleCenter中的下面一个例子来体验.
|
l 在传l的B/S应用?/SPAN>Server端的E序只需要处理一U?/SPAN>Clienth, x行逻辑然后q回视图, 且要处理?/SPAN>Clienth的参数类型都是类同的.
l ?/SPAN>dorado应用?/SPAN>Server端的E序需要处理至两U?/SPAN>Clienth. 其中一U是单的cM传统B/S应用的请?/SPAN>, 另一U是dorado独具的用于处理类似数据分批下载和复杂数据提交的请?/SPAN>, q一c请求都是通过XMLHTTP技术提交的, 其参C息都包含在一D?/SPAN>XML?/SPAN>. 且这一c请求的反馈l果必须同样?/SPAN>XML格式?/SPAN>, 其中只包含数据和执行l果, 不能包含HTML信息.
q样一来我们便很难所有的h的处理代码一概放?/SPAN>Action中完?/SPAN>. 因ؓ(f)对于dorado应用, 其中的部分请求的参数是相Ҏ(gu)较复杂的XML. 所以ؓ(f)了避免自己手工的去解析和l装XML, 我们应当把这U请求的业务逻辑调用攑ֈdorado?/SPAN>Module或着ViewModel?/SPAN>, ?/SPAN>dorado来帮我们完成J琐?/SPAN>XML信息处理, 我们只要直接使用通过解析获得?/SPAN>Java对象型的数据可以了.
那么q种方式是否意味着原本集中在Action中的业务逻辑调用被分散到了几个不同的环节, 造成pȝ中业务逻辑的分散而不易管理呢? 应该说只要我们对pȝE作调整可以避免这个问题的出现??我们需要引入业务代表层(BO Delegate).
图表 原有的系l调?/SPAN>BO的模?/SPAN>
如上图所C?/SPAN>, 在原有的pȝ中我们一般首先会(x)?/SPAN>Action中将Request中附带的Parameter{信息提供给BO Delegate, ?/SPAN>BO Delegate其l装成一个或几个VO(Value Object)对象, 或者直接?/SPAN>Struts提供?/SPAN>FormBean对象作ؓ(f)VO对象. 然后再利用这?/SPAN>VO对象去调用自q业务逻辑对象. 对于BO而言, 他的前端介面是VO.
注意 |
在?zhn)的系l有可能q没有明的定义BO Delegateq种对象, 可它事实上往往是存在的. 除非(zhn)的pȝ中直接将Request对象传进?/SPAN>BO?/SPAN>. 如果是这L(fng)?/SPAN>, 我们认ؓ(f)你的pȝ原本也属于应q行重构的范?/SPAN>. 因ؓ(f)q样?/SPAN>BO层与Requestq行了不必要的耦合, 大大降低了系l的可扩展?/SPAN>. 且这L(fng)BO是无法支持单元测?/SPAN>(试驱动开发的)?/SPAN>. |
图表 攚w后pȝ调用BO的模?/SPAN>
如上图所C?/SPAN>, ?/SPAN>Action接到XMLHTTP发送的h时会(x)处理{交给dorado中的Module?/SPAN>ViewModel对象来处?/SPAN>, ׃们首先来完成?/SPAN>XML提交信息的解?/SPAN>. 而后再利?/SPAN>BO Delegate这些信息组装成BO所需要的VO对象. q样, 我们事实上几乎不需要对BO层做什么改动就可以?/SPAN>dorado导入到系l中?/SPAN>. 而且很明显这L(fng)调整是不?x)媄响到整个pȝ的扩展性的.
从另外一个简单的角度来看q个问题, 事实上就是在新的pȝ架构中我们保留整?/SPAN>Model层的设计, ?/SPAN>dorado来替换原先的View?/SPAN>. 然后?/SPAN>Model层和dorado?/SPAN>View层直接通过一l特别定义的交互接口来实现对?/SPAN>. Ҏ(gu)时?/SPAN>VO作ؓ(f)数据交换对象. 同时dorado又特别提供了DODataset?/SPAN>DOUtils{对象和工具cd以辅助我们更加方便的构造和溶解各种cd?/SPAN>VO对象. 因此你大可不必ؓ(f)整合dorado而大伤脑{?/SPAN>, 管他需要我们适当的调整原有的开发习(fn)?/SPAN>, 但是dorado带给我们的其它好处是显而易见的.