.Net Core AA.FrameWork应用框架介绍
开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我。
AA.FrameWork 是基于.NET core流行的开源类库创建的基础应用框架。
框架代码图如:
源代码github地址:https://github.com/ChengLab/AAFrameWork
nuget管理中,搜索前缀名称 AA 即可如图
Nuget Packages
Package | nuget | description |
---|---|---|
AA.Dapper | nuget | 基于dapper,Dapper-FluentMap 开发 , 支持工作单元、仓储模式和原生dapper的操作 |
AA.Log4Net | nuget | 基于Log4net开发,提供常用的日志操作类 |
AA.FrameWork | nuget | 基础框架 |
AA.Redis | nuget | 基于StackExchange.Redis开发,提供各种redis操作和基于redis的分布式锁 |
AA.AutoMapper | nuget | 基于AutoMapper开发,对象映射 |
AA.ServiceBus | nuget | 基于MassTransit开发的服务总线 ;很方便的应用在event bus 和 publish/subscribe 场景 |
AA.AspNetCore | nuget | aspnetcore常用类集合 |
AA.Dapper用法
实体映射配置
使用DommelEntityMap<TEntity>类映射属性名称。创建一个派生类,在构造函数中设置Map方法,可指定某个属性映射到数据库列名
- public class UserInfoMap : DommelEntityMap<UserInfo>
- {
- public UserInfoMap()
- {
- ToTable("Sys_UserInfo");//映射具体的表名
- Map(p => p.SysNo).IsKey();//指定主键 ,IsIdentity是否自增
- Map(p=>p.GmtCreate).ToColumn("GmtCreateDate"); //属性名和数据库列名 可以不同
Map(p=>p.LastLoginDate).Ignore();//一些计算属性,可以忽略不需要跟数据库列进行映射- }
- }
使用MapConfiguration.Init方法,把映射类初始化,后续就可以使用了
- public static void InitMapCfgs()
- {
- var fluentMapconfig = new List<Action<FluentMapConfiguration>>();
- fluentMapconfig.Add(cfg =>
- {
- cfg.AddMap(new UserInfoMap());
- });
- MapConfiguration.Init(fluentMapconfig);
- }
开始使用AA.Dapper
使用DapperContext设置数据库连接和数据库类型是sqlserver还是mysql
- public class AADapperContext : DapperContext
- {
- public AADapperContext() : base(new NameValueCollection()
- {
- ["aa.dataSource.AaCenter.connectionString"] = "Data Source =.; Initial Catalog = AaCenter;User ID = sa; Password = 123;",
- ["aa.dataSource.AaCenter.provider"] = "SqlServer"
- })
- { }
- }
仓储包含了大部分的操作,同时支持Async操作
- IDapperRepository<UserInfo> userInfoRepository = new DapperRepository<UserInfo>();
插入实体
- var user = new UserInfo()
- {
- UserName = "chengTian",
- RealName = "成天",
- GmtCreate = DateTime.Now,
- GmtModified = DateTime.Now
- };
- var result = userInfoRepository.Insert(user);
修改实体
- var user = userInfoRepository.Get();
- user.GmtModified = DateTime.Now;
- var result = userInfoRepository.Update(user);
获取实体
- var user = userInfoRepository.Get();//By 主键
- var users = userInfoRepository.GetAll();//所有
- var users = userInfoRepository.Select(p => p.UserName == "chengTian");//谓词
删除实体
- var user = userInfoRepository.Get();
- var result = userInfoRepository.Delete(user);
支持Dapper原生操作
操作基本的封装都是单表的操作,可以满足一部分业务开发,有些业务场景编写sql还是比较合适的比如报表和一些复杂的查询,推荐使用原生dapper的操作
- public class UserInfoRepository : DapperRepository<UserInfo>, IUserInfoRepository
- {
- private readonly IDapperContext _dapperContext;
- public UserInfoRepository(IDapperContext context)
- {
- _dapperContext = context;
- }
- public IEnumerable<UserInfo> QueryAll()
- {
- var result = _dapperContext.DataBase.Query<UserInfo>("SELECT * from [Sys_UserInfo]");//实例
- return result;
- }
- }
AA.Log4Net 用法
- log4net.config 配置,并将log4net.config的属性->复制到输出目录->设置为->始终复制
- Log4NetLogger.Use("配置文件名或者路径+配置文件名"); 例如:log4net.config文件在根目录下,Log4NetLogger.Use("log4net.config");如果在自定义文件中;例如config/log4net.config 则Log4NetLogger.Use("config/log4net.config")
- ILog log= Logger.Get(typeof(类)); log.Debug("example");
AA.ServiceBus 用法
生产者(事件和命令两种类型)
实例化bus
- //事件
- IBusControl busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
- .BuildEventProducer();
- //命令
- ISendEndpoint busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
- .BuildCommandProducer(queueName);
实例化bus之后可以使用发送和发布两个方法
- //命令
- TaskUtil.Await(busControl.Send<SubmitOrder>(new
- {
- Id =
- }));
- //事件
- TaskUtil.Await(busControl.Publish<OrderSubmitted>(new
- {
- Id =
- }));
消费者
- [Fact]
- public void TestConsumer()
- {
- Log4NetLogger.Use("Log4Net/log4net.config");
- string rabbitMqUri = "rabbitmq://localhost:5672";
- string rabbitMqUserName = "";
- string rabbitMqPassword = "";
- string queueName = "order.queue";
- var busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
- .RegisterConsumer<SubmitOrderCommandConsumer>(queueName)//注册命令消费者
- .RegisterConsumer<OrderSubmittedEventConsumer>(null)//注册事件消费者
- .Build();
- busControl.Start();
- }
定义消费者需要实现接口IConsumer
- public class OrderSubmittedEventConsumer : IConsumer<OrderSubmitted>
- {
- public async Task Consume(ConsumeContext<OrderSubmitted> context)
- {
- var @event = context.Message;
- var result = $"OrderSubmittedEvent {@event.Id.ToString()}";
- ILog log = Logger.Get(typeof(OrderSubmittedEventConsumer));
- log.Debug(result);
- //do somethings...
- }
- }
- public class SubmitOrderCommandConsumer : IConsumer<SubmitOrder>
- {
- public async Task Consume(ConsumeContext<SubmitOrder> context)
- {
- var command = context.Message;
- var result = $"CreateFooCommand {command.Id.ToString()}";
- ILog log = Logger.Get(typeof(SubmitOrderCommandConsumer));
- log.Debug(result);
- //do somethings...
- }
- }
AA.AutoMapper用法
实现IMapperConfiguration接口,创建映射规则配置
- public class WebMapperConfigurations : IMapperConfiguration
- {
- public int Order { get { return ; } }
- public Action<IMapperConfigurationExpression> GetConfiguration()
- {
- Action<IMapperConfigurationExpression> action = cfg =>
- {
- cfg.CreateMap<UserVm, UserInput>();
- };
- return action;
- }
- }
在程序startup调用配置
- var mapperConfig = new WebMapperConfigurations();
- AutoMapperConfiguration.Init(new List<Action<IMapperConfigurationExpression>> { mapperConfig.GetConfiguration() });
- ObjectMapping.ObjectMapManager.ObjectMapper = new AutoMapperObjectMapper();
利用扩展方法MapTo执行映射
- [Fact]
- public void TestMap()
- {
- //init
- Init();
- UserVm userVm = new UserVm { Id = , Name = "成天" ,Remark="微信公众号:dotNet知音"};
- var userDto = userVm.MapTo<UserInput>();
- //var userDto2 = userVm.MapTo<UserVm,UserInput>();
- }
后面也会提供基于AA框架的应用实例,有问题可以联系我,一起交流和成长。
.Net Core AA.FrameWork应用框架介绍的更多相关文章
- .Net Core 分布式微服务框架介绍 - Jimu
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...
- .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 最近有空就优化 Jimu (一个基于.Net ...
- Net Core 分布式微服务框架
Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...
- 四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)
原文:四种方法获取可执行程序的文件路径(.NET Core / .NET Framework) 本文介绍四种不同的获取可执行程序文件路径的方法.适用于 .NET Core 以及 .NET Framew ...
- Core Foundation框架介绍
Core Foundation框架介绍 **参考网址: ARC下OC对象和CF对象之间的桥接 Core Foundation框架介绍 Core Foundation框架 Core Foundation ...
- Entity Framework 实体框架的形成之旅--几种数据库操作的代码介绍(9)
本篇主要对常规数据操作的处理和实体框架的处理代码进行对比,以便更容易学习理解实体框架里面,对各种数据库处理技巧,本篇介绍几种数据库操作的代码,包括写入中间表操作.联合中间表获取对象集合.递归操作.设置 ...
- UiAutomator自动化测试框架介绍
UiAutomator自动化测试框架介绍 环境搭建 1 必要条件 1.1 JDK 1.2 SDK(API高于15) 1.3 Eclipse 2 ...
- iOS Core Telephony Framework
Core Telephony Framework(核心通讯框架) 概述: 这个库的前缀为CT(Core Telephony),主要用来获得用户通讯相关信息,我们可以使用这些信息来定义外部接口以便自己使 ...
- UIKit,Core Data , Core Graphics, Core Animation,和OpenGLES框架
iOS的主要框架介绍 框架是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其它的图片和声音的资源文件.一个共享库定义的方法或函数可以被应用程序调用. IOS提供了很多你可以在应用程序 ...
随机推荐
- 使用dig/nslookup命令查看dns解析详情
dig-DNS lookup utility 当域名出现访问故障时,可通过域名解析来判断是否有错误的解析导致的问题. 可以看到有请求段和应答段,最后解析出的A记录有两条 dig命令做迭代查询 dig ...
- Tomcat运行机制
Tomcat其实就是一个servlet的容器,因此,它在运行过程中,首先要做以下事情: 1.实现servlet api规范.如request.response.cookie.session等,容器对其 ...
- 本地代码上传github失败常见错误
1.上传失败 解决办法如下: 可以通过如下命令进行github与本地代码合并: git pull --rebase origin master 重新执行上传命令: git push -u origin ...
- java生成二维码/java解析二维码
二维码的优缺点 优点:1. 高密度编码,信息容量大:2.编码范围广:3.容错能力强:4.译码可靠性高:5.可引入加密措施:6.成本低,易制作,持久耐用. 缺点:1.二维码技术成为手机病毒.钓鱼网站传播 ...
- Docker-Compose简介与Ubuntu Server 上安装Compose
Compose简介 Compose是Docker官方的开源项目,负责对Docker容器集群的快速编排. Compose是定义和运行多个Docker容器的应用. 举例来说: 一个项目除了Tomcat容器 ...
- ThreadLocal的认知与见解
ThreadLocal:提高一个线程的局部变量,访问某个线程拥有自己局部变量(很难理解.看看下面这句话,顺便再讲个例子). 当使用ThreadLocal维护变量时,ThreadLocal为每一个使用该 ...
- python常用内建模块——datetime
datetime是python处理日期和时间的标准库. 获取当前日期和时间 >>>from datetime import datetime >>>now = da ...
- 关于设置tomcat端口为80的事
今天有人要求tomcat服务器的访问地址不能带端口访问, 也就是说只能用80端口访问网站. 那么问题来了, Ubuntu系统禁止root用户以外的用户访问1024以下的商品, 因此tomcat 默认为 ...
- web性能优化实践
一.SQL查询优化 1.循环中有多次查询sql,改为在循环外一次查询后再处理 2.循环多次插入,改为组装好数据后批量插入 3.梳理业务逻辑能一次查完的,绝不分多次查 4.索引用起来 5.分页查询 二. ...
- 55 (OC)* 图片圆角处理
iOS图片设置圆角性能优化 问题 圆角虽好,但如果使用不当,它就是你的帧数杀手,特别当它出现在滚动列表的时候.下面来看圆角如何毁掉你的流畅度的. 实测 layer.cornerRadius 我创建 ...