首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

几个开发设计中会经常让人思考的有关问题, 请高手们指点,先谢过

2012-01-09 
几个开发设计中会经常让人思考的问题, 请高手们指点,先谢过在具体项目设计,开发过程中,这些问题我想朋友们

几个开发设计中会经常让人思考的问题, 请高手们指点,先谢过

在具体项目设计,开发过程中,这些问题我想朋友们一定不陌生,你们是怎么考虑的,欢迎交流,向你们学习:

1. abstract和interface在应用方面何时用抽象类,何时用接口 
2. 你们对struts,hibernate是怎么理解的(体会到的好处,体会到的优点),觉得何时用好,何时不用好
3. 想听听你们对内部类的理解(何时用它),为什么要引入内部类呢? 

4. 在设计中,经常会抽象出类,朋友们是如何抽象出来的(实体类,边界类,控制类)? 

5. 如果资料库中有张表有1000万条记录,如何优化,才能让查询更快点

【注: 这些内容刚开始登在java 基础类板块,也许发错地方,关注的朋友很少】

诚心请教各位朋友

[解决办法]
通用功能用abstract 行为规范用interface.
比如说每个Dao都会有CRUD.具体起来又会有所不同.但是总有一部分是重复的:

在interface CrudDao{ Entity getEntityById(Serializable id); }

用一个抽象类去实现public class BasicDao implements CrudDao{ protected Entity entity; Entity getEntityById(Serializable id){....} }

在上面两步中用接口规范了一个行为. 用抽象类确定了该行为方法功能.
子类继承该抽象类,得到并实现自己的entity.就可以拥有多态性了.
[解决办法]
关于interface:
给你举个例子,interface某个方面的应用:
有两类物体,“汽车”和“动物”都有‘叫’这个动作。说明不同类型物体之间也有相同的动作。
我们可以定义他们的子类“轿车”和“狗”。

1.我们可以这样做:在“汽车”这个抽象类中定义抽象方法'叫'。在“动物”这个抽象类中定义抽象方法'叫'。他们的子类就可以有不同的'叫'动作。
2.我们也可以这样做:把'叫'这个动作抽象到一个接口中。“轿车”继承“汽车”并实现'叫'接口,他就具有自己的'叫'动作。“狗”也一样。

第2种的做法优势在于:如果我们的代码中有个方法叫"展示各种叫法",show(类型X x1){x1.叫();}
这时我们就可以把这个类型X声明为‘叫’接口类型,任何实现了‘叫’接口的类实例都可以作为参数传进来。但是我们用第1中做法时,就很难做到,这个类型X声明为什么类型好呢?
[解决办法]
5. 如果资料库中有张表有1000万条记录,如何优化,才能让查询更快点 


这个比较难说,需要看是什么表。
可以分布式来完成,将数据放在不同的服务器。
如果是用户表,可以选择对用户名进行分表划分。这样效率提高几倍。
对某个字段做视图,然后在视图上面做索引。
[解决办法]
2. 你们对struts,hibernate是怎么理解的(体会到的好处,体会到的优点),觉得何时用好,何时不用好 


hibernate主要还是ORM思想,还有对象状态:持久化,脱管,实例状态。理解了这些概念,操作起来就比较容易了。
struts主要是MVC模式,通过控制器对页面的请求进行中转。例如,可以通过一个类来控制相似的请求,如果是servlet或者jsp,就需要很多这样的类和页面,难以管理(dispatchAction得好处)
[解决办法]

引用楼主 myJavaRoad 的帖子:

在具体项目设计,开发过程中,这些问题我想朋友们一定不陌生,你们是怎么考虑的,欢迎交流,向你们学习:

1. abstract和interface在应用方面何时用抽象类,何时用接口
2. 你们对struts,hibernate是怎么理解的(体会到的好处,体会到的优点),觉得何时用好,何时不用好
3. 想听听你们对内部类的理解(何时用它),为什么要引入内部类呢?

4. 在设计中,经常会抽象出类,朋友们是如何抽象出来的(实体类,边界类,控制…

[解决办法]
5. 如果资料库中有张表有1000万条记录,如何优化,才能让查询更快点 

如果只是在1000万的级别的话,你用分区和索引和优化查询语句就能解决了。
如果数据量再大就还要采取其他的一些方案了。
[解决办法]
通用功能用abstract 行为规范用interface. 
比如说每个Dao都会有CRUD.具体起来又会有所不同.但是总有一部分是重复的: 

在interface CrudDao{ Entity getEntityById(Serializable id); } 

用一个抽象类去实现public class BasicDao implements CrudDao{ protected Entity entity; Entity getEntityById(Serializable id){....} } 

在上面两步中用接口规范了一个行为. 用抽象类确定了该行为方法功能. 
子类继承该抽象类,得到并实现自己的entity.就可以拥有多态性了.
[解决办法]
1. abstract和interface在应用方面何时用抽象类,何时用接口 
abstract 一般是放一些通用的功能,且有些方法的实现(方法体一样)也是共同的
接口,是标准,没有且体的实现,1>.接口主要是为了配合工厂使用,实现解耦合,定义了接口,可以有不同的实现,如CRUD,可以用hibernate实现,也可以用jdbc实现,2>开发中,更好地分工,只要定义了接口,层与层之间开发只须要有接口就可以,可以不知道具体实现,业务层,持久层,可以同时开发,互不影响,接口定义的好不好,直接影响项目的开发。如:你的接口,打个jar包导到我的项目中,我可以使用。

2.你们对struts,hibernate是怎么理解的(体会到的好处,体会到的优点),觉得何时用好,何时不用好 
struts 和 hibernate 我觉得网上资料多得不能再多,我只是想说几点,首先他们都是不错的轻量级的框架,使用起来也非常的方便,但是网上,论坛上的褒贬也不一,我觉得作为企业开发上,还有一点非常重要,那就是:1.他们是开源的 ,2.它们在无形之中已经是一套标准,先不从技术讲,如在公司开发过成中,程序员,甚至所有人都是这样的,公司的标准不是标准备,上有规定,下有对策,人人都可以违反,如表示层,没有struts,你写的代码跟我写的代码可以千差万别,甚到为了些简单的实现,走不少不雅的捷经,这就在后期维护和合作开发当中严重影响效率,有了struts等标准,大家都会,人人都遵守,开发都来当然效率也高,也快。
------解决方案--------------------


1. 如果需要利用类的一部分共性 则使用抽象类 针对同一个问题有不同的解决方案 很多设计模式也用到抽象类 接口主要用于解耦合 还有多态
2。 strtus 强大的分发控制 mvc的经典体现 让你大脑有清楚的分层 你来什么地方 往什么地方去 它都帮你管了 而且有大量的标签可用 actionform对提交的封装 验证框架 
缺点也有很多 比如粗粒度控制 依赖容易 测试不方便(好像struts2已经解决很多问题 还没用过) 不是异步的 (现在很多都追求异步)

 Hibernate orm完美体现 让程序员脱离sql编程 而且数据库可移植性强 hql 基本能完成sql操作 又支持聚合函数等 但使用起来像是在控制对象 
连接查询那是相当的爽 一二级缓存 特别是一级缓存是Hibernate核心 动态代理模式 性能大为提升
 缺点 封装了一层 当然效率会有影响 而且不是 高手的话 还不好控制

3.看这个帖子 http://club.163.com/viewArticleByWWW.m?boardId=java&articleId=java_10999f615630022&boardOffset=0
4.看经验吧 自我感觉 类根据语言来 比如一个人在什么情况有什么事情 根据3个名词就可以抽象出3个类 person environment event(不是很恰当 但是意思大概是这样)接口的话就是寻找共性 寻找多态的一个过程 
5. 索引 缓存(如果是Hibernate注意session一级缓存清空) sql优化 等等
高手补充!!





[解决办法]

探讨
1. 如果需要利用类的一部分共性 则使用抽象类 针对同一个问题有不同的解决方案 很多设计模式也用到抽象类 接口主要用于解耦合 还有多态
2。 strtus 强大的分发控制 mvc的经典体现 让你大脑有清楚的分层 你来什么地方 往什么地方去 它都帮你管了 而且有大量的标签可用 actionform对提交的封装 验证框架
缺点也有很多 比如粗粒度控制 依赖容易 测试不方便(好像struts2已经解决很多问题 还没用过) 不是异步的 (…

热点排行