針對 ADO.NET 封裝框架的常見疑問,作者深度解析設計取捨,涵蓋基類選擇、SQL 置放層級、多資料庫支援、ORM 定位與反射效能等核心議題。
初版 BaseSqlMapper 為抽象類,利用泛型約束在基類一次定義,衍生類免重複。後採納建議改為 ISqlMapper 介面,貫徹「面向介面編程」,解耦更徹底。
嚴重不妥。 範例為偷懶示範,實務上 SQL 應封裝於 DAL 層(如 PersonDao.Insert(Person model)),表現層僅操作領域模型,嚴守分層架構。
理想方案:抽象工廠 + 配置檔 + 反射。
務實方案:配置 sqlType 枚舉(0=SQL Server, 1=Oracle, 2=MySQL),MapperUtil 靜態建構式依類型實例化對應 IDbOperation 實作:
public enum SqlEnum { SQLServer=0, Oracle=1, MySql=2 }
static MapperUtil() {
// 讀取 sqlType
switch (sqlType) {
case 0: operation = new SqlServer(connStr, timeout); break;
case 1: operation = new Oracle(connStr, timeout); break;
case 2: operation = new MySql(connStr, timeout); break;
}
new SqlMapper(operation); // 註冊到字典
}
新增資料庫只需實作 IDbOperation,擴充性極佳。