bit*_*yan 20 java architecture oop
我想在我的视图模型中使用DTO来代替我的域对象,但是我很难证明必须为每个域对象维护两组属性的维护开销.
我想知道是否有人已经实现或知道一个模式,其中域对象的属性与对象的操作分离,而不必维护两组属性.
我以为我的域对象只是属性并将操作作为子类附加:
public class Person{
private String firstName;
private String lastName;
public String getFirstName(){
return this.firstName;
}
public String setFirstName(string firstName){
this.firstName = firstName;
}
...
}
public class PersonActions extends Person{
public void save(){
...
}
public Person get(){
}
}
Run Code Online (Sandbox Code Playgroud)
这种方式仍然感觉有些麻烦,因为如果我想要域对象的完整表示,我必须传递一个PersonAction类.
您可以使用仅公开对象数据的接口,而不需要任何域方法。您仍然需要维护两个类,但这会容易得多,因为大多数更改都可以由您的 IDE(例如 Eclipse)重构。这是一个例子:
public interface PersonView {
String getFirstName();
String setFirstName();
}
public void Person implements PersonView {
private String firstName;
@Override // This annotation guarantees the interface is correct
public String getFirstName() {
return firstName;
}
...domain methods...
}
Run Code Online (Sandbox Code Playgroud)
这不是一个完美的解决方案,但它是一个非常干净的解决方案。
至于问题本身,我并不介意将整个对象暴露给视图层。恕我直言,我认为隐藏某些方法不值得花费这些开销。团队应该有纪律来明智地使用这些对象,但这只是我的观点。