BPP 相关——02

BPP项目 HT 部分完成小结:

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

阶段2,action提供参数给jsp页面显示,action提供get方法。添加如下注释:

// show to jsp params

阶段1-2,action提供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 对象之前,测试其有效性。有效,就使用;无效,新建一个再使用。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scrapy读取mysql数据库_python3实战scrapy获取数据保存至MySQL数据库

python3使用scrapy获取数据然后保存至MySQL数据库&#xff0c;我上一篇写了如何爬取数据保存为csv文件&#xff0c;这一篇将会写如何将数据保存至数据库。思路大都一样&#xff0c;我列一个思路&#xff1a;1&#xff1a;获取腾讯招聘网。2&#xff1a;筛选信息获取我们想要的。…

共享单车技术含量,一篇文章全说透了!

来源&#xff1a;物联网智库 概要&#xff1a;共享单车已经成为了中国新四大发明之一&#xff0c;被输往了世界上很多城市。 共享单车已经成为了中国新四大发明之一&#xff0c;被输往了世界上很多城市。在我看来&#xff0c;虽然共享单车的实现并不复杂&#xff0c;其实质是一…

PostgreSQL 分页——示例

SQL 语句 select * from ( select * from logizard.t04_case_dtl_wk where slip_id order100~1~l001 order by case_id ) as T04 limit 5 offset 0 ;结果图

人工智能企业自动化的关键现状和战略影响

来源&#xff1a;腾股创投&#xff08;微信ID: tengguvc&#xff09; 人工智能和机器学习在亚马逊 Alexa 等面向消费者的应用领域取得了长足的进步&#xff0c;在企业内的的部署也不断涌现。 关于 AI 自动化对企业的影响范围和影响程度的意见不一。 一方面&#xff0c;牛津大学…

mysql 递归查询树型结构_MySQL递归查询所有子节点,树形结构查询

--表结构CREATE TABLE address (id int(11) NOT NULL AUTO_INCREMENT,code_value varchar(32) DEFAULT NULL COMMENT ‘区域编码‘,name varchar(128) DEFAULT NULL COMMENT ‘区域名称‘,remark varchar(128) DEFAULT NULL COMMENT ‘说明‘,pid varchar(32) DEFAULT NULL COM…

Mac 右键拷贝文件失效

问题&#xff1a;Mac 右键拷贝文件失效&#xff0c;有时候拷贝可以成功&#xff0c;有时候拷贝不成功 发现问题所在&#xff1a;开了百度翻译的划词&#xff0c; 解决&#xff1a;把划词关掉就好了&#xff0c;或者设置划词快捷键翻译就好了&#xff0c;反正就不要一划就翻译那…

资源官网

卓越亚马逊 Ant&#xff0c; http://ant.apache.org/ Axis2&#xff0c;http://axis.apache.org/axis2/java/core/ DisplayTag&#xff0c; http://www.displaytag.org/1.2/ Eclipse&#xff0c; http://www.eclipse.org/ Maven&#xff0c;http://maven.apache.org/ MyS…

为什么神经网络会把乌龟识别成步枪?现在的 AI 值得信任吗?

来源&#xff1a;36Kr 概要&#xff1a;人工智能的快速发展的确值得欣喜&#xff0c;但快速发展的背后还有各种不完善的地方。 人工智能的快速发展的确值得欣喜&#xff0c;但快速发展的背后还有各种不完善的地方。比如&#xff0c;前不久麻省理工学院的一些学生&#xff0c;利…

mysql 5.7 not null_mysql5.7基础 select...where...is not null 查找不为NULL的内容

礼悟&#xff1a;公恒学思合行悟&#xff0c;尊师重道存感恩。叶见寻根三返一&#xff0c;江河湖海同一体。虚怀若谷良心主&#xff0c;愿行无悔给最苦。读书锻炼养身心&#xff0c;诚劝且行且珍惜。数据、数据&#xff0c;命根就在数据。操作数据库一定要谨慎小心。给最苦 这里…

Struts2自定义标签——示例

自定义Button功能描述&#xff1a; <tangs:button items"apple,orange,banana"/> 解析后为&#xff1a; <input type"button" name"apple" value"apple" /> <input type"button" name"orange…

深度学习的核心:掌握训练数据的方法

来源&#xff1a;云栖社区 概要&#xff1a;今天我们将讨论深度学习中最核心的问题之一&#xff1a;训练数据。 Hello World&#xff01; 今天我们将讨论深度学习中最核心的问题之一&#xff1a;训练数据。深度学习已经在现实世界得到了广泛运用&#xff0c;例如&#xff1a;无…

python停止运行tensorflow_Tensorflow 开启训练后卡死

毕设做深度学习的课题&#xff0c;使用到了TensorFlow&#xff0c;但训练时出现了问题&#xff1a;跑脚本开启训练之后&#xff0c;跑完不到100次就会卡死&#xff0c;然后显示python已停止工作这是我的训练的代码# 导入数据集import load_record# 导入TensorFlow并创建Session…

Struts2自定义标签(template)——示例

来源&#xff1a;http://www.blogjava.net/natlive/archive/2009/05/21/271890.html Struts2 的UITag原理&#xff1a; Struts2 UITag分三部份组成&#xff0c;一部份用于定义Tag的内容与逻辑的UIBean&#xff0c;一部份用于定义JSP Tag&#xff0c;也就是平时我们定义的那种&…

详解5G的六大关键技术

来源&#xff1a;电子产品世界 概要&#xff1a;在5G研发刚起步的情况下&#xff0c;如何建立一套全面的5G关键技术评估指标体系和评估方法&#xff0c;实现客观有效的第三方评估&#xff0c;服务技术与资源管理的发展需要&#xff0c;同样是当前5G技术发展所面临的重要问题。 …

mysql 懒加载数据_jpa如何懒加载大字段,懒加载之后又如何获取懒加载字段

前言&#xff1a;对于大字段&#xff0c;我们在查询列表的时候不需要查询&#xff0c;但是修改的时候有需要展示大字段内容&#xff0c;怎么办问1.jpa如何懒加载大字段&#xff1f;即查询列表的时候不查询出来问2.懒加载之后又如何获取懒加载字段。比如&#xff0c;在后台修改的…

为什么说特斯拉研发自动驾驶AI芯片应该引起注意?

来源&#xff1a;36Kr 概要&#xff1a;对于特斯拉而言&#xff0c;研发这款芯片配套算法本质上还是对率先将自动驾驶汽车商业化节点的争夺。 特斯拉Model 3的量产问题仍未彻底解决&#xff0c;CEO Elon Musk又抛出了自研自动驾驶芯片的重磅新闻。 Elon Musk和特斯拉Autopilo…

displaytag 相关

1、获取某列&#xff08;如&#xff1a; id&#xff09;的值 struts 2: <display:table name"usersInfo" id"tabrow" pagesize"${pageSize}" requestURI"web/sys/userManager/UserQuery.action" class"scroll_its" styl…

stm32usb做虚拟串口和键盘_关于stm32f103的USB虚拟串口程序移植

手边有个项目要用到USB传数据到主机&#xff0c;虽然有很多种方式&#xff0c;但最后还是选择了USB虚拟串口模式&#xff0c;将数据上传至pc端&#xff1b;然而这就涉及到了移植问题&#xff0c;在keil下官方已经给出了一个完整的USB TO VCOM的demo&#xff0c;但在我的主机上装…

4篇Nature同时揭示DNA自组装技术,离人造生命又近了一步

来源&#xff1a;刘盼科学网博客 概要&#xff1a; 科学家一直渴望利用自组装来构建人造物体&#xff0c;以达到细胞或细胞器的尺寸和复杂性&#xff0c;以便为研究&#xff0c;工程和医学应用构建合成的细胞机器。 iNature&#xff1a;自组装过程以各种形式存在于自然界中&…

均方距离计算公式_均值、方差、均方值、均方差计算

1、均值 均值表示信号中直流分量的大小,用E(x)表示。对于高斯白噪声信号而言,它的均值为0,所以它只有交流分量。 2、均值的平方 均值的平方,用{E(x)}^2表示,它表示的是信号中直流分量的功率。 3、均方值 均方值表示信号平方后的均值,用E(x^2)表示。均方值表示信号的平均功…