ATK-DataPortal 設計框架(二)
在信息的交換過程中,總是有此相同相似的功能,由於業務的各自不同,由同一類型來處理諸如增刪改查等常見的信息處理方式。從日常的對些類行為操作為生成的類分析,大量雷同的代碼遍布整個項目。框架中xxxHandel的類,是處理此類問題的操作類型,簡化了業務類的復雜度。
xxxHandel類采用大量泛型方法,各業務可從此類型派生,這樣各業務類就有了xxxHandel類所具有的能力,同時這些方法均為虛方法,派生類可以根據實際情況調整,修改或增加,以滿足開發人員的需要。
一、BusinessBaseHandle
BusinessBaseHandle類是服務類與前端之間的橋梁
/// <summary>
/// 通用執行基類
/// </summary>
/// <typeparam name="Es">BLL列表類</typeparam>
/// <typeparam name="E">BLL類</typeparam>
/// <typeparam name="Ds">UI服務列表類</typeparam>
/// <typeparam name="D">UI服務DTO類</typeparam>
public abstract class BusinessBaseHandle<Es, E, Ds, D>
where Es : BusinessListBase<E>
where E : BusinessBase
where D : BaseUIDto<D, E>
where Ds : BaseListUIDto<D, E>
{
}
(一)屬性
1、protected ILifetimeScope _lc:受保護的屬性Autofac的一個接口,以滿足類型內部支持IOC功能,使操作對泛型類型的約束最低;
2、AtkDataportalcontext:數據門戶上下文,主要用要支持WCF服務;
(二)方法
1、Delete
public virtual OperateState Delete(ExpConditions<D> znexp)
{
var item = _lc.Resolve<D>();
return Delete(item, znexp);
}
其中(ExpConditions<D>在Atk.CustomExpression中定義,在後續文檔中會單獨介紹;
2、Insert
public virtual OperateState Insert(D item, ExpConditions<D> znexp)
{
if (!_power.Create)
{
return OperateState.FailState("沒有增加記錄權限!");
}
return ItemHandleState(item, _dataportal.Insert, znexp);
}
3、Update
public virtual OperateState Update(D item, ExpConditions<D> znexp)
{
if (!_power.Edit)
{
return OperateState.FailState("沒有編輯記錄權限!");
}
//強制清除條件,以使記錄更新為當前記錄,而非批量更新
znexp.ClearWhere();
return ItemHandleState(item, _dataportal.Update, znexp);
}
4、Delete
public virtual OperateState Delete(ExpConditions<D> znexp)
{
var item = _lc.Resolve<D>();
return Delete(item, znexp);
}
5、相關批處理方法,如BatchUpdate,BatchDelete ,BatchUpdate是為支持前端面為表格同時表格支持此類行為時,簡化業務處理的難度;
6、 GetNew()方法,New一個當前所支持的業務類,使用的是Aufac反射;
(三)、示例
以下當我們要使用此操作類型時示例代碼,AzCustomersWebHandle是一個繼承於BusinessBaseHandle
public sealed class AzCustomersWebHandle:BusinessBaseHandle<AzCustomersListEntity,
AzCustomersEntity,
AzCustomersListWebDto ,
AzCustomersWebDto>
{}
在業務操作時(以下是在AzCustomersController中定義)
private readonly AzCustomersWebHandle _handle = AzCustomersWebHandle.GetWebHandle();
public IActionResult Edit(string Id)
{
var bizExp = _handle.GetExp();
bizExp.AddAndWhere(s => s.CustomerID == Id);
var model = _handle.Get(bizExp);
return View(model);
}
二、BusinessBaseSpHandle
BusinessBaseSpHandle用於處理可返回結果的存儲過程的操作類
/// <summary>
/// 存儲過程查詢類操作基類
/// </summary>
/// <typeparam name="Es">BLL列表類</typeparam>
/// <typeparam name="E">BLL類</typeparam>
/// <typeparam name="Ds">UI服務列表類</typeparam>
/// <typeparam name="D">UI服務DTO類</typeparam>
public abstract class BusinessBaseSpHandle<Es, E, Ds, D>
where Es : BusinessListBase<E>
where E : BusinessBase
where D : BaseUISpDto<D, E>
where Ds : BaseListUISpDto<D, Ds, E, Es>
{
}
由於處理的是存儲過程,因而基於通常的場景,這類存儲過程返來的一系列記錄信息。所以BusinessBaseSpHandle只定了GetList方法。
三、BusinessBaseExecHandle
BusinessBaseExecHandle用於執行存儲過程,用類存儲過程通常是一系列SQL操作,並且不返回結果。其定義為:
public abstract class BusinessBaseExecHandle<E, D>
where E : BusinessBase
where D : BaseUIExecDto<E>
{ }
該類只定義了一個Execute(D item)方法;
----
ATK
1、一個完整支持分布式服務框架;
2、代碼生成工具,可快速生成基於服務框架的應用;
3、其他支持庫
4、完整代碼可在GitHub的https://github.com/azthinker ;開源中國 https://gitee.com/azthinker
目標:使應用開發,低代碼、高效率、快叠代
有興趣的請在QQ群中參與討論、聯系作者 QQ群名稱:ATK高效開發 ,QQ群號:747049962
也可發郵件至:[email protected]
Demo中的數據庫、編譯好的代碼工具鏈接:https://pan.baidu.com/s/1B9RQm7_-SFyhLb_HLIGs0w 密碼:85q6
ATK Demo使用的數據庫 : https://download.csdn.net/download/xftyyyyb/10675497
ATK自動代碼工具 :https://download.csdn.net/download/xftyyyyb/10675490
ATK-DataPortal 設計框架(二)