使用MVC模式,我的域对象应该知道我的持久性实体吗?

时间:2018-01-21 15:46:42

标签: c# asp.net-mvc entity-framework dry single-responsibility-principle

我经常发现自己在域对象中编写了presistence层的实现细节。在我即将发布的示例中,能够将PersonRecord传递给构造函数以映射属性似乎很有用。

注意:此示例中PersonRecord是实体框架实体。

public class Person 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    public Person(Data.persistence.PersonRecord entity)
    {
        Id = entity.Id
        Name = entity.Name
        Email = entity.Email
    }
}

我还发现在保存数据时将属性映射回实体非常有用。

public void UpdateEntity(Data.persistence.PersonRecord entity)
{
    entity.Id = Id
    entity.Name = Name
    entity.Email = Email
}

然后我有一个执行保存的实体的存储库。

我对这种方法的担忧是我的域对象与实体框架相结合,因此很难替换其他SRP违规问题。

我的顾虑是否合理?

我可以通过交换依赖关系来解决构造函数问题,将每个属性作为参数并在存储库中传入这些值。

我可以为更新实体做同样的事情,我不需要域模型中的任何额外逻辑,而是让存储库负责映射属性。

通过做这些事情,我还需要做以下事情:

  1. 存储库中的每个检索方法都需要在域对象的构造函数上映射每个属性的值。这违反了DRY原则,除非该逻辑被抽象为工厂函数等。
  2. 还需要存储库中的更新方法来映射每个属性,这似乎没问题,因为可能只有一个更新方法。
  3. 我错过了一招吗?

    如果没有,哪种方法最好?

0 个答案:

没有答案