原则:
有四个原则知道包的构成: 
1. 包内高内聚。但在某些分布式环境下可能打破这种原则。 
2. 隐藏细节,特别是实现的细节。 
3. 面向问题域(即面向业务),使用该领域的一般概念组织包结构,而不是使概念支离破碎 
4. 一个包内的类可以被共同重用。 同样有四条指导包间的关系: 
5. 包间低耦合 
6. 无循环依赖(ADP)。 
7. 稳定依赖(SDP),尽量依赖稳定的包(意味着难以改变). 
8. 抽象依赖(SAP),稳定的包要用抽象的层(or接口)隔离. 如果是做系统的框架,按下面结构组织:
com.willfar 代表公司,或者开源组织这样你的包永不会与别人重复。
名称你也以自己定。
com.willfar.dao
com.willfar.dao.jdbc
com.willfar.dao.hibernate
com.willfar.dao.ibatis
com.willfar.dao.ole
......
com.willfar.service
com.willfar.service.pojo
com.willfar.service.jdbc
com.willfar.service.hibernate
com.willfar.service.ibatis
......
com.willfar.business
com.willfar.exception
com.willfar.entity
com.willfar.dto
com.willfar.init
com.willfar.job
com.willfar.util
com.willfar.interfaces
com.willfar.constant
com.willfar.env
//Global所有系统中服务的目录
com.willfar.env.Global//系统核心运算引擎,包括计算机,数学,规约,物理,度量衡等等处理数据的核心算法
com.willfar.engine
com.willfar.engine.computer
com.willfar.engine.math
com.willfar.engine.metrology
com.willfar.engine.physics
com.willfar.engine.protocol=======================================================
具体项目系统则有所不同,根据8个原则来说应当如下设计:com.willfar 代表公司,或者开源组织这样你的包永不会与别人重复。
名称你也以自己定。
com.willfar.commons 代表产品通用功能
com.willfar.xxxxxxx 代表产品中特殊项目专用
com.willfar.commons.user 代表产品中用户模块通用部分内容
com.willfar.xxxxxxx.user 代表产品中特殊项目专用用户模块内容部分
com.willfar.commons.user.dao
com.willfar.commons.user.dao.jdbc
com.willfar.commons.user.dao.hibernate
com.willfar.commons.user.dao.ibatis
com.willfar.commons.user.dao.ole
......
com.willfar.commons.user.service
com.willfar.commons.user.service.pojo
com.willfar.commons.user.service.jdbc
com.willfar.commons.user.service.hibernate
com.willfar.commons.user.service.ibatis
......
com.willfar.commons.user.business
com.willfar.commons.user.entity
com.willfar.commons.user.dto
com.willfar.commons.user.interfaces
注: com.willfar.xxxxxxx 特殊项目部分就不再例出
请大家评说,项目已经使用了二年,如果此结构框架好,我准备开源

解决方案 »

  1.   


    Anyway, open-source will make you source codes better...it also proves that you're confident and your codes are good enough. But they can be improved as well. 
      

  2.   

    com.willfar.dao 
    com.willfar.dao.jdbc 
    com.willfar.dao.hibernate 
    com.willfar.dao.ibatis 
    com.willfar.dao.ole com.willfar.service 
    com.willfar.service.pojo 
    com.willfar.service.jdbc 
    com.willfar.service.hibernate 
    com.willfar.service.ibatis ——————————————————————————dao 中分成 jdbc, hibernate, ibatis 什么的可以理解,为什么 service 中也有 jdbc, hibernate, ibatis 啊?
      

  3.   

    com.willfar.service
    com.willfar.businesscom.willfar.service.pojo 
    com.willfar.entity 
    com.willfar.dto这两个里面都放些什么啊?感觉有点重复哦
      

  4.   

    为什么 service 中也有 jdbc, hibernate, ibatis 啊
    ----------------------------------------------
    这里是需要重复,原来我也一直只用pojo来混全实现。
    但是由于项目过多,模型开发人员水平不直,有些用hibernate实现了的接口,在大量数据访问时出现性能问题。
    所以很多老手则重再用 jdbc或者ibatis来做出更好的实现。
    外观上代码是有点重复,但实现不相同,出于宠大的项目原因这样做。
      

  5.   

    com.willfar.service 
    com.willfar.service.pojo 
    com.willfar.service.jdbc 
    com.willfar.service.hibernate 
    com.willfar.service.ibatis
    ========================================
    这部分由于框架部分,所以是尽可以往上抽象,因而service到了此位置。
    service里定义很多抽象接口,基本是通用,公共用service核心接口,所有项目都可以使用。
    同时定义部分抽象类,实现基本稳定的内容,便于使用。
    com.willfar.service.jdbc
    这里有接口,有抽象类,主要是为使用jdbc实现时提供比spring封装更多,基于系统的内容,到了下项目面开发,
    就更简单了。
    比如:com.willfar.service.hibernate有一个类:baseServiceHibernateImpl 有个基本实现,
    这样的话,如果只对表做简单的操作,可以不用写一行代码,直接使用就行了。
    (封装了carcte,delete,is,findAll,findAllById,update基本操作)
      

  6.   

    com.willfar.entity 
    com.willfar.dto
    ------------------------
    这里同样提供对实体与dto基本接口,打个比方:
    一个对象有: objectId,objectName,objectType等类型,
    但是用户有:userId,userName,userType。
    但是实现操作上就统一,如果在系统中要实现通用功能,就不能直接用实体来做。
    因为userId,与objectId取得的方法不同,代码不相同。
    这里只要定义一个对象的接口:
    getId(),getName(),getType()
    这样的话,只要实现这个接口,我在系统里就可以通用使用同一接口来操作。
    结果任何对象只需要用:getName()就可以得到名称,而不是用getObjecName(),getUserName()不同的方法。
      

  7.   

    我的目的很简单,希望初学者直接进入java开发的大堂,比学了半年才知道一点点这种代价来说,我觉得应当共享这些东西。
    整合这些东西花时间,了解一点点后,在系统的结构上无从下手,没有成熟的结构与方向,这样花的时间太多。