首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

實例解析繼承體系重構與 ORM 映射:從三元關聯到介面隔離的最佳實踐

     編輯:關於ASP.NET

基於「雙魚座」同學的三元繼承關聯案例,本文分兩階段實作:

  1. 直接實作三種 ORM 繼承映射方案(單表、具體表、擴展表)。
  2. 以介面隔離重構共同概念,再對重構後體系實作三種映射。

所有代碼基於 NBear 介面式實體定義。

1. 原始三元繼承體系介面定義

原始繼承體系類別圖

2. 單表繼承映射實作

採單表 AllInOne 含所有欄位,FilterMark 區分型別。僅 PrivilegeOwner、User、UserGroup 可查詢,其餘介面僅供概念抽象。

[Table(IsView = true)]
public interface PrivilegeOwner : IEntity {
  [PrimaryKey] int Id { get; }
  string Name { get; set; }
}

[Table("AllInOne", AdditionalWhere = "FilterMark <= 20", IsView = true)]
public interface User : PrivilegeOwner { }

[Table("AllInOne", AdditionalInsert = "FilterMark = 1", AdditionalWhere = "FilterMark = 1")]
public interface LocalUser : User {
  string LoginId { get; set; }
  string Password { get; set; }
}

[Table("AllInOne", AdditionalInsert = "FilterMark = 2", AdditionalWhere = "FilterMark = 2")]
public interface AgentUser : User {
  string LoginId { get; set; }
}

[Table("AllInOne", AdditionalInsert = "FilterMark = 3", AdditionalWhere = "FilterMark = 3")]
public interface GhostUser : User { }

[Table("AllInOne", AdditionalInsert = "FilterMark = 21", AdditionalWhere = "FilterMark = 21")]
public interface UserGroup : PrivilegeOwner {
  string Comment { get; set; }
}

後續將展示具體表映射、擴展表映射,以及介面隔離重構後的對應實作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved