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

Spring.NET 企業架構實踐(三):NHibernate 持久層重構 PetShop 4.0

     編輯:關於.NET

前言

本文說明如何以 NHibernate 取代 PetShop 4.0 原本的 DAL,建立通用持久層,解決重複 CRUD 程式碼與資料庫移植難題。

持久層定義

專門負責資料持久化的獨立層次,對應「單一職責」原則。PetShop 4.0 DAL 直接寫 SQL、手動映射 DataReader 到 Model,每張表重複 CRUD,支援多資料庫需寫多套 DAL。

三層架構

ORM 與 NHibernate

  • ORM:Object Relational Mapping,解決「阻抗不匹配」(關聯式資料表 vs 物件導向)
  • 開發 30% 時間處理 SQL,ORM 可大幅提速、降低維護成本
  • NHibernate:Hibernate .NET 版,支援 Linq to NHibernate 達成完全面向物件查詢
  • 實體為 POCO/POJO,脫離框架可用

ORM架構

Repository 模式封裝通用 CRUD

IRepository<T> 介面

public interface IRepository<T> where T : class
{
    T Get(object id);
    object Save(T entity);
    void Update(T entity);
    void SaveOrUpdate(T entity);
    void Delete(T entity);
    IQueryable<T> LoadAll();
}

RepositoryBase<T> 基底實作


using Spring.Data.NHibernate.Generic.Support;
using NHibernate.Linq;

public abstract class RepositoryBase<T> : HibernateDaoSupport, IRepository<T> where T : class
{
    public virtual object Save(T entity) => HibernateTemplate.Save(entity);
    public virtual T Get(object id) => HibernateTemplate.Get<T>(id);
    public virtual IQueryable<T> LoadAll() => Session.Linq<T>();
    public virtual void Update(T entity) => HibernateTemplate.Update(entity);
    public virtual void Delete(T entity) => HibernateTemplate.Delete(entity);
    public virtual void SaveOrUpdate(T entity) => HibernateTemplate.SaveOrUpdate(entity);
}

優勢總結

  • CRUD 程式碼只寫一次,所有實體繼承即可使用
  • 資料庫遷移僅修改設定檔方言
  • Spring.NET 管理 NHibernate Session 與交易,減少樣板碼
  • 程式碼行數大幅減少,可維護性與彈性提升

原始出處

Spring.NET 企業架構實踐(三)

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