如何降低页面的复杂性,如何降低页面的代码量,如何减少
JSP
页面烦人的
<IF><ELSE>
标签。方法之一就是用好
ViewObject
。
在我所在接触过的系统中,我曾经看到过全能的
ViewObject
。数据持久化需要他,业务逻辑需要他、页面展示需要他。以至于造成以下情况:
1
、视图层代码复杂,既有持久化层的逻辑,又有业务逻辑层的逻辑、还有展示层的逻辑。
2
、
事务从服务层蔓延到视图层。对于
ViewObject
的修改,会直接影响到数据库。
3
、代码的维护量特别大,不敢进行重构。一旦有需求,只敢增加代码,却不敢对原有代码进行改善。
4
、代码无法重用。如果一个
Widget
在不同的页面上出现多次,视图层的代码也要对应复制多次。
这些严重制约的系统的发展。所以需要精心设计
ViewObject
供网页使用。
如何设计一个好的
ViewObject
。
1
、引入工厂,
ViewObject
通过收集
UI
上的各种表单元素,
VIewObject
了解顾客使用了哪些支付方式,支付多少金额等等情况,所以所可以生成各种业务逻辑对象。这好比工厂拥有各种原材料,通过一定的工艺、程序,就可以产出各种东西。
ViewObject
也是如此。
比如
UI
有网银支付,积分支付,代金券三种支付方式,顾客可以进行组合支付。系统将会跟会根据支付结果,生成相应支付记录。那么我们怎么写支付
ViewObject
呢?
代码如下
:
public class PaymentViewObject {
private boolean onlineBank;
private double amount;
private boolean point;
private double points;
private boolean voucher;
private String voucherNo;
public PayRecord createOnlineBanckRecord(){
PayRecord record = new PayRecord();
record.setType(Payment.Onlinebank);
record.setAmount(amount);
return record;
}
/**
* 至少有一个支付
*/
public isValidPayment(){
return onlineBank || point || voucher
}
public boolean hasEnoughPoints(int pointsHad){
if (pointsHad == 0) return false;
return points <pointsHad;
}
public PayRecord createPointRecord(){
PayRecord record = new PayRecord();
record.setType(Payment.Point);
record.setPoints(points);
return record;
}
public PayRecord createVoucherRecord(){
PayRecord record = new PayRecord();
record.setType(Payment.Vourcher);
record.setVourcherNo(voucherNo);
return record;
}
public List<PayRecord> createPayRecordes(){
List<PayRecord> records = new ArrayList<PayRecord>();
if(points){
records.add(createPointRecord());
}
if(onlineBank){
records.add(createOnlineBanckRecord());
}
if(voucher){
records.add(createVoucherRecord());
}
return records;
}
}
这样,视图层的代码复杂对大大降低,可维护性提高。
2
、分析页面上相似的
Widget
,分析差异,再设
计出
viewObject
。
电子商务后台中,最常看到的元素的是订单项。但是在订单预定流程、订单修改流程、订单确认流程,订单项表现形式有点差异:比如
订单预定流程(单项,价格,配额)
订购修改流程(单项,总价,实际占用配额)
订单确认流程(单项,确认时间,确认人)
经过分析,我们就抽取出
OrderItemVIewObject
,并创建一个
OrderItemViewObjectFactory,
生成各种
VO
综上所述,可以采用如下方法指导
ViewObject
的编写。
1
、引入
Factory
,常见创建各种
VO
。
2
、在
VO
添加
FactoryMethod
创建
DomainObject
。
3
、把部分逻辑写入
VO
,减少视图层的代码复杂度。
分享到:
相关推荐
该系统包含复杂的电路设计,如放大电路、反馈电路和整流电路,是维修的关键环节。 3. Formatter System(接口系统) 接口系统作为打印机与计算机之间的桥梁,接收并翻译计算机发送的数据,使之适应直流控制系统。...
浅淡测试自动化,用IE打开。
PCB(印刷电路板)是现代电子设备中不可或缺的组成部分,随着电子信息产业的发展,PCB的设计和制造技术也在不断进步。在多层线路板生产中,层间对位精度是一个关键因素,它直接影响到产品的最终质量和性能。层间对位...
浅淡食品安全论文.doc
浅淡食品安全毕业论文.doc
"浅淡C语言实践教学改革" 本文主要讨论C语言实践教学改革的重要性和必要性。C语言是一门实践性很强的课程,它不但可以编写系统解决问题、分析问题和自学等能力的培养。然而,C语言的数据类型较多、表达式丰富、语法...
浅淡网络时代的信息安全.docx
4. **小组互助,共学共进**:采用课程设计的形式,以小组为单位完成任务,任务难度逐渐升级,涉及多门课程知识,这样有助于培养学生的团队协作和综合应用能力。 【总结与展望】 中职计算机教学的改进是一个持续的...
浅淡数列中的分类讨论问题.doc
浅淡班级的民主化管理模式.doc
浅淡CorelDRAW课程的教学改革与实践
浅淡我对运维服务的一些看法.doc
浅淡中学生创新能力的培养发布时间.doc
浅淡大班幼儿阅读特点与指导策略.doc
浅淡中国新能源汽车发展之路.pdf
浅淡电商直播对经济及消费的影响
浅淡我国水泥市场的服务营销策略分析.doc