NBear(.NET Bear / No Bear)是基於 .NET 2.0/C# 2.0 的全開源(BSD 協議)輕量級開發框架。名稱雙關:
核心目標:極致減少樣板代碼、零配置啟動、性能逼近手寫 ADO.NET、平滑擴展。
| 模塊 | 關鍵特性 | 技術亮點 |
|---|---|---|
| O/R 映射 | 零配置、命名約定、泛型強類型 | 動態 Emit 實體工廠、運行時緩存、接口式實體定義 |
| 序列化 | 高性能 XML/JSON 雙模 | 服務端與客戶端數據交互極簡高效 |
| 服務工廠 | IoC 容器 + 分布式服務隊列 | 基於 .NET Remoting,透明分布式調用,天然 SOA |
| Web 組件 | MasterPage/Page/UserControl 基類擴展、AJAX 控件、URL 重寫 | 加速標準 ASP.NET 開發,內置常用 UI 控件 |
| 數據訪問 | Provider 模式多數據庫源、泛型持久化接口 | 性能可比 DAAB,幾乎無配置 |
定義實體接口(IEntity),框架運行時通過 Emit 動態生成實現類並緩存,免除手寫實體類樣板代碼,同時保持強類型與智能感知。
表名、列名、主鍵、關係全由約定推導(如 OrderInfo ↔ Orders 表),無需 XML/hbm 映射文件,約定可覆蓋。
統一 IDataProvider 接口,官方提供 SQL Server/Oracle/Access/MySQL 等實現,擴展新數據庫僅需實現接口。
| 維度 | NHibernate | NBear |
|---|---|---|
| 配置複雜度 | 高(hbm.xml、cfg.xml、映射屬性) | 零(命名約定+接口定義) |
| 學習曲線 | 陡峭 | 平緩(接口式、約定優於配置) |
| 性能 | 中等(反射、代理、延遲加載開銷) | 高(Emit 直連、緩存、無代理) |
| 需求變更響應 | 修改映射文件、重編譯 | 修改接口定義即時生效 |
| 適用規模 | 中大型複雜域模型 | 中小型、敏捷、高性能場景 |
// 1. 定義實體接口
public interface IOrder : IEntity {
int OrderId { get; set; }
string CustomerName { get; set; }
DateTime OrderDate { get; set; }
}
// 2. 獲取持久化服務(無配置)
var factory = new ServiceFactory(); // 內置 IoC
var orderRepo = factory.GetService<IRepository<IOrder>>();
// 3. CRUD 極簡
var order = orderRepo.Create();
order.CustomerName = "NBear User";
order.OrderDate = DateTime.Now;
orderRepo.Insert(order); // 自動映射表 Orders,主鍵 OrderId
// 4. 查詢
var orders = orderRepo.Find(o => o.CustomerName == "NBear User");
當你需要:快速交付、拒絕配置地獄、追求原生性能、預期頻繁需求變更、團隊規模中小、技術棧標準 .NET 2.0+,NBear 是比重型 ORM 更務實的選擇。它不試圖解決所有問題,但以 20% 的複雜度解決 80% 的數據訪問與分布式服務需求——這正是帕累托法則在框架設計中的完美踐行。