在 Java 中放置比较器 Class 的最佳位置是什么
What is the best place to place a Comparator Class in Java
我正在尝试确定将比较器 class 放在 Java 项目中的最佳位置。
public class CustomerSortingComparator implements Comparator<Customer>{
@Override
public int compare(Customer customer1, Customer customer2) {
//... my implementation
}
}
在我的项目中有几个包:
com.test.dao
com.test.model
com.test.controller
com.test.service
com.test.util
.....
我正在考虑将它添加到 util 包中,因为我找不到一个好的参考来建议把它放在哪里。
这显然是基于意见的,所以我赶紧播出我的。 :-)
如果您的比较器要仅在一个地方使用,请在使用它的地方实现它。在同一个包中的相同 class 或 至少 内。高内聚的设计原则决定了这是它所属的地方。特别是因为从 Java 8 个比较器通常可以在一行或很少的代码行中定义,所以将它放在自己的 class 中是没有意义的。只需在 class 中声明它,甚至在使用它的方法中声明它:
Comparator<Customer> customerSortingComparator = Comparator.comparing(Customer::getLastName)
.thenComparing(Customer::getFirstName);
如果在另一侧预见到比较器将在多个包中的多个 class 中使用,请在包含 Customer
class 的包中声明它。还是那句话,高内聚原理会告诉你,就是这个地方。
现实生活中的故事:在我正在进行的项目中,他们将所有比较客户(为了示例)的比较器整合为一个 class在与 Customer
class 分开的包中,也与使用这些比较器的 classes 分开。它给了我们一个 class 不存在的凝聚力和许多不必要的跨包耦合。一个非常糟糕的设计。
Link: Cohesion (computer science) 维基百科
我正在尝试确定将比较器 class 放在 Java 项目中的最佳位置。
public class CustomerSortingComparator implements Comparator<Customer>{
@Override
public int compare(Customer customer1, Customer customer2) {
//... my implementation
}
}
在我的项目中有几个包:
com.test.dao
com.test.model
com.test.controller
com.test.service
com.test.util
.....
我正在考虑将它添加到 util 包中,因为我找不到一个好的参考来建议把它放在哪里。
这显然是基于意见的,所以我赶紧播出我的。 :-)
如果您的比较器要仅在一个地方使用,请在使用它的地方实现它。在同一个包中的相同 class 或 至少 内。高内聚的设计原则决定了这是它所属的地方。特别是因为从 Java 8 个比较器通常可以在一行或很少的代码行中定义,所以将它放在自己的 class 中是没有意义的。只需在 class 中声明它,甚至在使用它的方法中声明它:
Comparator<Customer> customerSortingComparator = Comparator.comparing(Customer::getLastName)
.thenComparing(Customer::getFirstName);
如果在另一侧预见到比较器将在多个包中的多个 class 中使用,请在包含 Customer
class 的包中声明它。还是那句话,高内聚原理会告诉你,就是这个地方。
现实生活中的故事:在我正在进行的项目中,他们将所有比较客户(为了示例)的比较器整合为一个 class在与 Customer
class 分开的包中,也与使用这些比较器的 classes 分开。它给了我们一个 class 不存在的凝聚力和许多不必要的跨包耦合。一个非常糟糕的设计。
Link: Cohesion (computer science) 维基百科