有这门课:
public class DataPeriod {
private final String key;
private final LocalDate from;
private final LocalDate to;
private final Map<LocalDate, DataPoint> dataPoints = new HashMap<LocalDate, DataPoint>();
public DataPeriod(String key, LocalDate from, LocalDate to) {
this.key = key;
this.from = from;
this.to = to;
}
public LocalDate getFrom() {
return from;
}
public LocalDate getTo() {
return to;
}
public void hit(int id) {
DataPoint dataPoint = getOrCreate();
dataPoint.hit(id);
}
private DataPoint getOrCreate() {
LocalDate now = LocalDate.now();
String dataPointKey = key + now.toString();
if ( !dataPoints.containsKey(now) ) {
DataPoint dataPoint = new DataPoint(dataPointKey);
dataPoints.put(now, dataPoint);
}
return dataPoints.get(dataPointKey);
}
public long count() {
long count = 0l;
for (DataPoint dataPoint : dataPoints.values()) {
count += dataPoint.count();
}
return count;
}
将方法hit(int id)
和getOrCreate()
提取到其他一些类作为服务或助手可能是个好主意。但随后应修改它们以接收 DataPoint
的参数。
我认为将它们包含到 DataPoint
类中是有意义的,因为它们代表 DataPeriod
必须知道的操作。
那个场景有某种模式吗?在并发方面提取或不提取这些方法有什么区别?
最佳答案
我认为如果这些方法仅使用同一类中的数据,或者换句话说,如果它们不依赖于其他类,则最好将它们留在同一模型类中。
当然你永远不会从一个模型类访问服务,但有时很难决定一个模型类是否应该使用另一个模型类。这取决于关系是否紧密(例如,一个包含另一个,并且包含的类永远不会被独立使用)。如果两个模型类不是强相关的,那么一个不应该管理另一个;在那种情况下,我会将工作留给第三个外部类(例如服务或只是另一个模型类包含其他类)。
在您的情况下,DataPeriod
包含 dataPoints
(可能是另一个模型类),所以我认为将方法留在那里没问题。
关于java - 域对象中的业务逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560837/