举个例子,实际业务中有一个明细报表,需要从8个标中结合取数据(业务主表,业务明细标,代码表,其他关联表等)。业务层是与数据访问曾分开的,也就是说要通过DAO来访问数据库。方案1:
生成一个DAO,里面的逻辑是通过多表联合查询来返回结果。业务层在调用这个DAO获取业务数据,然后返回到前端,方案2:
首先生成8个基本访问表的DAO,然后通过另外一层EA逐个访问8个基本DAO,取得需要的业务数据。业务层在调用这个EA获取业务数据,然后返回到前端,从再利用性,运行效率,开发效率,维护效率等大家能想到的方面分析一下优缺点。我现在这个项目采用的方案是后者(并不100%是,针对个别效率低的还是选择方案1,但基准是方案2)。
生成一个DAO,里面的逻辑是通过多表联合查询来返回结果。业务层在调用这个DAO获取业务数据,然后返回到前端,方案2:
首先生成8个基本访问表的DAO,然后通过另外一层EA逐个访问8个基本DAO,取得需要的业务数据。业务层在调用这个EA获取业务数据,然后返回到前端,从再利用性,运行效率,开发效率,维护效率等大家能想到的方面分析一下优缺点。我现在这个项目采用的方案是后者(并不100%是,针对个别效率低的还是选择方案1,但基准是方案2)。
解决方案 »
- java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-base
- 求助:访问document/literal模式的webservice服务端出现的问题
- jsp新手问题求助
- 我向学J2EE,请高手帮忙推荐几本好书
- 关于命名与目录服务的问题?
- weblogic中怎么使用servlet,,,,??郁闷
- ejb的finder只能返回一条记录
- 学习j2ee中碰到的若干问题
- 请教有哪些J2EE开发环境,收费的和不收费的都要
- Shiro的NullPointerException
- OSGI框架的了解
- java.sql.SQLException: 列名无效
多一层抽象一般会使软件设计更加灵活和更好的复用性,但是这也增加了软件的复杂度。所以要看具体的项目中是否值得多加一层抽象。
譬如改动8个基本访问表的结构的影响是否会迫使EA层也进行改动?EA层的实现是否非常依赖DAO的实现?
EA也是手写的,会从前一层接收查询条件,然后作为参数调用DA,再把取得的结果返回到前一层。这中间,如果有错误,也会在这一层做处理,抛给相应的消息里。
其实,如果按照我自己个人的想法,也就是第一种方法那么做了。但人家这么做也估计也有它的道理,只是我不太能体会这么做的道理。
我们不是用框架,是做框架。因为很多查询统计报表实际上都可以用一个sql语句搞定(包括一些稍微复杂的),但是采用方案2的话,就要编很多逻辑java代码,由java来做。好处呢,也许是java代码看着更容易理解,以后换其他人好维护。但我始终觉得如果是这种复杂报表处理,还是由sql来实现,无论开发效率还是执行效率都很高,包括维护,以后只改sql语句就可以,其他java代码也无非是改变一下接受参数什么的,不涉及业务,还方便测试。
如果sql可实现的尽量用sql做了,如果sql做了,如果是需要大量消耗cpu的处理时需要考虑性能问题了
sql和代码的性能要保存平衡
如果让数据库做太多的东西数据库有可能会一直忙碌而服务不过来
对对,这边资料上也这么说过。那么这就是说虽然有的时候java方式实现会麻烦些、效率差点,但是考虑全都让数据库做的话,数据库那边也会出现瓶颈,所以把它拆分开来,由java服务器这边分担些?
不过又考虑,数据库是不是也有集群,如果也能用,硬件上数据库这边多分担些,java应用服务少分担些不是也能解决?
而且都是用SQL 这样方便于优化
方法二 不太推荐修改 优化起来 会很麻烦