なぜEntity Frameworkを使うのか

1955 ワード

DDD(Domain-Driven Design[領域駆動設計])の観点から、なぜEntity Framework(以下、EFと略す)を使うのかを紹介するとともに、Drapperのような粗末なORMが不足している点も見て取れる.
想定業務は皆が知っている権限管理であり,実体類は以下の通りである.
public partial class User
{
    /// 
    ///    
    /// 
    public string Username { get; set; }

    /// 
    ///     
    /// 
    public string Password { get; set; }

    public virtual ICollection Roles { get; set; }
}

public partial class Role
{
    /// 
    ///   ID
    /// 
    public int ID { get; set; }

    /// 
    ///     
    /// 
    public string Name { get; set; }
}

ここまで読んで、まず考えてみてください.Userに新しいRoleを追加します.コードはどう書きますか.の次にDDDがどう書くべきか見てみましょう.
//   User ,              , DDD           
//   ,   User             ,                  !
public partial class User
{
    /// 
    ///            
    /// 
    /// 
    public void AddRole(Role role)
    {
        //    :               ,      。
        if (!this.Roles.Any(x => x.ID == role.ID))
        {
            this.Roles.Add(role);
        }
        //      Ado.Net,Drapper         。
        //     DDD,    EF      ORM。
    }
}

次に、どのように呼び出すかを見てみましょう.すべてがUserという分野のモデルをめぐっていることがわかります.
var user = userService.GetUserById(userId);
user.AddRole(role);//           ,    OOP ~
userService.Update(user);

より理想的なDDDは、userServiceも要らないが、現在は実現しにくい.
var user = User.Init(userId);
user.AddRole(role);
user.SaveChange()

理想はとても豊満で、现実はとても骨感があって、技术がDDDの思想を完全に実现することができない以外に、私达はまた性能の问题を考虑しなければならなくて、だから今のDDDのやり方は捜索の机能を推荐して、つまり现れたデータを捜索して展示用にして、更に捜索したデータに対して添削することができなくて、それではどのように速くどのように来ます.あなたはDrapperを愛用してもいいし、EF+オリジナルSqlを使ってもいいし、Ado.Netを使ってもいいです.
過程化した思想に向かってはいけないというのではなく、ネズミを捕まえることができるのは良い猫だ.しかし、先輩たちの経験では、複雑な業務に直面して、DDDの考えで解決したほうがいいということです.
だから今日あなたはOOP、DDDですか?