原则:
有四个原则知道包的构成:
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. 包内高内聚。但在某些分布式环境下可能打破这种原则。
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 特殊项目部分就不再例出
请大家评说,项目已经使用了二年,如果此结构框架好,我准备开源
解决方案 »
- 用SWING实现一个outlook主界面...
- applet中怎么弹出广告IE窗口?
- 为什么super调不到父类的方法?
- 请问java的replaceALL()函数的问题??
- 一个弱智般的问题.但是不懂就要问啊>大侠们看看!感谢感谢!
- 将String转为int的最简单方法是什么?比如"50"转换成int型的50?
- 基于Log4j的扩展工具包 qLog, 欢迎对log技术感兴趣的朋友下载使用。
- 帮助文档中关于Class BufferedReader的一段英文,请高手帮忙给解释一下,谢谢!
- 怎样取得当前文件所在的路径?
- 用java做mis系统怎么样,用什么软件较好?希望大家讨论,论者有分!
- 算法问题
- 问一道二叉树的问题
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.
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 啊?
com.willfar.businesscom.willfar.service.pojo
com.willfar.entity
com.willfar.dto这两个里面都放些什么啊?感觉有点重复哦
----------------------------------------------
这里是需要重复,原来我也一直只用pojo来混全实现。
但是由于项目过多,模型开发人员水平不直,有些用hibernate实现了的接口,在大量数据访问时出现性能问题。
所以很多老手则重再用 jdbc或者ibatis来做出更好的实现。
外观上代码是有点重复,但实现不相同,出于宠大的项目原因这样做。
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基本操作)
com.willfar.dto
------------------------
这里同样提供对实体与dto基本接口,打个比方:
一个对象有: objectId,objectName,objectType等类型,
但是用户有:userId,userName,userType。
但是实现操作上就统一,如果在系统中要实现通用功能,就不能直接用实体来做。
因为userId,与objectId取得的方法不同,代码不相同。
这里只要定义一个对象的接口:
getId(),getName(),getType()
这样的话,只要实现这个接口,我在系统里就可以通用使用同一接口来操作。
结果任何对象只需要用:getName()就可以得到名称,而不是用getObjecName(),getUserName()不同的方法。
整合这些东西花时间,了解一点点后,在系统的结构上无从下手,没有成熟的结构与方向,这样花的时间太多。