dapper框架_.NET Core应用框架AA介绍(二)

fdf7ce23f3a096ffbfc51d0f26e66664.png

AA的开源地址

https://github.com/ChengLab/AAFrameWork 

AA框架是一个基础应用框架,是建立在众多大家熟知的流行工具之上并与之集成。比如:ASP.NET Core、Automapper、Dapper、Dapper-FluentMap、RabbitMQ、Redis、MassTransit、Log4net等等

大家可以很方便的去使用,学习成本很低,也易于扩展。目标能做成一个大家都能吼得住、可以自己改进的框架。

AA这个名字来源于AA制,一起贡献于社区才能从社区获取果实。

基于AA创建一个示例demo

示例demo 很简单,创建一个任务管理的模块,包含增删改查的功能。

示例项目架构图 

89f4f9aa577bcd5915dc24be6bc4c272.png

示例项目截图

0eeb2ecf3adf028cdbbcf9cd8bdcee4c.png

准备工作

数据库脚本:

CREATE TABLE [dbo].[QuartzJobdetail](
[Id] [int] IDENTITY(1,1) NOT NULL,
[JobGroup] [varchar](100) NULL,
[JobName] [varchar](100) NULL,
[RunStatus] [int] NULL,
[Cron] [varchar](100) NULL,
[StartTime] [datetime] NULL,
[EndTime] [datetime] NULL,
[Description] [varchar](100) NULL,
[GmtCreateTime] [datetime] NULL,
[ApiUrl] [varchar](100) NULL,
[Status] [int] NULL,CONSTRAINT [PK_QUARTZJOBDETAIL] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GO
基础设施层
配置数据库连接 和指定数据库类型
 public AADapperContent() : base(new NameValueCollection()
{
["aa.dataSource.AaBase.connectionString"] = "Data Source =.; Initial Catalog = QuartzAA-Job;User ID = sa; Password = 123;",
["aa.dataSource.AaBase.provider"] = "SqlServer"
})
{
}
配置领域实体和数据库表映射
public class QuartzJobdetailMap:DommelEntityMap
{
public QuartzJobdetailMap()
{ToTable("QuartzJobdetail");Map(x=>x.Id).IsKey().IsIdentity();
}
}
实现仓储层
  public class QuartzJobdetailRepository:DapperRepository, IQuartzJobdetailRepository
{public IPage GetListReturnOrder(GetListQuartzJobDetailInput input)
{object sqlParam = null;
var sql = new StringBuilder();sql.Append("select * from QuartzJobdetail ");sql.Append(" where 1=1");
var result = DapperContext.Current.DataBase.GetPage(new PageRequest
{
PageIndex = input.PageIndex,
PageSize = input.PageSize,
SqlText = sql.ToString(),
SqlParam = sqlParam,
OrderFiled = " Id desc ",
});return result;
}
}

DapperRepository 实现了IDapperRepository接口,IDapperRepository接口代码如下

 public virtual bool Delete(TEntity entity);public virtual Task DeleteAsync(TEntity entity);public virtual bool DeleteMultiple(Expression> predicate);public virtual Task DeleteMultipleAsync(Expression> predicate);public virtual TEntity FirstOrDefault(Expression> predicate);public virtual Task FirstOrDefaultAsync(Expression> predicate);public virtual TEntity Get(object id);public virtual IEnumerable GetAll();public virtual Task> GetAllAsync();public virtual Task GetAsync(object id);public virtual object Insert(TEntity entity);public virtual Task InsertAsync(TEntity entity);public virtual IEnumerable Select(Expression> predicate);public virtual Task> SelectAsync(Expressionbool>> predicate);
public virtual bool Update(TEntity entity);
public virtual Task UpdateAsync(TEntity entity);
领域层

示例项目,比较简单,并没有完全按照DDD去实现领域服务,领域事件等等,这里主要演示如何基于AA基础框架创建一个项目。领域模型(贫血)代码如下

public class QuartzJobdetail
{
///
/// 编号
///
public int Id
{
get;
set;
}
///
/// 任务组
///
public string JobGroup
{
get;
set;
}
///
/// 任务名称
///
public string JobName
{
get;
set;
}
///
/// 运行状态
///
public int RunStatus
{
get;
set;
}
///
/// cron表达式
///
public string Cron
{
get;
set;
}
///
/// 开始日期
///
public DateTime StartTime
{
get;
set;
}
///
/// 结束日期
///
public DateTime EndTime
{
get;
set;
}
///
/// 描述
///
public string Description
{
get;
set;
}
///
/// 创建日期
///
public DateTime GmtCreateTime
{
get;
set;
}
///
/// api地址
///
public string ApiUrl
{
get;
set;
}
///
/// 状态
///
public int Status
{
get;
set;
}
}
仓储接口代码如下
 public interface IQuartzJobdetailRepository: IDapperRepository
{
IPage GetListReturnOrder(GetListQuartzJobDetailInput input);
}
应用层
服务接口和实现代码如下
public interface IQuartzJobdetailService
{
void Save(SaveQuartzJobdetailInput input);
void Update(UpdateQuartzJobdetailInput input);
void Remove(RemoveQuartzJobdetailInput input);
QuartzJobdetailDto GetQuartzJobdetail(GetQuartzJobdetailInput input);
PagedResultDto GetList(GetListQuartzJobDetailInput input);
}
public class QuartzJobdetailService : IQuartzJobdetailService
{
#region filed
private readonly IQuartzJobdetailRepository _quartzJobdetailRepository;
#endregion
#region actorpublic QuartzJobdetailService()
{
var dapperContent = new AADapperContent();
_quartzJobdetailRepository = new QuartzJobdetailRepository();
}
#endregionpublic void Save(SaveQuartzJobdetailInput input)
{
var obj = _quartzJobdetailRepository.Insert(new QuartzJobdetail
{
JobGroup = input.JobGroup,
JobName = input.JobName,
RunStatus = input.RunStatus,
Cron = input.Cron,
StartTime = input.StartTime,
EndTime = input.EndTime,
Description = input.Description,
GmtCreateTime = DateTime.Now,
ApiUrl = input.ApiUrl,
Status = input.Status,
});
}public void Update(UpdateQuartzJobdetailInput input)
{
var model = _quartzJobdetailRepository.Get(input.Id);
model.JobGroup = input.JobGroup;
model.JobName = input.JobName;
model.Cron = input.Cron;
model.StartTime = input.StartTime;
model.EndTime = input.EndTime;
model.Description = input.Description;
model.ApiUrl = input.ApiUrl;
_quartzJobdetailRepository.Update(model);
}public void Remove(RemoveQuartzJobdetailInput input)
{
var model = _quartzJobdetailRepository.Get(input.Id);
_quartzJobdetailRepository.Delete(model);
}public QuartzJobdetailDto GetQuartzJobdetail(GetQuartzJobdetailInput input)
{
var model = _quartzJobdetailRepository.FirstOrDefault(p => p.Description.Contains(input.Description));return new QuartzJobdetailDto()
{
JobGroup = model.JobGroup,
JobName = model.JobName,
RunStatus = model.RunStatus,
Cron = model.Cron,
StartTime = model.StartTime,
EndTime = model.EndTime,
Description = model.Description,
ApiUrl = model.ApiUrl,
};
}public PagedResultDto GetList(GetListQuartzJobDetailInput input)
{
var result = _quartzJobdetailRepository.GetListReturnOrder(input);return new PagedResultDto
{
TotalCount = result.Count,
Items = result.Data.ToList()
};
}
表现层
控制器的代码
 public IActionResult Index()
{return View();
}/// /// job列表/// /// 每页显示条数/// /// 页码/// /// public IActionResult GetListQuartzJobdetail(int limit, int start, int page, int draw)
{var result = _quartzJobdetailService.GetList(new GetListQuartzJobDetailInput()
{
PageIndex = page,
PageSize = limit,
});var vm = new PageResponse
{
draw = draw,
recordsTotal = result.TotalCount,
recordsFiltered = result.TotalCount,
data = result.Items.MapTo>()
};return Json(vm);
}/// /// 添加/// /// /// public IActionResult Save(QuartzJobdetailVm vm)
{
_quartzJobdetailService.Save(vm.MapTo());return Json(Result.Success("操作成功"));
}/// /// 编辑/// /// /// public IActionResult Update(QuartzJobdetailVm vm)
{
_quartzJobdetailService.Update(vm.MapTo());return Json(Result.Success("修改成功"));
}/// /// 删除/// /// ///
[HttpPost]public IActionResult Remove(int id)
{
_quartzJobdetailService.Remove(new RemoveQuartzJobdetailInput { Id = id });return Json(Result.Success("删除成功"));
}

最后运行,新增一条记录如图:

03bbe9832495436ccdff3be76013b8f6.png

e9fe0a6aaadd89bfa6229e5261bda6e6.png

文中展示了部分代码,整个示例项目的代码会上传到github上,这个示例项目不会是最终版本,还会继续。.NET Core 3.1这个长期版本快发布了,期待ing。。。。。

810e508ba829617713f46ea7535926d9.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值