论坛首页 Java企业应用论坛

我们公司新的架构设计

浏览 9019 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-03-28  
我们公司最近更改的架构。新架构有如下特点:
1. 前台用Extjs。
  1.1 定义好baseLayout, 所有Screen都从它继承。分为Search Screen, toolBar, content Screen.
    Manu在Screen或ToolBar里面。
  1.2 封装好Ajax Call。
  1.3 使用ScriptLoad Manager动态Load js 文件。
  1.4 Base Screen 定义了 OnEnter, OnBeforeEnter,OnLeave, OnBeforeLeave Event,然后
每个Screen重写他们。
  1.5 BaseScreen 里面有几个重要的Function:
   1.5.1 把response 解析, 放到当前Screen的每个Section中的每个Field。每个Section有自己的Store,但
   Screen Render 时用一个主要的Loader, 只有Section单独Reload时才用Section自己的Loader。(避免Section与Section之间数据有依赖关系,如果一个Screen有多个Section而有时要Reload 2个以上Section,单独处理)
    1.5.2 CheckReadOnly,和 ApplyReadOnly
   1.5.3 ApplyPermission (response data 中包含 每一个field的permission(不显示,只读,无限制))
   1.5.4 流程控制(包含对OnEnter, OnBeforeEnter,OnLeave, OnBeforeLeave Event 的调用)。
   1.5.5 自定义Events的使用:Screen 初始化时加Events到Section,由Section fire Events 时调用Screen的Function。(好处: 同一个Section可以重用,放到不同的Screen中)
(未完)
   发表时间:2010-03-28  
2. Spring Web Flow 的使用:

Flow 都是根据公司业务定义的, 没什么好说。头疼的是实现Flow 的 Resume。

3. Handler 的使用:定义了一个BaseHandler<T>, 里面有Service Method处理Extjs 的Ajax Call,因为Extjs 的Ajax Call 里面有key,通过key用Spring MVC 映射到对应的Handler. Handler<T>继承了BaseHandler<T>, 用反射在BaseHandler<T>里把Handler<T>的T转换成真正的Class,再调用JsonObject.toBean(),把Ajax Call送过来的Json String转换成Java Bean(T)。 然后VALIDATION, SERVICE AND 构建REponse。
  
0 请登录后投票
   发表时间:2010-03-28  
建议附上架构设计图,这样别人更容易看懂,可能还会提出适合你们的更好的方案!
0 请登录后投票
   发表时间:2010-03-28   最后修改:2010-03-28
写的也太抽象太空洞了,felixshao同学,如何将自己的设计讲述清楚,这个是程序员的基本技能要求哦。

既然你有分享出来的想法,就不要偷懒啦。
0 请登录后投票
   发表时间:2010-03-28  
看到EXTJS就感觉不是很好,使用css+div可以达到同样的效果,而不需要那么多的js
0 请登录后投票
   发表时间:2010-03-29  
同意楼上 至多用个JQUERY 不要EXTjs 傻瓜化的东西的另一面是约束性大
拒绝YUI extjs
0 请登录后投票
   发表时间:2010-03-29  
其实使用Extjs会减少很多代码。 首先,当你设计时必须把它想象成OO语言。第一步要把Class 图画出来, 把继承关系搞清楚。 例如我们有很多页面里都有Grid,因此我们有一个GeneralGrid Class 继承了GridPane,然后加了很多我们已经封装好的Function,自定义Events等。 具体每一个页面的Grid再继承GeneralGrid。
我想JQuery的功能Extjs里面都有了, 大家实现的东西不一样。
我不是偷懒,只是不上代码很难说清楚。 我想整理一下再放上来。
0 请登录后投票
   发表时间:2010-03-29  
4. Validation 的处理:
  Validation是一个难点。页面上每一个Field都有可能要Validate,至少查空。第一步要把Field与Domain Model中的POJO 做映射。具体实现是:每一个页面的Screen Section对应一个Java ScreenBean,Field 与 ScreenBean的属性对应, annotate ScreenBean的属性(映射Domain Model中的POJO)。
举例:
页面某一个Section显示地址的一部分:
City Name, Street Name


要建立一个ScreenBean:

package com;

public class CityAndStreetBean {

@modelProperty("Address.city")
private String CityName;
@modelProperty("Address.street")
private String StreetName;


public void setCityName(String cityName) {
CityName = cityName;
}
public String getCityName() {
return CityName;
}
public void setStreetName(String streetName) {
StreetName = streetName;
}
public String getStreetName() {
return StreetName;
}
}



Domain Model 里面有POJO
Address 有 以下属性
city,street,和Country  

映射就建立起来了。建立映射的目的:
举例:
当用户在页面输入城市为:北京
而Domain Model中Address的Country为美国,可认为用户城市选择错误。

每个Service定义好想要Validate的内容,通过AOP配成before advice,因此必须Validation成功才能调用Service,否则返回提示信息给用户。
0 请登录后投票
   发表时间:2010-03-29  
这也叫架构, 最多算个编程规范》。。。
0 请登录后投票
   发表时间:2010-03-29  
erikchang 写道
看到EXTJS就感觉不是很好,使用css+div可以达到同样的效果,而不需要那么多的js

显示效果没问题, 功能上有时候还真达不到...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics