gpt4 book ai didi

java - 是否有使用 DTO 的模式而不必复制域对象的属性?

转载 作者:IT老高 更新时间:2023-10-28 20:54:44 24 4
gpt4 key购买 nike

我想在我的 View 模型中使用 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(){

}
}

这种方式仍然感觉有点笨拙,因为如果我想要域对象的完整表示,我必须传递一个 PersonAction 类。

最佳答案

您可以使用只公开对象数据的接口(interface),而不使用任何域方法。您仍然需要维护两个类,但这会容易得多,因为大多数更改都可以由您的 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...
}

不是一个完美的解决方案,但它是一个相当干净的解决方案。

至于问题本身,我并不介意将整个对象暴露给 View 层。恕我直言,我不认为隐藏一些方法值得开销。团队应该有纪律来明智地使用对象,但这只是我的意见。

关于java - 是否有使用 DTO 的模式而不必复制域对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7403742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com