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
也可发邮件至: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 设计框架(二)的更多相关文章
- 基于python的接口测试框架设计(二)配置一些参数及文件
基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里 毕竟导入的时候方便了一些 首先是url 图略 建 ...
- 高可用服务设计之二:Rate limiting 限流与降级
<高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制 ...
- 手把手和你一起实现一个Web框架实战——EzWeb框架(二)[Go语言笔记]Go项目实战
手把手和你一起实现一个Web框架实战--EzWeb框架(二)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 上一篇文章我们实现了框架的雏形,基本地 ...
- 计算机课程设计-校园二手书交易系统java二手交易平台代码ssm二手商城购物平台跳蚤市场
计算机课程设计-校园二手书交易系统java二手交易平台代码ssm二手商城购物平台跳蚤市场 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SSM(S ...
- B2C电子商务系统研发——商品SKU分析和设计(二)
转:http://www.cnblogs.com/winstonyan/archive/2012/01/07/2315886.html 上文谈到5种商品SKU设计模式,本文将做些细化说明. 笔者研究过 ...
- Origami – 用于 Quartz 的免费的交互设计框架
Origami 是一个为 Quartz Composer 开发的免费的工具包——由Facebook设计团队创建,让交互设计原型更加简单,不需要编程. 如今,大多数设计师通过创建静态原型来表达要实现的应 ...
- SOA之(2)——SOA架构基础概念与设计框架
SOA的设计框架 设计框架与架构相关的概念紧密相连,原则.模式和架构始终是与设计共舞的. SOA服务设计的原则中记录了一个基础的设计框架: 设计特性(Design Characteristic)——由 ...
- Jersey框架二:Jersey对JSON的支持
Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...
- 仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)
在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的 ...
- Spark ML源码分析之一 设计框架解读
本博客为作者原创,如需转载请注明参考 在深入理解Spark ML中的各类算法之前,先理一下整个库的设计框架,是非常有必要的,优秀的框架是对复杂问题的抽象和解剖,对这种抽象的学习本身 ...
随机推荐
- 整理代码,将一些曾经用过的功能整合进一个spring-boot
一 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的项目地址https://github.com/247292980/spring-boot 功能 1. ...
- Javascript模块化编程详解
在这篇文章中,我将会回顾一下js模块化编程的基础,并且将会讲到一些真的非常值得一提的进阶话题,包括一个我认为是我自创的模式. 模块化编程是一种非常常见Javascript编程模式.它一般来说可以使得代 ...
- SQL Exists 的用法 转载
比如在Northwind数据库中 有一个查询为 SELECT c.CustomerId, CompanyName FROM Customers c WHERE EXISTS( SELECT O ...
- List< >泛型集合
//一旦你确定了泛型的类型,集合里的元素已经有了确切的定义 List<int> list = new List<int>(); //创建泛型集合的对象 list.Add(); ...
- IDEA中一个工程多个模块(module)分别提交到不同的git服务器
说明:本文档适用于一个工程多个模块的项目,每个模块对应不同的git服务器地址. 一.将本地项目导入到git服务器 1.打开 File -> Settings,选择 Version C ...
- 彻底消除wine中文乱码,QQ,kugoo等等....
原文链接:http://forum.ubuntu.org.cn/viewtopic.php?t=290155 lendylongli wine下中文的配置方案步骤:1. 初始设置运行 winecfg, ...
- C#学习笔记7
1.重写GetHashCode方法注意点: (1)重写GetHashCode方法,也应重写Equals方法,否者编译器会警告. (2)相等的对象必须有相等的散列码(若a.Equals(b),则a.Ge ...
- 1.zookeeper的安装
1.解压zk压缩包 tar -zxvf (zk压缩包路径名) -C (解压目标目录路径) 2.在zk解压目录下新建data文件夹 mkdir data 3.在data文件夹下新建myid vi myi ...
- css中的单位和css中的颜色表示方法
css中颜色的表示方式: 图片来源http://www.w3school.com.cn
- scss-颜色运算符
scss允许使用颜色分量以及算术运算和任何颜色表达式返回颜色值. 例如scss代码: $color1: #333399; $color2: #CC3399; p{ color: $color1 + $ ...