【发布时间】:2013-11-11 19:58:36
【问题描述】:
我遇到了数据传输对象的情况,我开始认为我过度架构或使事情复杂化......
我不知道我是对还是错。
只有在客户端 UI 中选择 WeekType AB 时,才需要 EditSchoolyearDTO 中的所有属性。
当只选择 WeekType A 时,A 属性就足够了。
在 AB 案例中,我现在将创建一个 SchoolWeekADTO 和 SchoolWeekBDTO。
好吧,当我将 DTO 结构视为客户端和服务器之间的 json 接口时,我的 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; }
}
【问题讨论】:
-
UI可以改变StartWeek的值吗?如果是,是否需要动态拉取AB数据的相关信息?
-
问题1:是的,UI 可以在 WeekType A 或 AB 之间进行选择。我实际上什么都不需要……以 dto 的形式发送数据对我来说确实有意义,其中每个属性都在当前上下文中使用。如果上下文是 WeekType A,那么拥有 4 个为 Null 的属性是没有意义的,我必须将它们设为 Nullable
等... -
这是您从客户端发送到服务器的 DTO 还是相反?
-
我个人从未遇到过这种情况,我认为这主要是因为我总是充分利用面向对象的设计,即使在我的 DTO 中也是如此。话虽如此,恕我直言,在 DTO 中拥有为空的属性是完全有效的。因为如果您的 UI 足够动态以更改类型,您应该提供绑定到 UI 字段的属性。您可以在序列化中指定在 JSON 对象中不包含 null 值。
-
@Szymon 从客户端到服务器。
标签: c# dto data-transfer-objects