有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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.

如果软件包是按功能划分的,那么这些常见的类/接口去哪里了


共 (2) 个答案

  1. # 1 楼答案

    我认为在你的情况下,你不应该创建一些common包。我猜使用的抽象有问题

    您必须找到一种方法,将具有相同用途的类合并到某个包中,并将该包放在com.company.shared.<feature_name>

    在你的情况下,可能是:

    • com。公司共享。数据库
    • com。公司共享。数据解析

    一个包只包含一两个类是没有问题的。但它应该只团结具有相同目的的阶级,并有一个明确的名称

    避免为包和类使用common这样的名称。一个名字应该说明一切

  2. # 2 楼答案

    我建议保持简单。只要你不偷懒,把它们放到com.company是一个合理的解决方案

    这里需要注意的是,每当你注意到组织的公共性时,这就需要纪律将它们转移到单独的包中

    在你的例子中,你已经开始建立这些联系——你的帖子本身被分割,以建议这些额外的包:

    com.company.dataaccess
    com.company.error
    

    AbstractDocument.java可能还不值得拥有自己的软件包。如果你最终创建了更多相关的接口/类,那么就把它们转移到一个合适的包中,但在它真正成为问题之前,不要因为担心它而自找麻烦