在一个工作项目中,我们的域模型中有一个特定的值类型类,其中包含大量的属性......
public class BigValueType {
private Foo foo;
private Bar bar;
private Baz baz;
//...
}
我们已经意识到我们希望将其“集中”到许多不同的、更专业的类中,这些类只具有该类属性的一些子集。我认为我们希望对这些数据有不同的“视图”。
public class SpecializationA {
private Foo foo;
private Baz baz;
//...
}
public class SpecializationB {
private Bar bar;
private Baz baz;
//...
}
private class SpecializationC {
private Foo foo;
private Bar bar;
//...
}
但是,此域模型旨在相当通用,而不是特定于该项目。在未来的项目中,它将添加特定于项目的扩展,但公共域模型将与这些扩展分开。如果我们现在简单地定义一堆类,很可能其他使用领域模型的项目以后只需要编写自己的稍微不同的类。(我们无法轻易预测这些数据的哪些视图将是有用的。)
我认为我们应该做的是为这个大类编写特定于项目的适配器,以呈现数据的不同视图。这样,该域的未来用户不必触及“通用”域模型中的任何内容来定义此信息的新视图。
public class AdapterA {
private BigValueType wrapped;
//...
public ViewA(BigValueType wrapped) {
//...
}
public Foo getFoo() {
return wrapped.getFoo();
}
//...
}
这对我来说比普通继承更有意义,因为我们的顶级类/接口几乎没有任何内容。
对这种方法有任何反馈吗?