最近花時間弄了一個關於fireasy使用的demo,已放到 github 上供大家研究,https://github.com/faib920/zero 該 demo 演示瞭如何使用 fireasy 創建一個後臺的管理系統。解決方案包含 asp.net mvc5 和 asp.net core 兩個示例 ...
最近花時間弄了一個關於fireasy使用的demo,已放到 github 上供大家研究,https://github.com/faib920/zero
該 demo 演示瞭如何使用 fireasy 創建一個後臺的管理系統。解決方案包含 asp.net mvc5 和 asp.net core 兩個示例,使用 SQLite 資料庫,基於 easyui 1.4.3 構建。
用戶名: admin 密碼: admin
特點
- 資料庫操作與 entity framework 的用法較相似,也是使用 linq ,降低了學習成本,然而與後者所不同的是,提供了 Insert、Update、Delete、Batch 等方法更快捷地進行操作,更貼近於 sql 原生語言。
- 基於 easyui 構建的後臺管理系統,view 層採用 ajax 進行數據交互,因此在 action 接收參數時,直接通過 json 反序列化的方式進行 model bind,這樣的好處是,對於複雜的提交的數據結構,比如多個 list,嵌套的對象等,都很容易在 action 里接收。
- action 接收的實體對象能夠主動區分哪些屬性被修改,這得益於 LightEntityJsonConverter 轉換器,這樣,新增或修改時,不必考慮原有數據被覆蓋的可能。
- 沒有創建 ViewModel,而直接使用 DataModel,這樣節省了很多開發時間,然而這樣帶來的一個問題,可能也是使用 entity framework 一樣面臨的問題,那就是 <b>延遲載入</b> 屬性會被一概序列化。因此 json 序列化也被優化過,採用 fireasy json serializer 能夠主動識別延遲載入對象。
- 沒有 ViewModel,但是可以擴展更多的屬性給前端使用,在實體類_Ex 中,可以定義非 virtual 的屬性,然後用 ExtendAs 擴展方法,這樣避免了 new { } 這樣繁瑣的賦值操作。
- services 是基於 AOP 的實例,提供了事務處理、緩存處理等攔截器,只需要標識特性就可以實現這些功能。這也必須使用 fireasy 的 IOC 容器。
項目結構
- Fireasy.Zero.Models 實體模型
- Fireasy.Zero.Infrastructure 基礎設施
- Fireasy.Zero.Helpers 相關輔助
- Fireasy.Zero.Services 數據服務
- Fireasy.Zero.AspNet Mvc5示例
- Fireasy.Zero.AspNetCore Core示例
Mvc5 配置
有關 fireasy 的配置請參考 web.config 里的 fireasy 小節,其中:
dataInstances 為資料庫實例配置,當前使用 sqlite 資料庫
containers 為IOC容器配置
mvc/bundles 配置bundle資源文件
註意 global 里對 fireasy 的配置,這些都是必要的
BundleManager.Config(); //MVC控制器工廠添加IOC容器 var container = ContainerUnity.GetContainer(); ControllerBuilder.Current.SetControllerFactory(new ControllerFactory(container)); //easyui驗證綁定 SettingsBindManager.RegisterBinder("validatebox", new ValidateBoxSettingBinder()); SettingsBindManager.RegisterBinder("numberbox", new NumberBoxSettingBinder()); //使用 LightEntity 反序列化轉換器 GlobalSetting.Converters.Add(new LightEntityJsonConverter()); //從 Container 里反轉類型反序列化 GlobalSetting.Converters.Add(new ContainerJsonConverter(container));
core 配置
以上面示例相似,core 的配置在 appsettings.json 里,也是對資料庫實例,IOC容器進行配置。
Startup 類文件里的配置
public void ConfigureServices(IServiceCollection services) { services.AddFireasy(Configuration) .AddIoc(ContainerUnity.GetContainer()); //添加IOC容器 services.AddMvc() .ConfigureFireasyMvc(options => { options.Converters.Add(new LightEntityJsonConverter()); //action接收的實體對象,是經過 fireasy 底層處理過的 }) .ConfigureEasyUI(); }