欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于A(yíng)BP框架實(shí)現(xiàn)數(shù)據(jù)字典開(kāi)發(fā)

 更新時(shí)間:2021年12月30日 09:42:10   作者:微笑刺客D  
本文詳細(xì)講解了基于A(yíng)BP框架實(shí)現(xiàn)數(shù)據(jù)字典開(kāi)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在業(yè)務(wù)型的系統(tǒng)開(kāi)發(fā)中,我們需要維護(hù)各種個(gè)樣的類(lèi)型,比如客戶(hù)類(lèi)型、客戶(hù)行業(yè)、商品類(lèi)型等等,這些類(lèi)型往往信息量不多,并且相似度極高,如果采用一類(lèi)型一表去設(shè)計(jì),將會(huì)造成極大的工作量,通過(guò)將這部分類(lèi)型的信息進(jìn)行抽象,利用字段去存儲(chǔ)類(lèi)型區(qū)分,共用表結(jié)構(gòu),來(lái)達(dá)到兼容各種類(lèi)型的功能,也就是設(shè)計(jì)一個(gè)數(shù)據(jù)字典,而對(duì)于一個(gè)具體類(lèi)型來(lái)講,是有多個(gè)選項(xiàng)的,比如性別,有男女,行業(yè)有工農(nóng)商等,對(duì)于這部分選項(xiàng),可抽象為某個(gè)類(lèi)型下的字典項(xiàng),即數(shù)據(jù)字典項(xiàng)。

一、數(shù)據(jù)字典設(shè)計(jì)思路

1、從客戶(hù)類(lèi)型、商品類(lèi)型、行業(yè)類(lèi)型來(lái)抽象考慮,首先三者都存在一個(gè)類(lèi)型描述,即客戶(hù)、商品、行業(yè),同時(shí),三者是本質(zhì)是不同的,并且,隨著業(yè)務(wù)上的需求越來(lái)越多,更多的xx類(lèi)型將會(huì)加入,因此,單從類(lèi)型考慮出發(fā),就存在三個(gè)點(diǎn)了,如類(lèi)型名稱(chēng)、類(lèi)型獨(dú)立、數(shù)量擴(kuò)展,因此在考慮表結(jié)構(gòu)設(shè)計(jì)時(shí),就可以先考慮到這三點(diǎn)了,同時(shí)還有一個(gè)關(guān)鍵的信息,便是,在系統(tǒng)設(shè)計(jì)過(guò)程中,這些類(lèi)型其實(shí)便已經(jīng)確定完畢了,而不是說(shuō),在開(kāi)發(fā)完畢,再去系統(tǒng)中增加類(lèi)型。

2、從具體的某個(gè)類(lèi)型出發(fā)考慮,比如以商品類(lèi)型為例,存在日用品、電子產(chǎn)品、化妝品等,同樣是存在幾個(gè)關(guān)鍵信息,比如類(lèi)型項(xiàng)名稱(chēng)、類(lèi)型項(xiàng)獨(dú)立、類(lèi)型項(xiàng)數(shù)量擴(kuò)展,類(lèi)型項(xiàng)的歸屬,而這部分信息,往往是由客戶(hù)去維護(hù)的,屬于系統(tǒng)開(kāi)發(fā)完畢后期的信息維護(hù),在此,不考慮類(lèi)型項(xiàng)的先后順序問(wèn)題,如有需要可以擴(kuò)展。

按照這些信息點(diǎn),可以對(duì)數(shù)據(jù)字典設(shè)計(jì)一些必要的字段,如類(lèi)型名稱(chēng)即TypeName、類(lèi)型獨(dú)立便是類(lèi)型間相互獨(dú)立,但是這里也存在一個(gè)類(lèi)型間的上下父子問(wèn)題,暫不加入進(jìn)來(lái),該父子問(wèn)題使用場(chǎng)景較少,但又存在,如果按照“二八原則”的話(huà),我還是喜歡把“八”的部分完成。對(duì)于數(shù)據(jù)字典項(xiàng)而言,按照給定的必要信息,設(shè)計(jì)成如下結(jié)構(gòu),其中的業(yè)務(wù)代碼,是需要唯一的,比如對(duì)于性別來(lái)將,業(yè)務(wù)代碼便是1或0,來(lái)代表男女,這部分可由客戶(hù)的系統(tǒng)管理員進(jìn)行維護(hù)。

二、完成數(shù)據(jù)字典設(shè)計(jì)

在明確了這些基礎(chǔ)信息后,開(kāi)始在項(xiàng)目中完成設(shè)計(jì)過(guò)程,首先得明確數(shù)據(jù)字典本身的歸屬,數(shù)據(jù)字典是為整個(gè)業(yè)務(wù)而服務(wù)的,因此我把它劃分到核心層這一級(jí)別中,首先在領(lǐng)域?qū)釉O(shè)置Core層文件夾,用來(lái)存放為整個(gè)業(yè)務(wù)提供基礎(chǔ)設(shè)施的功能模塊。

1、在Core層中加入數(shù)據(jù)字典模塊,結(jié)構(gòu)設(shè)計(jì)如:

開(kāi)始創(chuàng)建數(shù)據(jù)字典類(lèi),并添加設(shè)計(jì)的字段,以保證夠用為前提,或許更多場(chǎng)景下會(huì)出現(xiàn)諸如父子字典情形,或是對(duì)字典內(nèi)容的描述等,暫不考慮。

/// <summary>
/// 核心_數(shù)據(jù)字典
/// </summary>
[Table("Core_DataDictionary")]
public class DataDictionary : Entity<long>
{
    public const int MaxNameLength = 30;

    /// <summary>
    /// 字典類(lèi)型
    /// </summary>
    [StringLength(MaxNameLength)]
    public string TypeName { get; set; }

    /// <summary>
    /// 關(guān)聯(lián)數(shù)據(jù)字典項(xiàng)
    /// </summary>
    public virtual ICollection<DataDictionaryItem> DataDictionaryItem { get; set; }
}

在增加數(shù)據(jù)字典項(xiàng)類(lèi),并添加設(shè)計(jì)時(shí)的字段信息,這里我通過(guò)數(shù)據(jù)注解完成對(duì)字段的一些約束,如長(zhǎng)度約束,表名的映射等。

/// <summary>
/// 核心_數(shù)據(jù)字典項(xiàng)
/// </summary>
[Table("Core_DataDictionaryItem")]
public class DataDictionaryItem : Entity<long>
{
    public const int MaxCodeLength = 5;
    public const int MaxNameLength = 30;

    /// <summary>
    /// 業(yè)務(wù)代碼
    /// </summary>
    [StringLength(MaxCodeLength)]
    public string Code { get; set; }

    /// <summary>
    /// 類(lèi)型項(xiàng)名稱(chēng)
    /// </summary>
    [StringLength(MaxNameLength)]
    public string Name { get; set; }

    /// <summary>
    /// 數(shù)據(jù)字典Id
    /// </summary>
    public long DataDictionaryId { get; set; }

    /// <summary>
    /// 關(guān)聯(lián)數(shù)據(jù)字典項(xiàng)
    /// </summary>
    public virtual DataDictionary DataDictionary { get; set; }
}

加入到DbContext中,添加一個(gè)遷移并更新數(shù)據(jù)庫(kù)。

2、開(kāi)始完成應(yīng)用層的封裝工作,在應(yīng)用層定義了幾個(gè)常用的對(duì)字典的一些操作,諸如添加刪除修改等常見(jiàn)操作,此處的數(shù)據(jù)字典暫時(shí)通過(guò)手動(dòng)加入,而不是將已有數(shù)據(jù)字典或是更改了的數(shù)據(jù)字典自動(dòng)更新到數(shù)據(jù)庫(kù)中。

/// <summary>
/// 獲取數(shù)據(jù)字典集合
/// </summary>
/// <returns></returns>
Task<ListResultDto<DataDictionaryListDto>> GetAllDataDictionaryListAsync();

/// <summary>
/// 獲取數(shù)據(jù)字典記錄
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<DataDictionaryEditDto> GetDataDictionaryForEditAsync(NullableIdDto<long> input);

/// <summary>
/// 添加或更新數(shù)據(jù)字典記錄
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task CreateOrUpdateDataDictionaryAsync(CreateOrUpdateDataDictionaryInput input);

/// <summary>
/// 刪除數(shù)據(jù)字典記錄
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
Task DeleteDataDictionaryAsync(List<EntityDto<long>> inputs);

/// <summary>
/// 根據(jù)字典類(lèi)型名稱(chēng)獲取數(shù)據(jù)字典集合
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<ListResultDto<DataDictionaryListDto>> GetDataDictionaryListByTypeNamesAsync(GetDataDictionaryListByTypeNamesInput input);

對(duì)數(shù)據(jù)字典項(xiàng)也準(zhǔn)備了幾個(gè)方法,用于對(duì)某一具體數(shù)據(jù)字典類(lèi)型增加刪除修改數(shù)據(jù)字典項(xiàng)。

/// <summary>
/// 獲取數(shù)據(jù)字典項(xiàng)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<DataDictionaryItemEditDto> GetDataDictionaryItemForEditAsync(NullableIdDto<long> input);

/// <summary>
/// 添加或更新數(shù)據(jù)字典項(xiàng)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task CreateOrUpdateDataDictionaryItemAsync(CreateOrUpdateDataDictionaryItemInput input);

/// <summary>
/// 刪除數(shù)據(jù)字典項(xiàng)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
Task DeleteDataDictionaryItemAsync(List<EntityDto<long>> inputs);

/// <summary>
/// 根據(jù)字典類(lèi)型和字典項(xiàng)名稱(chēng)獲取字典項(xiàng)值
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<GetDataDictionaryItemNameOutput> GetDataDictionaryItemNameAsync(GetDataDictionaryItemNameInput input);

/// <summary>
/// 獲取數(shù)據(jù)字典列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<ListResultDto<DataDictionaryItemListDto>> GetDataDictionaryItemListAsync(GetDataDictionaryItemListInput input);

在應(yīng)用層建立一個(gè)全局常量數(shù)據(jù)字典類(lèi),用于存儲(chǔ)數(shù)據(jù)字典信息,該部分信息也將成為需要維護(hù)到系統(tǒng)中的必備信息,并且,在系統(tǒng)中如有地方需要調(diào)用到數(shù)據(jù)字典類(lèi)型時(shí),不需要寫(xiě)死代碼。

/// <summary>
/// 數(shù)據(jù)字典類(lèi)型存儲(chǔ)表
/// </summary>
public class DataDictionaryTypeConsts
{
    #region 分瓶規(guī)則
    public const string GroupRule_FixAtive = "固定劑及使用";

    public const string GroupRule_ContainerType = "容器類(lèi)型";
    #endregion
}

3、完成控制器層調(diào)用及頁(yè)面中對(duì)數(shù)據(jù)字典的管理,對(duì)于字典信息而言,足夠在界面中一覽全貌,因此頁(yè)面設(shè)計(jì)時(shí),直接以樹(shù)形結(jié)構(gòu)加表格展示即可,左側(cè)數(shù)據(jù)類(lèi)型樹(shù)形結(jié)構(gòu),右側(cè)相應(yīng)的數(shù)據(jù)類(lèi)型項(xiàng)表格。

<div class="layui-row">
    <div class="layui-col-md2 layui-col-xs12">
        <ul id="tree" class="ztree" style="padding: 0px; border: 1px solid #ddd; overflow: auto;"></ul>
    </div>
    <div class="layui-col-md10 layui-col-xs12">
        <table class="layui-table"
                lay-data="{height: 'full-180', page:true, id:'mainList'}"
                lay-filter="list" lay-size="xs">
            <thead>
                <tr>
                    <th lay-data="{checkbox:true, fixed: true}"></th>
                    <th lay-data="{field:'code', sort: true}">業(yè)務(wù)代碼</th>
                    <th lay-data="{field:'name'}">名稱(chēng)</th>
                    @if (await PermissionChecker.IsGrantedAsync(PermissionNames.Pages_Core_DataDictionaryItem_Edit) ||
                await PermissionChecker.IsGrantedAsync(PermissionNames.Pages_Core_DataDictionaryItem_Delete))
                    {
                        <th lay-data="{fixed:'right', align:'center', toolbar: '#barList'}"></th>
                    }
                </tr>
            </thead>
        </table>
    </div>
</div>

三、數(shù)據(jù)字典頁(yè)面展示

利用layui節(jié)省了不少時(shí)間,對(duì)于前端東西不太精通,只能夠用,勉強(qiáng)實(shí)現(xiàn)了數(shù)據(jù)字典的一些操作,其中的數(shù)據(jù)字典類(lèi)型是按照開(kāi)發(fā)過(guò)程中可能用到的進(jìn)行加入的,合理的存在,而不是空穴來(lái)風(fēng),在之前的DataDictionaryConst類(lèi)中可以定義需要用到的數(shù)據(jù)字典類(lèi)型,此處并沒(méi)有直接從那里增加后自動(dòng)導(dǎo)入到數(shù)據(jù)庫(kù)中。

至此,數(shù)據(jù)字典的初步邏輯設(shè)計(jì)完畢,至于要加入更為豐富的功能,諸如排序,父子數(shù)據(jù)類(lèi)型,或是數(shù)據(jù)類(lèi)型描述,均可擴(kuò)展。

代碼地址:https://gitee.com/530521314/Partner.Surround.git

到此這篇關(guān)于基于A(yíng)BP框架實(shí)現(xiàn)數(shù)據(jù)字典開(kāi)發(fā)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論