编程语言
首页 > 编程语言> > c# – 使用关系中的属性为子类建模的正确方法

c# – 使用关系中的属性为子类建模的正确方法

作者:互联网

我有一个有雇主名单的诉讼类.要求列表中的一个雇主必须被设定为主要雇主.我想到了两种方法来满足这个业务规则.

解决方案1

这是我当前的实现,我有一个MainEmployer,我在同一个属性和Employers列表上存储相同的实体:

public class Lawsuit()
{
    public int Id { get; set; }

    public virtual Employer MainEmployer { get; set; }
    public virtual ICollection<Employer> Employers { get; set; }
}

解决方案2

我还可以使用名为Main的bool属性创建一个中间类EmployerLawsuit:

public class LawsuitEmployer()
{
    public int Id { get; set; }
    public bool Main { get; set; }

    public virtual Employer Employer { get; set; }
    public virtual Lawsuit Lawsuit { get; set; }
}

public class Lawsuit()
{
    public int Id { get; set; }

    public virtual ICollection<EmployerLawsuit> Employers { get; set; }
}

考虑到结果数据库(我正在使用实体框架)的性能和SOLID的原理,这两种方法中的哪一种更好?或者有更好的方法来模拟这些实体吗?

解决方法:

我坚持使用#1方法.这只是诉讼与雇主之间的一对多/多对一关联.也就是说,在检索Lawsuit持久对象时,所谓的关联将作为SQL连接的一部分被检索,此外,您不需要查询所有雇主以检查哪一个是主要雇主.

在面向对象编程方面,#1听起来更好,并且当使用O / RM映射到关系数据库或NoSQL数据库时,域将表现更好.

关于#2

实际上#2听起来更像是以关系方式设计域名.它将是一个可查询的域,而面向对象的编程生成分层模型,这是用关联表达域而不是使用标志或标识符来定义域实体关系的主要原因.

您不需要标记来将实体标记为主要雇主并为此实现层次结构.保持简单:设置整个MainEmployer关联,然后去!

标签:c,oop,entity-framework,solid-principles
来源: https://codeday.me/bug/20190611/1221183.html