关于applet
近年来,web的html技术框架一直是j2ee应用的主流,表示层技术有:struts,webwork,spring-mvc等。
从用户角度来说,这些view层技术提供的重点功能是:
1.完成用户状态的保持 (例:一个用户的登陆状态,购物车里的物品)
2.特别的,表单信息的保存(用户输入后,如果不成功,回退页面,必须显示原信息)
3.Validation机制
4.数据显示(使用model往view中拼装数据)
5.i18n等常见问题有较成熟的解决办法
程序员角度来说,这些技术提供了如下便利
1.流程控制有一个较为集中的配置文件。便于修改
2.mvc分离,有较为清晰的逻辑结构
3.有些框架的拦截机制等,可以集中一些通用逻辑。
但在实践中, web层的系统千篇一律,不够美观。在电信前台大量输单等应用中,实上也不够方便。web的优势是易于分发,统一管理,同时提出了很多良好的设计理念和框架模型
其实我们最早用delphi做c/s或者三层架构(加应用服务器)的时候,是多么如鱼得水,显示几个数据表,做几个master/detail,真的是手到擒来,拖拖拽拽而已。在web程序中费尽心力才能解决的难点,在application将化为无形。
但applet应用较少,关键在于:
客户浏览器不能直接支持(很可能需要装j2se),
没有很好的应用框架来减轻程序员的负担,我手头的gui工具也不够理想,开发需要对swing有较深理解。applet技术近四五年来一直停顿,基本没有什么成熟组件的支持,没有现成框架,没有开源tag,没有css/javascript支持,开发效率可能不高。
目前基本框架设计如下:
DB : 数据库
Dao: 使用hibernate实现的瘦Dao
Service: Spring管理的业务外观,实现事务粒度,Dao被注射
Module: Service 将 Dao实例注射到Module,这里将完成业务逻辑。
Dispatcher 位于logic,是service的一个分发器,采用反射机制,自动调用service对应的方法
Servlet 负责和applet通信,通过Dispatcher 调用业务逻辑
Applet view的实现
特别:
1.Dao的实现
在上一个项目中,我为每个实体类都作了一个Dao,但hibernate使得dao实现非常简单一致,在代码中事实上就导致了大量非常类似的贫血Dao实现。所以这次准备只做一个Dao接口,通用于各种实体类,虽然不够清晰,但结合hibernate的强大应是可行的。
2. Servlet和applet的通信,采用ObjectStream方式,简单省力,将完成一个专用的容器类,同时注意,applet中将直接使用domain对象。
3. 最后可在server端预留webwork环境备用
关于Applet技术:
1. 所有的业务逻辑通过ServletClient访问。
2. 所有的资源(图片,声音,文件)从 Resource获得,内部采用getResource();
3. i18n问题采用resoucbundle,通过I18N转换(这里不知道有否更好办法)
4. 外观和风格用Sun的标准,暂不另加
5. 报表技术采用freeReport,拟用反射技术实现运行期报表,其余采用simpleXml格式完成报表设计。
6. freeReport同时解决了数据输出问题(pdf,xls等);
7. 所有相关jar需要做applet签名以获得本地操作权限
效果示例: