1

我有两个操作的创建/编辑对话框。

当我在编辑模式下打开对话框并进行更改时,UI 中的选择将保存到数据库中。

当我在创建模式下打开对话框时,我不必加载 ui 状态,因为我的 UI 中只有默认值。

1.) 现在我问自己是应该通过我的 DTO 从域服务中获取 UI 的默认值,还是应该在我的 ViewModels 中为 UI 定义这些默认值?

2.) 每种方法的优势是什么?

更新

 public SchoolyearCreateRequest CreateSchoolyear()
        {
            var request = new SchoolyearCreateRequest();
            request.MaxPeriodsPerWeek = TimeTable.GetMaxPeriodsPerWeek();
            request.RotationsPerWeek = TimeTable.GetRotationsPerWeek();
            request.FirstDaysOfAWeek = TimeTable.GetFirstDaysOfAWeek();
            request.FirstDayOfWeek = TimeTable.GetFirstDaysOfAWeek().First();
            request.RotationPerWeek = TimeTable.GetRotationsPerWeek().First();
            request.MaxPeriodPerWeek = TimeTable.GetMaxPeriodsPerWeek().First();
            request.ValidStartDate = DateTime.Today;
            request.ValidEndDate = (Nullable<DateTime>)null;
            return request;
        }

3 个默认值 (.First()) 取自 3 个 TimeTable.Get 方法,这不是发送到客户端的冗余数据。

您还会以这种方式定义它而不是在客户端视图模型中定义它吗?

更新

namespace TLP.MODEL.DTO
{
    public class SchoolyearCreateRequest
    {
        public IEnumerable<DayOfWeek> FirstDaysOfAWeek { get; set; }
        public IEnumerable<int> MaxPeriodsPerWeek { get; set; }
        public IEnumerable<int> RotationsPerWeek { get; set; }
        public DateTime ValidStartDate { get; set; }
        public DateTime? ValidEndDate { get; set; }
        public DayOfWeek FirstDayOfWeek { get; set; }
        public int MaxPeriodPerWeek { get; set; }
        public int RotationPerWeek { get; set; }
    }
}
4

1 回答 1

0

这不是真正的优势/劣势问题,而是关注点的清晰分离。在我看来,默认值属于域方面,既不在视图中,也不在 ViewModel 中。可以这样想:如果您愿意,假设您的域服务并使用非 MVVM 技术(非 MVVM)构建一个全新的 UI,您的默认值仍将保持不变。这是一个很好的指标,据我所知,它们不属于 UI 方面。

由于默认值也不是“真正的逻辑”,您可以考虑将它们隔离在一个配置文件中,这样就可以在不重新编译软件的情况下更改它们。

更新:

好的,明白了:所以你在做什么,基本上:你有一个可行值的列表,你想在你的 UI 中设置一个实际值(即:MaxPeriodsPerWeek== {4, 5, 7, 3, 2})。您的默认值是列表中的第一项 ( 4)。我同意,没有理由在域端设置此默认值,因为它很容易只是列表中的第一项。

在我看来,好像你在这里的一个类中有两个概念,这使得你很难理解你的请求类的实际目的是什么。显然有一组可行值MaxPeriodsPerWeek,然后有一个值表示实际设置的值,'MaxPeriodPerWeek'。我理解正确吗?

在不知道您要做什么的情况下,我认为应该将这两者分开。这是我所期望的情况,我知道你在这里:

public class SchoolyearCreateRequest
{
    public DateTime ValidStartDate { get; set; }
    public DateTime? ValidEndDate { get; set; }
    public DayOfWeek FirstDayOfWeek { get; set; }
    public int MaxPeriodPerWeek { get; set; }
    public int RotationPerWeek { get; set; }
}

完全清楚这个类及其属性的含义。您的属性名称真的很混乱:RotationPerWeek, RotationsPerWeek?? 出于英语语法原因,RotationPerWeek需要等于;)1

然后在数据层中定义一些方法来获取属性的可行值,如果确实需要的话(我怀疑 DaysOfWeek 和整数)。ItemsSource将您的 ComboBox 或任何您拥有的可行值绑定SelectedValue到您的实际值,并将其初始 SelectedIndex 设置1为具有初始默认选择。

希望我没有误解你想要做什么,虽然......

于 2013-09-28T11:38:30.940 回答