日期:2014-05-18  浏览次数:20695 次

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

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

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等标准,大家都会,人人都遵守,开发都来当然效率也高,也快。
------解决方案--------------------