济南建设工程信息网站,山东建设厅官网,无锡网站排名优化公司哪家好,江苏省城乡住房建设厅网站AA的开源地址https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架#xff0c;是建立在众多大家熟知的流行工具之上并与之集成。比如#xff1a;ASP.NET Core、Automapper、Dapper、Dapper-FluentMap、RabbitMQ、Redis、MassTransit、Log4net等等大家可以很方便… AA的开源地址https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架是建立在众多大家熟知的流行工具之上并与之集成。比如ASP.NET Core、Automapper、Dapper、Dapper-FluentMap、RabbitMQ、Redis、MassTransit、Log4net等等大家可以很方便的去使用学习成本很低也易于扩展。目标能做成一个大家都能吼得住、可以自己改进的框架。AA这个名字来源于AA制一起贡献于社区才能从社区获取果实。基于AA创建一个示例demo示例demo 很简单创建一个任务管理的模块包含增删改查的功能。示例项目架构图 示例项目截图准备工作数据库脚本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:DommelEntityMapQuartzJobdetail { public QuartzJobdetailMap() { ToTable(QuartzJobdetail); Map(xx.Id).IsKey().IsIdentity(); } }实现仓储层 public class QuartzJobdetailRepository:DapperRepositoryQuartzJobdetail, IQuartzJobdetailRepository { public IPageQuartzJobdetailDto GetListReturnOrder(GetListQuartzJobDetailInput input) { object sqlParam null; var sql new StringBuilder(); sql.Append(select * from QuartzJobdetail ); sql.Append( where 11); var result DapperContext.Current.DataBase.GetPageQuartzJobdetailDto(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 Taskbool DeleteAsync(TEntity entity); public virtual bool DeleteMultiple(ExpressionFuncTEntity, bool predicate); public virtual Taskbool DeleteMultipleAsync(ExpressionFuncTEntity, bool predicate); public virtual TEntity FirstOrDefault(ExpressionFuncTEntity, bool predicate); public virtual TaskTEntity FirstOrDefaultAsync(ExpressionFuncTEntity, bool predicate); public virtual TEntity Get(object id); public virtual IEnumerableTEntity GetAll(); public virtual TaskIEnumerableTEntity GetAllAsync(); public virtual TaskTEntity GetAsync(object id); public virtual object Insert(TEntity entity); public virtual Taskobject InsertAsync(TEntity entity); public virtual IEnumerableTEntity Select(ExpressionFuncTEntity, bool predicate); public virtual TaskIEnumerableTEntity SelectAsync(ExpressionFuncTEntity, bool predicate); public virtual bool Update(TEntity entity); public virtual Taskbool UpdateAsync(TEntity entity);领域层示例项目比较简单并没有完全按照DDD去实现领域服务领域事件等等这里主要演示如何基于AA基础框架创建一个项目。领域模型贫血代码如下public class QuartzJobdetail { /// summary /// 编号 /// /summary public int Id { get; set; } /// summary /// 任务组 /// /summary public string JobGroup { get; set; } /// summary /// 任务名称 /// /summary public string JobName { get; set; } /// summary /// 运行状态 /// /summary public int RunStatus { get; set; } /// summary /// cron表达式 /// /summary public string Cron { get; set; } /// summary /// 开始日期 /// /summary public DateTime StartTime { get; set; } /// summary /// 结束日期 /// /summary public DateTime EndTime { get; set; } /// summary /// 描述 /// /summary public string Description { get; set; } /// summary /// 创建日期 /// /summary public DateTime GmtCreateTime { get; set; } /// summary /// api地址 /// /summary public string ApiUrl { get; set; } /// summary /// 状态 /// /summary public int Status { get; set; } }仓储接口代码如下 public interface IQuartzJobdetailRepository: IDapperRepositoryQuartzJobdetail { IPageQuartzJobdetailDto GetListReturnOrder(GetListQuartzJobDetailInput input); }应用层服务接口和实现代码如下public interface IQuartzJobdetailService { void Save(SaveQuartzJobdetailInput input); void Update(UpdateQuartzJobdetailInput input); void Remove(RemoveQuartzJobdetailInput input); QuartzJobdetailDto GetQuartzJobdetail(GetQuartzJobdetailInput input); PagedResultDtoQuartzJobdetailDto GetList(GetListQuartzJobDetailInput input); }public class QuartzJobdetailService : IQuartzJobdetailService { #region filed private readonly IQuartzJobdetailRepository _quartzJobdetailRepository; #endregion #region actor public QuartzJobdetailService() { var dapperContent new AADapperContent(); _quartzJobdetailRepository new QuartzJobdetailRepository(); } #endregion public 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 PagedResultDtoQuartzJobdetailDto GetList(GetListQuartzJobDetailInput input) { var result _quartzJobdetailRepository.GetListReturnOrder(input); return new PagedResultDtoQuartzJobdetailDto { TotalCount result.Count, Items result.Data.ToList() }; }表现层控制器的代码 public IActionResult Index() { return View(); } /// summary /// job列表 /// /summary /// param namelimit每页显示条数/param /// param namestart/param /// param namepage页码/param /// param namedraw/param /// returns/returns public IActionResult GetListQuartzJobdetail(int limit, int start, int page, int draw) { var result _quartzJobdetailService.GetList(new GetListQuartzJobDetailInput() { PageIndex page, PageSize limit, }); var vm new PageResponseQuartzJobdetailViewModel { draw draw, recordsTotal result.TotalCount, recordsFiltered result.TotalCount, data result.Items.MapToListQuartzJobdetailViewModel() }; return Json(vm); } /// summary /// 添加 /// /summary /// param namevm/param /// returns/returns public IActionResult Save(QuartzJobdetailVm vm) { _quartzJobdetailService.Save(vm.MapToSaveQuartzJobdetailInput()); return Json(Result.Success(操作成功)); } /// summary /// 编辑 /// /summary /// param namevm/param /// returns/returns public IActionResult Update(QuartzJobdetailVm vm) { _quartzJobdetailService.Update(vm.MapToUpdateQuartzJobdetailInput()); return Json(Result.Success(修改成功)); } /// summary /// 删除 /// /summary /// param nameid/param /// returns/returns [HttpPost] public IActionResult Remove(int id) { _quartzJobdetailService.Remove(new RemoveQuartzJobdetailInput { Id id }); return Json(Result.Success(删除成功)); }最后运行新增一条记录如图文中展示了部分代码整个示例项目的代码会上传到github上这个示例项目不会是最终版本还会继续。.NET Core 3.1这个长期版本快发布了期待ing。。。。。