gpt4 book ai didi

c# - 根据ui逻辑设计数据传输对象

转载 作者:行者123 更新时间:2023-11-30 18:31:36 24 4
gpt4 key购买 nike

我遇到了数据传输对象的情况,我开始认为我过度架构或使事情复杂化......

我不知道我是对还是错。

仅当在客户端 UI 中选择 WeekType AB 时,才需要 EditSchoolyearDTO 中的所有属性。

当只选择 WeekType A 时,A 属性就足够了。

在 AB 案例中,我现在要创建一个 SchoolWeekADTO 和 SchoolWeekBDTO。

当我将 DTO 结构视为我的客户端和服务器之间的 json 接口(interface)时,我的 DTO 结构不表示何时需要 A 或 AB 数据。这对我来说很糟糕。

最重要的是,我的服务器 api 有一个固定的类型,所以我不能一次发送一个带有 A-DTO 的帖子,而在另一个时间发送一个 AB-DTO。

你会怎么做?

public class EditSchoolyearDTO
{
public string Name { get; set; }
public DateTime EndDate { get; set; }
public WeekType StartWeek { get; set; }
public enum WeekType : int
{
A = 0,
AB = 1,
}
public int UserId { get; set; }

public SchoolWeekADTO SchoolWeekA { get; set; }
public SchoolWeekBDTO SchoolWeekB { get; set; }

// When WeektType is A then only SchoolWeekA is or its A-properties are needed
// SchoolyWeekADTO
//public int MaxPeriodPerWeekA { get; set; }
//public IEnumerable<int> VisibleWeekDayIndexA;
//public DayOfWeek FirstDayOfWeekA { get; set; }

// SchoolWeekBDTO
//public int WeeklyRotation { get; set; }
//public DayOfWeek FirstDayOfWeekB { get; set; }
//public IEnumerable<int> VisibleWeekDayIndexB;
//public int MaxPeriodPerWeekB { get; set; }

}

最佳答案

为了不需要发送所有的对象,同时也更好的标示客户的意图,你可以将类型A和类型B的属性分离到不同的类中。这样你总是选择枚举的值之一来说明类型是 A 还是 B。基于此你创建 WeekTypeADTOWeekTypeBDTO 之一的实例和将另一个设置为 null

代码看起来也更清晰,更好地表达了您的意图。

public class EditSchoolyearDTO
{
public string Name { get; set; }
public DateTime EndDate { get; set; }
public WeekType StartWeek { get; set; }
public enum WeekType : int
{
A = 0,
AB = 1,
}
public int UserId { get; set; }

public WeekTypeADTO SchoolWeekA { get; set; }
public WeekTypeBDTO SchoolWeekB { get; set; }

}

public class WeekTypeADTO
{
public int MaxPeriodPerWeekA { get; set; }
public IEnumerable<int> VisibleWeekDayIndexA {get; set;}
public DayOfWeek FirstDayOfWeekA { get; set; }
}

public class WeekTypeBDTO
{
public int WeeklyRotation { get; set; }
public DayOfWeek FirstDayOfWeekB { get; set; }
public IEnumerable<int> VisibleWeekDayIndexB {get; set;}
public int MaxPeriodPerWeekB { get; set; }
}

关于c# - 根据ui逻辑设计数据传输对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19914775/

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