在信息的交换过程中,总是有此相同相似的功能,由于业务的各自不同,由同一类型来处理诸如增删改查等常见的信息处理方式。从日常的对些类行为操作为生成的类分析,大量雷同的代码遍布整个项目。框架中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

也可发邮件至:azthinker@sina.com

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 设计框架(二)的更多相关文章

  1. 基于python的接口测试框架设计(二)配置一些参数及文件

    基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里  毕竟导入的时候方便了一些 首先是url 图略 建 ...

  2. 高可用服务设计之二:Rate limiting 限流与降级

    <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制 ...

  3. 手把手和你一起实现一个Web框架实战——EzWeb框架(二)[Go语言笔记]Go项目实战

    手把手和你一起实现一个Web框架实战--EzWeb框架(二)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 上一篇文章我们实现了框架的雏形,基本地 ...

  4. 计算机课程设计-校园二手书交易系统java二手交易平台代码ssm二手商城购物平台跳蚤市场

    计算机课程设计-校园二手书交易系统java二手交易平台代码ssm二手商城购物平台跳蚤市场 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SSM(S ...

  5. B2C电子商务系统研发——商品SKU分析和设计(二)

    转:http://www.cnblogs.com/winstonyan/archive/2012/01/07/2315886.html 上文谈到5种商品SKU设计模式,本文将做些细化说明. 笔者研究过 ...

  6. Origami – 用于 Quartz 的免费的交互设计框架

    Origami 是一个为 Quartz Composer 开发的免费的工具包——由Facebook设计团队创建,让交互设计原型更加简单,不需要编程. 如今,大多数设计师通过创建静态原型来表达要实现的应 ...

  7. SOA之(2)——SOA架构基础概念与设计框架

    SOA的设计框架 设计框架与架构相关的概念紧密相连,原则.模式和架构始终是与设计共舞的. SOA服务设计的原则中记录了一个基础的设计框架: 设计特性(Design Characteristic)——由 ...

  8. Jersey框架二:Jersey对JSON的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  9. 仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)

    在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的 ...

  10. Spark ML源码分析之一 设计框架解读

    本博客为作者原创,如需转载请注明参考           在深入理解Spark ML中的各类算法之前,先理一下整个库的设计框架,是非常有必要的,优秀的框架是对复杂问题的抽象和解剖,对这种抽象的学习本身 ...

随机推荐

  1. socket 客户端和服务端通信

    客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址, ...

  2. C# 安装WindowService服务和相关

    https://www.cnblogs.com/charlie-chen2016/p/8031774.html 这是一个备份数据库的服务,逻辑很简单,就是通过定时器实现在特定的时间执行SQL语句备份数 ...

  3. APNS 证书生成注意事项

    APNS证书导出pem: openssl x509 -in aps_development.cer -inform der -out yourCertName.pem APNS证书密钥导出: 先在&q ...

  4. OC与JS交互之WebViewJavascriptBridge

    上一篇文章介绍了通过UIWebView实现了OC与JS交互的可能性及实现的原理,并且简单的实现了一个小的示例DEMO,当然也有一部分遗留问题,使用原生实现过程比较繁琐,代码难以维护.这篇文章主要介绍下 ...

  5. ThreadPoolExecutor(上篇)

    Java有两个线程池类:ThreadPoolExecutor和ScheduledThreadPoolExecutor,继承AbstractExecutorService类,AbstractExecut ...

  6. JS自定义手机端H5键盘

    在输入车牌号的时候,因为很多车牌号都是数字字母混合排列的,所以如果用输入法输入就需要频繁切换数字跟字母,有点麻烦. 在这里我们就用自定义一个弹出框代替键盘来使用. 1.首先,要禁止掉文本框弹出输入法, ...

  7. iOS内存泄露统计

    1.Value stored to 'xxx' during its initialization is never read // 对象声明之后根本就没有使用 只有赋值 2.Value stored ...

  8. git push & git pull 推送/拉取分支

    git push与git pull是一对推送/拉取分支的git命令. git push 使用本地的对应分支来更新对应的远程分支. $ git push <远程主机名> <本地分支名& ...

  9. 【Mood 21】要不要重复造轮子

    90%的人应该使用另外10%的人制造的轮子 但是每个人都应该有能力去创造属于自己的轮子 使用不代表伸手拿来,使用也是需要学习的,使用也可以升级为创新,关键在于这个轮子是在谁的手中! 90%的能套用着别 ...

  10. java原生文件打包

    一.背景 前端时间,自己做的项目需要打包功能,不想再引外部的jar包 便用java.util.zip做了下该功能 二.适用场景 生成多个word.excel.xml等文件,并要求打包下载的情形 例:项 ...