Java 包中分组类的约定

Java 包中分组类的约定,java,naming-conventions,Java,Naming Conventions,我一直想知道以下哪种方法是最好的: (一) 包装:cars.blue 类:CarOne.java,CarTwo.java 包装:cars.red 类:CarOne.java,CarTwo.java (二) 包装:cars.blue 类:BlueCarOne.java,BlueCarTwo.java 包装:cars.red 类:RedCarOne.java,RedCarTwo.java (三) 包装:cars 类:BlueCarOne.java,BlueCarTwo.java,RedCarCone

我一直想知道以下哪种方法是最好的:

(一)

包装:
cars.blue
类:
CarOne.java
CarTwo.java

包装:
cars.red
类:
CarOne.java
CarTwo.java

(二)

包装:
cars.blue
类:
BlueCarOne.java
BlueCarTwo.java

包装:
cars.red
类:
RedCarOne.java
RedCarTwo.java

(三)

包装:
cars

类:
BlueCarOne.java
BlueCarTwo.java
RedCarCone.java
RedCarTwo.java

方法1:将汽车类拆分为不同的包

方法2:似乎有点过载,因为汽车类已经可以通过包来区分。但是,当您只查看类名时,前缀是一个优势,不需要再次查看它所属的位置

方法3:将所有汽车都放在一个包中


哪种方法最好

我会选择方法3。因为所有的汽车都在同一个包中(所有的域类都在一起)。这是一个有争议的问题,每个人都可能有自己的利益。AFAIK除了基于用例的判断之外,没有预定义的约定。

可能您应该创建封装功能块的包。颜色的区别实际上并不意味着任何功能上的差异,因此我在这里也会选择选项3。

当两个软件包相互排斥时,方法1最有用,即当汽车有一个共同的界面时,红色和蓝色被编译成单独的罐子,这两个罐子一次只有一个。当两个包都可能存在时,这种命名很混乱


方法2和方法3几乎是等效的,因为它们的名称彼此相差很大。创建一个单独的包(方法2)可能有点过分,也可能没有,这取决于两组类在应用程序中的使用方式。

否则,我将使用
模型
/
pojo
/
包,执行以下操作:

package model;

class Car {
    private String carColor; //Blue, Red
    private String carType;  // One, Two

    // getter and setters

}

我认为这取决于你想要实现什么,但你应该记住,它不仅仅是用来分组的。但您也可以利用访问修饰符

如果所有的cars职业都可以使用某种方法,那么它们应该在一个包中,所以药剂3是好的

package cars;  
public class BlueCarOne {
  void method() {}
}

package cars;

public class BlueCarTwo {
  void method() {}
}

package cars;

public class RedCarOne {
  void method() {}
}

package cars;

public class RedCarTwo {
  void method() {}
}
在这种情况下,只有来自
cars
包的类才能调用
method()

但是如果您想在
RedCar
BlueCar
之间隐藏一些实现细节,请将它们放入不同的包中。并将应隐藏的方法或字段标记为受包保护的

干杯, 米哈尔