将域中的 属性 大小复制到流畅的 api 和视图模型

Replicate property size from domain to fluent api and viewmodel

你觉得这个主意好吗...

我想将我的属性最大和最小长度从域复制到应用程序的其余部分。

例如,我有我的 Customer 实体,CustomerConfiguration(对于 entity framework)和 CustomerViewModel

我必须用 fluent api 定义客户名称的最大长度,然后在 ViewModel 上进行数据注释。如果我决定改变尺寸,我必须改变所有地方。我考虑过在域 class 中的常量中定义它,例如:

代码示例

  public class Customer {
  .....
  public const int Name_Max = 30;
  public string Name { get; set; }
 .......

public class CustomerConfig.....

 this.Property(e => e.Name).HasMaxLength(Customer.Name_Max);

.....

public class CustomerViewModel {
 ......

 [StringLength(Customer.Name_Max)]
 public string Name { get;set;} ....

这是个好主意还是有什么建议反对这种"replication"?

我认为你的方法没有问题,相反,我们在我工作的所有公司项目中都使用这种模式。

我会在您的模型中做的一件事是使用始终有效的实体原则。它会让你的生活更轻松。

使用这个原则,您可以确保您的实体始终处于有效状态。

在这种情况下,您的属性的 setter 方法会执行如下操作:

public class Customer
{
    public const int Name_Max = 30;

    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            if (value != null && value.Length > Name_Max)
                throw new ArgumentException();

            name = value;
        }
    }
}

参见:Validation in Domain-Driven Design (DDD)