Java打包约定-模型呢?
我从PHP开始,在那里不需要包。我们将在我的工作中用Java构建一个项目,我正在考虑体系结构。该系统将是一个具有3个级别的内容管理系统。我们将为所有不同的东西提供不同的模型。如果所有的模型都在一个包中,那么它们是否应该被分成不同的包,并与属于它们的“部分”的所有其他功能或其他完全不同的功能一起分组?对此没有绝对的规则。根据经验,我认为一个包应该包含不超过10个、不少于2个编译单元,但味道不同。尝试找到一种分类法,让您可以将模型划分为多个包,而不会感觉人为 但我不会将模型与使用它们的代码放在同一个包中。尽量让你的包裹名称代表包裹中发生的事情,例如:Java打包约定-模型呢?,java,jakarta-ee,models,Java,Jakarta Ee,Models,我从PHP开始,在那里不需要包。我们将在我的工作中用Java构建一个项目,我正在考虑体系结构。该系统将是一个具有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
这方面没有绝对的规则。根据经验,我认为一个包应该包含不超过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
我通常将数据包分层: 例如,模型、业务和可视化。模型是数据支持,业务是我的程序的算法和显示屏。 您还可以在这些层中支持日志记录和异常处理 包的创建必须证明其类的相同上下文是正确的。例如,将处理数据库的类与作为数据视图的类放在同一个包中是有意义的
希望这有助于我通常将数据包分为几层: 例如,模型、业务和可视化。模型是数据支持,业务是我的程序的算法和显示屏。 您还可以在这些层中支持日志记录和异常处理 包的创建必须证明其类的相同上下文是正确的。例如,将处理数据库的类与作为数据视图的类放在同一个包中是有意义的
希望这有助于如果您正在编程接口(对于任何规模/复杂度合理的系统来说都是一个好主意),那么一个通常运行良好的解决方案就是有一个包含接口定义的项目/包,合理地进行划分;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数据访问层
因此,很明显,在您的实施项目中,您将对接口项目的包结构进行一定程度的“镜像”——这使得正确的结构非常重要——正如Sean Patrick Floyd在另一个回答中所说,您必须找到一种既有意义又能将每个包的文件数保持在一个可行范围内的分类法。如果您要对接口进行编程(对于任何大小/复杂度合理的系统来说都是一个好主意),那么一个通常运行良好的解决方案就是让一个包含接口定义的项目/包,合理分配;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数据访问层
因此,很明显,在您的实施项目中,您将对接口项目的包结构进行一定程度的“镜像”——这使得正确的结构非常重要——正如Sean Patrick Floyd在另一个回答中所说,您必须找到一种既有意义又能将每个包的文件数保持在一个可行范围内的分类法。好奇的是,“编译单元”是什么意思?我以前没有听说过编译单元是一个.java文件,它可能包含一个或多个类、枚举和接口。我也不太熟悉-我只在java解析器中遇到过术语,而不是日常术语。90%的时间将多个类放在同一个文件中似乎是一种可怕的做法。听起来准确吗?另外,我知道什么是控制器和模型,但你将什么定义为服务?@Webnet a)我想大概是60%。有一些有效的用途。b) 阅读这个关于控制器和服务层之间的对比的问题:只是好奇,你所说的“编译单元”是什么意思?我以前没有听说过编译单元是一个.java文件,它可能包含一个或多个类、枚举和接口。我也不太熟悉-我只在java解析器中遇到过术语,而不是日常术语。90%的时间将多个类放在同一个文件中似乎是一种可怕的做法。听起来准确吗?另外,我知道什么是控制器和模型,但你将什么定义为服务?@Webnet a)我想大概是60%。有一些有效的用途。(b)