gpt4 book ai didi

command - DDD中的DTO和Command有什么区别?

转载 作者:行者123 更新时间:2023-12-04 15:13:34 25 4
gpt4 key购买 nike

我是新来的 DDD-领域驱动开发执行。我已经从网上查看了一些他们使用 DDD 模式实现的项目源代码。在项目结构中,我发现了 DTO 和 Commands。我需要了解这两者之间有什么区别?这不是代码重复吗?
下面是项目中存在的 DTO 和 Command 的两个示例类。

public class BookCargoCommand {
private String bookingId;
private int bookingAmount;
private String originLocation;
private String destLocation;
private Date destArrivalDeadline;

public BookCargoCommand(){}

public BookCargoCommand(int bookingAmount,
String originLocation, String destLocation, Date destArrivalDeadline){

this.bookingAmount = bookingAmount;
this.originLocation = originLocation;
this.destLocation = destLocation;
this.destArrivalDeadline = destArrivalDeadline;
}

public void setBookingId(String bookingId){ this.bookingId = bookingId; }

public String getBookingId(){return this.bookingId;}
public void setBookingAmount(int bookingAmount){
this.bookingAmount = bookingAmount;
}


public int getBookingAmount(){
return this.bookingAmount;
}


public String getOriginLocation() {return originLocation; }

public void setOriginLocation(String originLocation) {this.originLocation = originLocation; }

public String getDestLocation() { return destLocation; }

public void setDestLocation(String destLocation) { this.destLocation = destLocation; }

public Date getDestArrivalDeadline() { return destArrivalDeadline; }

public void setDestArrivalDeadline(Date destArrivalDeadline) { this.destArrivalDeadline = destArrivalDeadline; }
}

public class BookCargoResource {

private int bookingAmount;
private String originLocation;
private String destLocation;
private LocalDate destArrivalDeadline;

public BookCargoResource(){}

public BookCargoResource(int bookingAmount,
String originLocation, String destLocation, LocalDate destArrivalDeadline){

this.bookingAmount = bookingAmount;
this.originLocation = originLocation;
this.destLocation = destLocation;
this.destArrivalDeadline = destArrivalDeadline;
}


public void setBookingAmount(int bookingAmount){
this.bookingAmount = bookingAmount;
}


public int getBookingAmount(){
return this.bookingAmount;
}

public String getOriginLocation() {return originLocation; }

public void setOriginLocation(String originLocation) {this.originLocation = originLocation; }

public String getDestLocation() { return destLocation; }

public void setDestLocation(String destLocation) { this.destLocation = destLocation; }

public LocalDate getDestArrivalDeadline() { return destArrivalDeadline; }

public void setDestArrivalDeadline(LocalDate destArrivalDeadline) { this.destArrivalDeadline = destArrivalDeadline; }

}
注:因为我找不到确切的问题,所以我把它放了下来。请有人告诉我 StackOverflow 中是否存在类似的问题。

最佳答案

DTO(数据传输对象)更像是一个技术概念,指的是一个类,该类只专用于表示属于一起的数据,并用于将这些数据从一个地方传输到另一个地方。
A 命令 在这种情况下,技术上是 DTO。但它也代表具有 的东西商业领域的特殊含义 - 将要发生的事情,即要在系统中执行的命令。
因此,该命令可以被视为将发生什么以及系统的接收部分执行此预期操作所需的所有数据。
该命令可以包含原始数据字段或更复杂的数据,这些数据也可能是一些 DTO。
因此,关于您关于重复的问题,以下是我将如何为您的命令和 cargo DTO 建模:

public class BookCargoCommand {

private String bookingId;
private CargoResource cargo;

public BookCargoCommand() {}

public BookCargoCommand(String bookingId, CargoResource cargo) {
this.bookingId = bookingId;
this.cargo = cargo;
}

public String getBookingId() {
return this.bookingId;
}

public CargoResource getCargo() {
return this.cargo;
}
}

public class CargoResource {

private int bookingAmount;
private String originLocation;
private String destLocation;
private LocalDate destArrivalDeadline;

public CargoResource(
int bookingAmount,
String originLocation,
String destLocation,
LocalDate destArrivalDeadline
) {
this.bookingAmount = bookingAmount;
this.originLocation = originLocation;
this.destLocation = destLocation;
this.destArrivalDeadline = destArrivalDeadline;
}

public int getBookingAmount() {
return this.bookingAmount;
}

public String getOriginLocation() {
return originLocation;
}

public String getDestLocation() {
return destLocation;
}

public LocalDate getDestArrivalDeadline() {
return destArrivalDeadline;
}
}
备注 :同样的概念也适用于 事件 (代表系统中发生的事情)。
旁注:从我的角度来看,DTO 是不合并数据的类的唯一异常(exception) 行为。在其他用例中,我会将此类类视为贫血(另请参阅 anemic domain model

关于command - DDD中的DTO和Command有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64737721/

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