Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义字段值是域驱动器设计中的ValueObject还是实体_C#_.net_Entity Framework Core_Domain Driven Design_Ef Core 5.0 - Fatal编程技术网

C# 自定义字段值是域驱动器设计中的ValueObject还是实体

C# 自定义字段值是域驱动器设计中的ValueObject还是实体,c#,.net,entity-framework-core,domain-driven-design,ef-core-5.0,C#,.net,Entity Framework Core,Domain Driven Design,Ef Core 5.0,我正在使用EF Core,我有一个场景,用户可以创建一个或多个自定义字段和一些客户端。 对于每个客户机,用户必须填写自定义字段值。我不清楚CustomFieldValue是ValueObject还是实体。它在哪里适合我的设计?在客户实体或CustomField实体中。 请注意,某些自定义字段不需要填写,因此它们可能没有值 public class CustomField : Entity<long> { [Required] public string Name {

我正在使用EF Core,我有一个场景,用户可以创建一个或多个自定义字段和一些客户端。
对于每个客户机,用户必须填写自定义字段值。我不清楚CustomFieldValue是ValueObject还是实体。它在哪里适合我的设计?在客户实体或CustomField实体中。
请注意,某些自定义字段不需要填写,因此它们可能没有值

public class CustomField : Entity<long>
{
    [Required]
    public string Name { get; private set; }

    public bool IsRequired { get; private set; }
    
    protected CustomField()
    {
    }

    public CustomField(long id, string name, bool isRequired)
    {
        Id = id;
        Name = name;
        IsRequired = isRequired;
    }
}

public class CustomFieldValue
{    
    public string Text { get; private set; }       
}

public class Client : Entity<long>
{
    [Required]
    public string Name { get; private set; }

    //....Some other properties of client
}
公共类自定义字段:实体
{
[必需]
公共字符串名称{get;private set;}
需要公共布尔值{get;private set;}
受保护的自定义字段()
{
}
公共自定义字段(长id、字符串名称、布尔值为必填项)
{
Id=Id;
名称=名称;
IsRequired=IsRequired;
}
}
公共类CustomFieldValue
{    
公共字符串文本{get;private set;}
}
公共类客户端:实体
{
[必需]
公共字符串名称{get;private set;}
//..客户的其他一些属性
}

我会这样建模:

public class CustomField : Entity<long>
{
    [Required]
    public string Name { get; private set; }

    public bool IsRequired { get; private set; }
    
    protected CustomField()
    {
    }

    public CustomField(long id, string name, bool isRequired)
    {
        Id = id;
        Name = name;
        IsRequired = isRequired;
    }
}

public class CustomFieldValue
{    
    public long Id {get; private set;}
    public string Text { get; private set; } 
      
    public CustomField Field {get; private set;}
}

public class Client : Entity<long>
{
    [Required]
    public string Name { get; private set; }

    IEnumerable<CustomFieldValue> CustomFieldValues {get; private set;}
    //....Some other properties of client
}
公共类自定义字段:实体
{
[必需]
公共字符串名称{get;private set;}
需要公共布尔值{get;private set;}
受保护的自定义字段()
{
}
公共自定义字段(长id、字符串名称、布尔值为必填项)
{
Id=Id;
名称=名称;
IsRequired=IsRequired;
}
}
公共类CustomFieldValue
{    
公共长Id{get;private set;}
公共字符串文本{get;private set;}
公共CustomField字段{get;private set;}
}
公共类客户端:实体
{
[必需]
公共字符串名称{get;private set;}
IEnumerable CustomFieldValues{get;private set;}
//..客户的其他一些属性
}
CustomFieldValue
是实体吗?
值对象可以互换,一个对象可以被具有相同内容的另一个对象替换。如果我们将它们与它们所属的客户机分开来看,它们实际上就像一对“字段Id,值”,可以互换,这使它们成为一个值对象。

根据上面的模型,客户机没有CustomFieldValue集,这是我的主要要求。也许我最初的描述不够清楚,让你感到困惑。自定义字段在整个系统中创建(通过系统设置),一旦创建,所有新的或现有的客户端都可以使用它们。我编辑了我的回复。试试这个型号。它可能适合也可能不适合,这取决于您希望如何使用它。因此,如果它们是客户端的扩展属性,则意味着它们是值对象而不是实体