java Packagebylayer VS packagebyfeature库命名?
我知道这有几个相关的帖子,但我有一些具体的问题,我希望能得到帮助。抱歉,如果它们很基本的话
这里是一个示例问题——非常简单,但你可以看到图片——我有几个对象,它们有一些共同的功能,例如制药公司的部门——神经学、肿瘤学、感染学等。它们都需要解析患者文档文件,并将数据上传到数据库。当然,每个部门的数据性质略有不同。如果我按功能使用package,我会
com.company.neurology
Neurology.java
NeurologyDocument.java
NeurologyDAO.java
com.company.infection
Infection.java
InfectionDocument.java
InfectionDAO.java
等等。 问题是我需要一个抽象类,文档类需要扩展它
AbstractDocument.java
public class AbstractDocument
{
public void validateDocument(){...}
public void readDocumentHeader(){...}
public void readDocumentFooter(){...}
...
}
一些数据访问文件,例如
DBConnection.java
public class DBConnection
{
public void makeConnectionToDB() {... }
public void createCache() {... }
public void closeConnectionToDB() {... }
}
一些错误类
ParseError.java, PatientNotFoundException etc.
如果软件包是按功能划分的,那么这些常见的类/接口去哪里了
# 1 楼答案
我认为在你的情况下,你不应该创建一些
common
包。我猜使用的抽象有问题您必须找到一种方法,将具有相同用途的类合并到某个包中,并将该包放在
com.company.shared.<feature_name>
下在你的情况下,可能是:
一个包只包含一两个类是没有问题的。但它应该只团结具有相同目的的阶级,并有一个明确的名称
避免为包和类使用
common
这样的名称。一个名字应该说明一切# 2 楼答案
我建议保持简单。只要你不偷懒,把它们放到
com.company
是一个合理的解决方案这里需要注意的是,每当你注意到组织的公共性时,这就需要纪律将它们转移到单独的包中
在你的例子中,你已经开始建立这些联系——你的帖子本身被分割,以建议这些额外的包:
AbstractDocument.java
可能还不值得拥有自己的软件包。如果你最终创建了更多相关的接口/类,那么就把它们转移到一个合适的包中,但在它真正成为问题之前,不要因为担心它而自找麻烦