1. 程式人生 > >ATK-DataPortal 設計框架(二)

ATK-DataPortal 設計框架(二)

開源中國 mes -- 上下 urn 通用 mar ESS rate

在信息的交換過程中,總是有此相同相似的功能,由於業務的各自不同,由同一類型來處理諸如增刪改查等常見的信息處理方式。從日常的對些類行為操作為生成的類分析,大量雷同的代碼遍布整個項目。框架中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 設計框架(二)