小弟我们公司新的架构设计
我们公司新的架构设计
我们公司最近更改的架构。新架构有如下特点:
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中)
(未完)
显示效果没问题, 功能上有时候还真达不到...
我们是做产品的,100多号人干了10年,最近用Extjs把所有的页面重写,因为我们做企业应用,每个客户End user 不超过100 人。
这个验证在后台做,个人不太赞同。首先你需要反射把用户的输入数据转换为bean,然后判断。这样增加了很多服务器无需的负担
ExtJs提供的是一套前台的解决方案,例如GridPanel, selectionModel 等还允许任意override他的Class。
单独弄一个Bean出来而不能放在不能在真正的entity里是因为:
主要是方便,这个Bean不光是用来做Validation,接收request过来的数据,和返回Reponse时的数据都放里面了。再调用JsonObject 转换成Json String。跟Struts的FormBean是一样的。
我们公司最近更改的架构。新架构有如下特点:
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中)
(未完)
4 楼
erikchang
2010-03-28
看到EXTJS就感觉不是很好,使用css+div可以达到同样的效果,而不需要那么多的js
5 楼
qiren83
2010-03-29
同意楼上 至多用个JQUERY 不要EXTjs 傻瓜化的东西的另一面是约束性大
拒绝YUI extjs
拒绝YUI extjs
6 楼
felixshao
2010-03-29
其实使用Extjs会减少很多代码。 首先,当你设计时必须把它想象成OO语言。第一步要把Class 图画出来, 把继承关系搞清楚。 例如我们有很多页面里都有Grid,因此我们有一个GeneralGrid Class 继承了GridPane,然后加了很多我们已经封装好的Function,自定义Events等。 具体每一个页面的Grid再继承GeneralGrid。
我想JQuery的功能Extjs里面都有了, 大家实现的东西不一样。
我不是偷懒,只是不上代码很难说清楚。 我想整理一下再放上来。
我想JQuery的功能Extjs里面都有了, 大家实现的东西不一样。
我不是偷懒,只是不上代码很难说清楚。 我想整理一下再放上来。
7 楼
felixshao
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,否则返回提示信息给用户。
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,否则返回提示信息给用户。
8 楼
GRDJE
2010-03-29
这也叫架构, 最多算个编程规范》。。。
9 楼
mr.a
2010-03-29
erikchang 写道
看到EXTJS就感觉不是很好,使用css+div可以达到同样的效果,而不需要那么多的js
显示效果没问题, 功能上有时候还真达不到...
10 楼
lkj107
2010-03-29
多大的项目啊,用extjs
如果客户的浏览器是IE6,打开界面是需要时间的
如果客户的浏览器是IE6,打开界面是需要时间的
11 楼
fenxue
2010-03-29
这个你们编程规范约定
12 楼
felixshao
2010-03-29
Domain Model 的设计:
Domain Model分为两部份: 一部分叫Core Model,另一部分叫Extended Model,Core Model基本上就是一树状结构的Model, 因为是静态构建,所以没什么特别, Extended Model 是动态构建。
Core Model Extended Model
Parent
Child------------------ ExtendChild
GrandChild------------- ExtendGrandChild
Grand-GrandChild------- ExtendGrandGrandChild
chlid 与 ExtendedChild 是1 对 1 的 Primary Key Mapping。
GrandChild与 ExtendGrandChild 是1 对 1 的 Primary Key Mapping。
Grand-GrandChild与 ExtendGrandGrandChild是1 对 1 的 Primary Key Mapping。
Parent与 Child是1 对 多 的 Mapping。
Child与 GrandChild是1 对 多 的 Mapping。
GrandChild与 Grand-GrandChild是1 对 多 的 Mapping。
Extended Model 的所有Object都是动态读xml生成,然后再读另外一个配置文件Map到Core Model组成真正Domain Model。
具体实现用了EMF。
Domain Model分为两部份: 一部分叫Core Model,另一部分叫Extended Model,Core Model基本上就是一树状结构的Model, 因为是静态构建,所以没什么特别, Extended Model 是动态构建。
Core Model Extended Model
Parent
Child------------------ ExtendChild
GrandChild------------- ExtendGrandChild
Grand-GrandChild------- ExtendGrandGrandChild
chlid 与 ExtendedChild 是1 对 1 的 Primary Key Mapping。
GrandChild与 ExtendGrandChild 是1 对 1 的 Primary Key Mapping。
Grand-GrandChild与 ExtendGrandGrandChild是1 对 1 的 Primary Key Mapping。
Parent与 Child是1 对 多 的 Mapping。
Child与 GrandChild是1 对 多 的 Mapping。
GrandChild与 Grand-GrandChild是1 对 多 的 Mapping。
Extended Model 的所有Object都是动态读xml生成,然后再读另外一个配置文件Map到Core Model组成真正Domain Model。
具体实现用了EMF。
13 楼
felixshao
2010-03-29
lkj107 写道
多大的项目啊,用extjs
如果客户的浏览器是IE6,打开界面是需要时间的
如果客户的浏览器是IE6,打开界面是需要时间的
我们是做产品的,100多号人干了10年,最近用Extjs把所有的页面重写,因为我们做企业应用,每个客户End user 不超过100 人。
14 楼
li445970924
2010-03-29
这是架构设计么 怎么感觉像是在讨论extjs啊
15 楼
showr
2010-03-29
标题党
是在没看到什么架构的东西。。。
害我白高兴一场
是在没看到什么架构的东西。。。
害我白高兴一场
16 楼
mxdba321123
2010-03-29
ExtJs算是最“重”了吧,如果不是客户指定要用,那能不用就不用吧。类似的jquery完全可以代替,这个要看你们有没有比较好的前端人员了,傻瓜的同时意味的扩展性的降低。
还有那个validation,我不明白为什么要 单独弄出一个bean来,不能在真正的entity里,在需要验证的字段上加个annotation,然后在业务层,需要更新或者保存时用 反射 检验一下?
当然 如果使用了hibernate等 可以直接用他的validation
还有那个validation,我不明白为什么要 单独弄出一个bean来,不能在真正的entity里,在需要验证的字段上加个annotation,然后在业务层,需要更新或者保存时用 反射 检验一下?
当然 如果使用了hibernate等 可以直接用他的validation
17 楼
hommy8
2010-03-29
felixshao 写道
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,否则返回提示信息给用户。
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,否则返回提示信息给用户。
这个验证在后台做,个人不太赞同。首先你需要反射把用户的输入数据转换为bean,然后判断。这样增加了很多服务器无需的负担
18 楼
hommy8
2010-03-29
基本的验证完全可以在前台做啊。除非你需要用到数据库
19 楼
拥抱变化之美
2010-03-29
大家看看这个网站,是用extjs写的:
www.chess.com
(我的账号:wienee,欢迎大家加我为好友,切磋一下)
www.chess.com
(我的账号:wienee,欢迎大家加我为好友,切磋一下)
20 楼
michaelyn
2010-03-29
<div class="quote_title">mxdba321123 写道</div>
<div class="quote_div">ExtJs算是最“重”了吧,如果不是客户指定要用,那能不用就不用吧。类似的jquery完全可以代替,这个要看你们有没有比较好的前端人员了,傻瓜的同时意味的扩展性的降低。 <br><br>还有那个validation,我不明白为什么要 单独弄出一个bean来,不能在真正的entity里,在需要验证的字段上加个annotation,然后在业务层,需要更新或者保存时用 反射 检验一下? <br><br>当然 如果使用了hibernate等 可以直接用他的validation</div>
<p> </p>
<p>你说用extjs扩展性低,我是不是可以理解成:用js开发扩展性低?</p>
<p>我觉得应该从另外一个角度看,extjs是从js扩展出来的东西</p>
<div class="quote_div">ExtJs算是最“重”了吧,如果不是客户指定要用,那能不用就不用吧。类似的jquery完全可以代替,这个要看你们有没有比较好的前端人员了,傻瓜的同时意味的扩展性的降低。 <br><br>还有那个validation,我不明白为什么要 单独弄出一个bean来,不能在真正的entity里,在需要验证的字段上加个annotation,然后在业务层,需要更新或者保存时用 反射 检验一下? <br><br>当然 如果使用了hibernate等 可以直接用他的validation</div>
<p> </p>
<p>你说用extjs扩展性低,我是不是可以理解成:用js开发扩展性低?</p>
<p>我觉得应该从另外一个角度看,extjs是从js扩展出来的东西</p>
21 楼
michaelyn
2010-03-29
<div class="quote_title">qiren83 写道</div>
<div class="quote_div">同意楼上 至多用个JQUERY 不要EXTjs 傻瓜化的东西的另一面是约束性大 <br>拒绝YUI extjs </div>
<p> </p>
<p> 一个插件形式的东西,没看出exjs有什么约束,而且是基于js的,除非你用js觉得很约束。</p>
<div class="quote_div">同意楼上 至多用个JQUERY 不要EXTjs 傻瓜化的东西的另一面是约束性大 <br>拒绝YUI extjs </div>
<p> </p>
<p> 一个插件形式的东西,没看出exjs有什么约束,而且是基于js的,除非你用js觉得很约束。</p>
22 楼
felixshao
2010-03-29
mxdba321123 写道
ExtJs算是最“重”了吧,如果不是客户指定要用,那能不用就不用吧。类似的jquery完全可以代替,这个要看你们有没有比较好的前端人员了,傻瓜的同时意味的扩展性的降低。
还有那个validation,我不明白为什么要 单独弄出一个bean来,不能在真正的entity里,在需要验证的字段上加个annotation,然后在业务层,需要更新或者保存时用 反射 检验一下?
当然 如果使用了hibernate等 可以直接用他的validation
还有那个validation,我不明白为什么要 单独弄出一个bean来,不能在真正的entity里,在需要验证的字段上加个annotation,然后在业务层,需要更新或者保存时用 反射 检验一下?
当然 如果使用了hibernate等 可以直接用他的validation
ExtJs提供的是一套前台的解决方案,例如GridPanel, selectionModel 等还允许任意override他的Class。
单独弄一个Bean出来而不能放在不能在真正的entity里是因为:
主要是方便,这个Bean不光是用来做Validation,接收request过来的数据,和返回Reponse时的数据都放里面了。再调用JsonObject 转换成Json String。跟Struts的FormBean是一样的。
23 楼
kimmking
2010-03-29
感觉定下来的这些,其实是为了规范项目结构和约束开发。