AHOI!
即使我只有少量课程,我也想听听你对课程的建议。
我有一个GenericDAO
接口,一个抽象GenericHibernateDAO
类,一个UserDAO
接口,最后一个UserDAOHibernate
类。它们大致按照它们的一般程度排序
我当然会添加更多接口,例如UserDAO
和UserDAOHibernate
,因此他们需要自己的包。
我还有一个GenericEntity
接口,一个抽象的LongEntity
类(需要一个更好的名字btw。)和User
类。我将在后面添加更多类User
类。
您会推荐多少个套餐以及您将使用哪些名称?
答案 0 :(得分:3)
我建议使用500亿个包。每个类都有自己的包,但每个包都没有类。包裹应分享他们班级的名称。对于那些没有课程的套餐,只需闭上眼睛并砰击键盘即可命名。
答案 1 :(得分:0)
打包类和接口是一个有趣的主题。有些人在阵营中:“类和类功能可见性确定包装”,而其他人则在以下阵营中:“基于功能的包类和接口。
就个人而言,我做后者。在我的书中,基于类/功能可视性的打包限制是一个设计问题。
对于你的例子,我只看到两个:
what.ever.generic
what.ever.user
答案 2 :(得分:0)
您创建的包取决于某些因素。例如,如果您的API使用了包私有作用域,则可能与API更加开放时的排列方式不同。
您可以创建一个类似
的包 com.company.app.domain
适用于您的实体(您还可以为您的应用设置模型,实体或其他任何有意义的内容,而不是域名)
您可以创建
com.company.app.dao
为您的Daos。
如果要限制模型对象相互通信的方式,可以使用包中的DAO和服务为每种类型(如User)创建一个包。或者您也可以创建一个.user.service
包。
在不了解您的应用程序设计的情况下,除了不需要创建复杂的包层次结构外,我不能说更多。
答案 3 :(得分:0)
对我来说听起来太复杂了。 (是的,我读过你以前的问题。)
当你有一个通用的DAO时,我不明白为什么你有UserDAOHibernate。
我这样做:
package persistence;
public interface GenericDao<K extends Serializable, V> {
List<V> find();
V find(K key);
K save(V value);
void update(V value);
void delete(V value);
}
我有一个Hibernate实现,但用户的实例看起来像这样:
GenericDaoImpl<Long, User> userDao = new GenericDaoImpl<Long, User>();
关于实体的所有内容在我看来都是矫枉过正的。
答案 4 :(得分:0)
我肯定会按功能分组,而不是通过可见性或任何实现细节分组:
实施更改(功能不应该),但是你想在这种情况下将你的课程转移到另一个包吗?
对于类,没有人问过我是否应该将所有字符串/整数/集合变量放在一个单独的类中?但人们似乎更倾向于使用包组织。
答案 5 :(得分:0)
使用某些东西将实现注入到对象中。将接口用作私有成员类型。
class MyObject
{
private GenericDao meaningfulName;
private UserDao meaningfulName;
}
blah.dao - DAO interfaces here.
blah.dao.hibernate - Hibernate implementation of DAO interfaces here.
blah.entity - GenericEntity here. Abstract (i.e. base) implementations of
interfaces here (LongEntity for example).
blah.entity.impl - Implementation of GenericEntity here.
blah.domain - Domain classes like User here.
而不是LongEntity
可能使用BaseEntity
。