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

本文关键字:API 模型 视图 属性 复制 | 更新日期: 2023-09-27 17:56:17

你认为这是个好主意吗?

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

例如,我有我的Customer实体、CustomerConfiguration(用于实体框架)和CustomerViewModel

我必须在流畅的 API 中定义客户名称的最大长度,然后在 ViewModel 上定义数据注释。如果我决定改变大小,我必须在所有地方改变。我想过在域类中的常量中定义它,例如:

代码示例

  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;} ....

这是一个好主意还是有一些反对这种"复制"的建议?

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

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

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

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

在这种情况下,属性的 setters 方法将执行以下操作:

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;
        }
    }
}

请参见:域驱动设计 (DDD) 中的验证