gpt4 book ai didi

java - 显示 DTO 对象的设计模式

转载 作者:行者123 更新时间:2023-11-30 08:45:03 25 4
gpt4 key购买 nike

我是设计模式的新手,我有以下需求:我有一组由 DTO 对象表示的事件,例如:LateEventDTO、RescheduleEventDTO 等。这些 DTO 对象中的每一个都有自己的一组属性。现在,我有一个名为 EventDTO 的抽象类,所有不同类型的 DTO 对象(如 LateEventDTO、RescheduleEventDTO 等)都扩展了 EventDTO。

我会将这些 DTO 对象之一传递到我的 ui 层(jsp 页面),该层检查它是什么类型的 DTO 对象。像这样:

if(event instance of Late){
//handle late event and display it's content
}

else if(event instance of Reschedule){
//handle reschedule event and display it's content
}

等等等等。

我想要的是让表示层忽略不同类型的 eventDTO 对象。它需要做的就是获取一个通用对象并显示它的内容。它不应该像我上面显示的那样明确检查它的类型。

这种情况的最佳设计模式是什么?

最佳答案

创建连贯的类,而不是 DTO

这将修复 abstract class 多态性的误用。

扩展抽象类是策略模式(see @Crazy Ninja comment)。 abstract class 而不是 interface 并没有减少它。

扩展抽象类的要点是每个实例都可以被相同地处理。如果您必须弄清楚每个实例是什么类型,那又何必呢?


如果以下内容不能满足您的设计需求,您仍然需要制作连贯的类 - 做一些事情的类,而不仅仅是包含字段/属性。


附言这可能不是有效的 Java 语法。

您的代码应该更像这样:

public abstract EventBase {
// declare common properties here.

public virtual void Handle () {
// code to handle the properties.
// maybe there is some behavior for the base properties.
}

// Depending on how you're going to display contents, you
// may want to override toString()

public override string toString() {
// format the DTO thingies as needed.
}
}

public class RescheduleEvent extends Eventbase {
// define RescheduleEvent unique properties here


public override string toString(){
string whoAMI = base.toString();
whoAMI = whoAMI + .....
return whoAMI;
}

public override void Handle() {
base.Handle():

// do stuff
}
}

// client code.
myRescheduleEvent.Handle();
myWhateverEvent.Handle();

// or

foreach( Eventbase anEvent in eventList) {
anEvent.Handle();
DisplaySomething(anEvent.toString());
}

关于java - 显示 DTO 对象的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33481050/

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