“YbRapidSolution for MVC”是 YbSoftwareFactory 最新的代碼生成插件,可一鍵生成基於ASP.NET MVC的解決方案源代碼。其生成的 Demo 項目地址:http://mvcdemo.yellbuy.com/。本文末尾還將提供一個 Dynamic Linq 實現源碼的下載地址,供感興趣的朋友下載。
注:該 Demo 應用程序的源碼完全通過 YbSoftwareFactory 一鍵生成,在此基礎上二次開發將大大節約開發周期。
核心特性:
1、界面層使用ASP.NET MVC 4.0+JQuery EasyUI,基於Razor 語法,界面美觀,操作簡便。
2、集成Web API,可通過 Web API 對外發布數據,提供GET\POST\PUT\DELETE四個方法,可供 Web、WinForm、WPF、Silverlight 等所有類型的客戶端調用和管理業務數據。
如下是Web API發布的數據:
3、通過 Dynamic Linq 實現數據庫的模糊查詢和分頁,顯著提高大數據量下的性能,本文最后將提供 Dynamic Linq 實現源碼的下載地址。
基本原理:
需要在服務器端實現的基於泛型的ApiController類中暴露如下GET分頁方法
public ResponseResult<M> Get(string filter, int page, int rows, string sort, string order) { var table = Table; if(!string.IsNullOrWhiteSpace(filter)) { var str=GetFilterFormat(); if(!string.IsNullOrWhiteSpace(str)) table = table.Where(str,filter); } var total = table.LongCount(); table = table.OrderBy(string.Format("{0} {1}", sort, order)).Skip((page - 1)*rows).Take(rows); var items = table.ToList(); var models = InjectFrom(items); return new ResponseResult<M>(total, models); }
本方法后面的“rows”, “sort”, “order”三個參數為JQuery EasyUI datagrid設置為服務器端分頁所需的默認參數,通過在前台頁面中設置datagrid的“pagination: true”后將會自動追加這些參數,因此該方法的參數順序必須和datagrid的調用保持一致。
filter為追加的查詢參數,用於模糊匹配,需要在前台的JS中在查詢時動態設置其參數值:
function setQueryParams(value) { var queryParams = grid.datagrid('options').queryParams; queryParams.filter = value; grid.datagrid('options').queryParams = queryParams; }
同時后台的每個實體需要實現如下的過濾表達式,以便支持查詢后的數據庫分頁,此處使用了Dynamic Linq 技術,你可自定義符合自身需求的查詢方式:
protected override string[] FilterArray { get { return new[] { "ProductName.Contains(@0)", "QuantityPerUnit.Contains(@0)", "Categories.CategoryName.Contains(@0)", "Suppliers.CompanyName.Contains(@0)" }; } }
4、數據訪問層使用 EntityFramework,使用Code First,基於其提供的IQueryable接口實現查詢和分頁。
5、數據編輯界面,自動處理One-Many的關系:
6、集成方便易用的數據字典功能
可排序的網格數據字典界面:
i嗎
網格數據字典的管理使用通用API,你僅需定義所要管理的主代碼即可:
//此處添加需要的主代碼 public IEnumerable<ConcreteData> Get() { var items = new List<ConcreteData>(); items.Add(new ConcreteData() { ConcreteType = "類別"}); items.Add(new ConcreteData() { ConcreteType = "顏色" }); items.Add(new ConcreteData() { ConcreteType = "民族" }); return items; }
可排序的層次數據字典:
層次數據字典的管理也使用通用API,你同樣僅需定義所要管理的主代碼即可:
public IEnumerable<HierarchyData> Get() { var items = new List<HierarchyData>(); //此處添加需要的主代碼 items.Add(new HierarchyData() { HierarchyType = "行政區域" }); items.Add(new HierarchyData() { HierarchyType = "部門" }); return items; }
7、集成完善的權限控制功能
登錄用戶管理界面:
角色管理界面:
附件一:點擊下載Dynamic Linq的源代碼