医院网站建设目的,济南建设网中标公告,洛阳网站优化,珠海易注册app下载BPP项目 HT 部分完成小结#xff1a;
1、Action 类怎么写#xff1f; 现在的做法是Action 层直接与 dao 层耦合#xff0c;所有的功能都在 Action 类中完成。 缺点#xff1a;如果 Action1 与 Action2 两个类有部分功能重复#xff0c;在“避免重复代码”这样的原则下
1、Action 类怎么写 现在的做法是Action 层直接与 dao 层耦合所有的功能都在 Action 类中完成。 缺点如果 Action1 与 Action2 两个类有部分功能重复在“避免重复代码”这样的原则下 Action2 类会实例化一个 Action1 类然后调用其方法。这样就要求 Action1 的该方法为public 修饰这就与action 的方法是相同的修饰会使得该Action 类的功能提供的action混乱。这样显然不好而且所有的功能都在 Action 类中这样 public、private 的方法必然混在一起混乱不清 建议修改增加一个service 层。 Action 类的 public 方法全部为 action这样一眼就知道该 Action 类有哪些具体的action其内部实现细节交给 service。当然Action 类也是有一些私有方法——处理 field 域与页面间的参数传递。如 ManualInputWeightAction 的 initFirstManualInputParams( )方法 initContinueManualInputParams( ) 方法对于重复的功能重复使用service而不是Action。
注意这里的dao层不时 iBatis提供的dao 层而是和业务具体相关的操作。
优点方便测试 business 层的类因为可以很容易的 Mock 一个dao 类对象的操作。 建议如果 Action 类有多个action那么就不要使用默认的 execute( )方法。而是每个方法指明其功能好的方法名。 2、action 怎么配置 不要将所有的action 配置在一个package/里要根据不同的“功能模块”配置不同的package namespace/ 功能模块名 /。这样容易查找也可以避免命名冲突。“功能模块”的名称要尽早取也要与 Action类的包名保持一致。 3、怎么写与DB相关的测试 如果是直接构造数据然后插入DB。第一操作肯定是可以但是第二次呢这样做显然不适合单元测试。 如果采用每次测试前构造DB数据static 方式测试完后即清空。这样适合单元测试不过就是效率问题。 再则采用EasyMock 的方式。 4、怎么传递参数 阶段1获取jsp页面参数action 提供set方法添加如下注释 // from jsp params 阶段2action提供参数给jsp页面显示action提供get方法。添加如下注释 // show to jsp params 阶段1-2action提供get / set 方法。添加如下注释 // from jsp to jsp params 注意如果Action 类有太多的field 供jsp页面显示那就封装一个JavaBean避免Action 类太混乱。 5、查询数据部分注意效率 a、不要将全部数据都取出在计算或显示一定要缩小范围只取当前有用的最小集合。 b、能用select 语句完成的尽量用select 语句完成如SUM、MAX、MIN、AVG.... 6、多用户数据操作数据不一致问题
例如用户A 和用户B 同时对某条记录的
A修改-B修改 操作 用户B没看到用户A 的修改操作可能导致数据不一致
A修改-B删除 操作 安全
A删除-B删除 操作 安全
A删除-B修改 操作 一定错误应该给错误提示 7、action 与 business 的对应关系
多个action 对应一个business如下图。
优点明确参数的传递——哪个action需要哪些参数传递进来的或返回出去的
strut2框架下对应的 get / set 方法就会少。 8、缓存 sqlMapClient 时应注意的问题
BPP 项目中为了优化性能缓存了 sqlMapClient 对象根据 companyId 对应一个DB 的 schema。
但是这样存在一个隐藏的风险
1、当修改了 schema 链接用的用户名或密码使用缓存的 sqlMapClient 显然会出错。
2、删除了该 schema 但是又为该 companyId新建了一个对应的 schema使用缓存的 sqlMapClient 也错误。
解决办法使用缓存的 sqlMapClient 对象之前测试其有效性。有效就使用无效新建一个再使用。