Java打包惯例 - 模型怎么样?

时间:2011-12-16 00:36:50

标签: java java-ee models

我从PHP开始,不需要包。我们将在我的工作中构建一个Java项目,我正在考虑这个架构。该系统将是一个3级的内容管理系统。我们将为各种不同的东西提供各种模型。如果所有模型都在一个软件包中,是否应将它们分解为各种软件包,这些软件包与其“部分”或其他完全相关的所有其他功能组合在一起?

3 个答案:

答案 0 :(得分:3)

这没有绝对的规则。根据经验,我会说一个包应该包含不超过10个且不少于2个编译单元,但味道不同。尝试找到一个分类法,让您可以将模型划分为多个包,而不会产生任何影响。

但我不会将模型放在与使用它们的代码相同的包中。尝试使您的包名称代表其中发生的事情,例如

com.myapp.model.x
com.myapp.model.y
com.myapp.service.x
com.myapp.service.y
com.myapp.controller.x
com.myapp.controller.y

答案 1 :(得分:3)

如果您正在编程接口(对于任何合理大小/复杂度的系统总是一个好主意)那么通常运行良好的解决方案是拥有一个包含接口定义的项目/包,合理划分; e.g:

  • com.mycompany.cms.domain.foo
  • com.mycompany.cms.domain.bar
  • com.mycompany.cms.domain.bar.user
  • com.mycompany.cms.domain.bar.page

这些接口由所有系统中的层使用,并且希望实际的具体实现可以保持“私有”到层;例如,在您的数据访问层中,您可能有:

package com.mycompany.cms.dataaccess.bar.user;

import com.mycompany.cms.domain.bar.user.CMSUser;

@Entity
@Table("CMS_USER")
public class CMSUserJPA implements CMSUser {
    ...
}

这是CMSUser的一个实现,已经适当地注释用于JPA数据访问层。

很明显,你将在实现项目中对接口项目的包结构进行一定程度的“镜像” - 这使得非常重要才能使该结构正确 - 就像肖恩一样帕特里克弗洛伊德在另一个答案中说,你必须找到一个有意义的分类法,并将每个文件包的数量保持在可行的范围内。

答案 2 :(得分:0)

我通常将图层包分开:

例如,模型,业务和可视化。在模型是数据支持的地方,业务是我的程序的算法和显示屏幕。 您也可以在这些层中支持日志记录,异常处理。

包的创建必须证明其类的相同上下文的合理性。例如,在同一个包中处理数据库,使用作为数据视图的类是有意义的。

希望这有帮助

相关问题