なぜEntity Frameworkを使うのか
1955 ワード
DDD(Domain-Driven Design[領域駆動設計])の観点から、なぜEntity Framework(以下、EFと略す)を使うのかを紹介するとともに、Drapperのような粗末なORMが不足している点も見て取れる.
想定業務は皆が知っている権限管理であり,実体類は以下の通りである.
ここまで読んで、まず考えてみてください.
次に、どのように呼び出すかを見てみましょう.すべてがUserという分野のモデルをめぐっていることがわかります.
より理想的なDDDは、userServiceも要らないが、現在は実現しにくい.
理想はとても豊満で、现実はとても骨感があって、技术がDDDの思想を完全に実现することができない以外に、私达はまた性能の问题を考虑しなければならなくて、だから今のDDDのやり方は捜索の机能を推荐して、つまり现れたデータを捜索して展示用にして、更に捜索したデータに対して添削することができなくて、それではどのように速くどのように来ます.あなたはDrapperを愛用してもいいし、EF+オリジナルSqlを使ってもいいし、Ado.Netを使ってもいいです.
過程化した思想に向かってはいけないというのではなく、ネズミを捕まえることができるのは良い猫だ.しかし、先輩たちの経験では、複雑な業務に直面して、DDDの考えで解決したほうがいいということです.
だから今日あなたはOOP、DDDですか?
想定業務は皆が知っている権限管理であり,実体類は以下の通りである.
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ですか?