锁定老帖子 主题:继承还是代理
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (4)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-21
1. 接口代码 package com.hp.common.basedao; import java.util.List; /** * <p>基础接口</p> * */ public interface BaseService { /** * 添加 * @param obj */ public void save(Object obj); /** * 修改 * @param obj */ public void update(Object obj); /** * 列表 * @return list<?> */ public List<?> list(); /** * 查找 * @param id(int) * @return object */ public Object find(int id); } 2.接口实现 package com.hp.common.basedao; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * BaseService 接口实现</br> * @see com.hp.common.basedao.BaseService * @author * */ @Transactional public class BaseServiceImpl implements BaseService{ @Resource SessionFactory factory; private Object obj; /** * 获取类名称 * * @param obj * @return String */ public String getclname(Object obj) { return obj.getClass().getSimpleName(); } /** * 组装List hql语句 * * @param obj * @return hql */ public String getHQL(Object obj) { String hql = "From " + getclname(obj); return hql; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public void del(int... ids) { for (int id : ids) { factory.getCurrentSession().delete( factory.getCurrentSession().load(obj.getClass(), id)); } } public void del(String name, String param) { List<?> list = factory.getCurrentSession().createQuery( getHQL(obj) + " where " + name + "='" + param + "'").list(); for (int i = 0; i < list.size(); i++) { factory.getCurrentSession().delete(list.get(i)); } } public Object find(int id) { // factory.getCurrentSession().createQuery(getHQL(this.obj)+" where "); return null; } @Transactional(propagation = Propagation.NOT_SUPPORTED) public List<?> list() { return factory.getCurrentSession().createQuery(getHQL(obj)).list(); } public void save(Object obj) { factory.getCurrentSession().persist(obj); } public void update(Object obj) { factory.getCurrentSession().merge(obj); } } 3.某段继承代码 package com.hp.system.service; import com.hp.common.basedao.BaseService; /** * Extends BaseService</br> * {@link com.hp.common.basedao.BaseService} * @author * */ public interface PubUsersService extends BaseService { } 然后就是此继承的接口实现。 package com.hp.system.impl; import javax.annotation.Resource; import org.hibernate.SessionFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.hp.common.basedao.BaseServiceImpl; import com.hp.system.bean.PubUsers; import com.hp.system.service.PubUsersService; @Service @Transactional public class PubUsersServiceImpl extends BaseServiceImpl implements PubUsersService { @Resource SessionFactory factory; PubUsers pubUsers=new PubUsers(); public PubUsersServiceImpl() { super.setObj(pubUsers); } } 我们有没有必要如此继承。且不说其中代码的拙劣之处。 想起.net中的代理机制。是不是在java中我们滥用了继承。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-06-21
楼主 java也有代理的
|
|
返回顶楼 | |
发表时间:2011-06-22
最后修改:2011-06-22
dao跟service,最好是依赖关系,get,set注入。这从概念上说得过去。
当然,有的项目图省事,直接让service继承公共的dao。这儿的service只是名字上的service,其实还是个dao。 |
|
返回顶楼 | |
发表时间:2011-06-22
nighthawk 写道 dao跟service,最好是依赖关系,get,set注入。这从概念上说得过去。
当然,有的项目图省事,直接让service继承公共的dao。这儿的service只是名字上的service,其实还是个dao。 同意 ,Dao跟service本身就不是在一个层次上 让他们继承实在有些牵强 耦合性上,合成/聚合更合适,更合理,虽然会增加复杂度。有人提出使用service+bo模式,bo即dao+业务方法 ,同样的,这样做会增加复杂度,业务方法中一般针对的是单一实体对象,如果是多个实体对象之间的,显然应该放入service。虽然复杂,但是个人认为可以提高编码效率 ,当然 service+dao 也不错。 |
|
返回顶楼 | |
发表时间:2011-06-22
我还是感觉这个service改成叫dao比较合适,本来就干了dao的事情嘛
|
|
返回顶楼 | |
发表时间:2011-06-22
好的设计,继承多用于接口上,而不是实现上。
|
|
返回顶楼 | |
发表时间:2011-06-22
层次还是分清楚点吧。在同一层次这种继承关系是正常的
另外BaseServiceImpl 里面那个 private Object obj 干啥的? |
|
返回顶楼 | |
发表时间:2011-06-22
固定一个模子,专心实现业务逻辑。如何业务逻辑也不用手写了。。java good
|
|
返回顶楼 | |
发表时间:2011-06-22
我有时候也挺纠结的。继承太多,有些累赘。主要看类信息是不是聚合的。如果是扩展关系就是承继。如果是调用关系就代理吧。
|
|
返回顶楼 | |
发表时间:2011-06-22
拥抱变化之美 写道 好的设计,继承多用于接口上,而不是实现上。
完全同意 |
|
返回顶楼 | |