“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的原始碼