当地门户网站小程序—.NET 5 源码制作器——Med

日期:2021-02-04 类型:创意团队 

关键词:微信小程序商城,免费微信小程序,小程序设计软件,小程序生成平台,可查询的小程序

-彻底完全免费百度搜索百度收录各种各样优异网站的中文网址导航.由人力资源撰写,并提供网站分类文档文件目录搜索及地区分类文档文件目录搜索,是网站网站站长彻底完全免费营销推广营销推广网站的强大综合服务平台! 现如今位置: .NET 5 源代码转换成器——MediatR——CQRS
.NET 5 源代码转换成器——MediatR——CQRS 已被浏览: 51 次2020年十一月30日 来源于于:  cnblogs/hhhnicvscs/p/14209729.html
在这里里一一篇文章中,大伙儿将探索如何运用.NET 5中的新source generator特性,运用MediatR库和CQRS方法自动式为系统软件手机软件转换成API。中介公司企业者方法中介公司企业方法是在应用程序中解耦操纵控制模块的一种方式。
[标识:內容1]
在依据web的应用程序中,它一般用于将前端开发开发设计

在这里里一一篇文章中,大伙儿将探索如何运用.NET 5中的新source generator特性,运用MediatR库和CQRS方法自动式为系统软件手机软件转换成API。

中介公司企业者方法

中介公司企业方法是在应用程序中解耦操纵控制模块的一种方式。在依据web的应用程序中,它一般用于将前端开发开发设计与业务流程步骤逻辑性性的解耦。

在.NET综合服务平台上,MediatR库是该方法最流行的进行之一。下列图所显示信息,中介公司企业器作为所消息推送命令的消息推送方和接纳方正中间的中间人。消息推送者不知道道道也不关心谁在处理命令。

运用MediatR,大伙儿定义了一个command,它进行IRequest T 插孔,在这其中T说明返回类型。在这里里个例子中,大伙儿有一个CreateUser类,它将返回一标识符串给开启者:

public class CreateUser : IRequest string 
 public string id { get; set; }
 public string Name { get; set; }
} 

从ASP.NET Core API消息推送命令到MediatR,大伙儿可让用以下编号:

[Route("api/[controller]")]
[ApiController]
public class CommandController : ControllerBase
 private readonly IMediator _mediator;
 public CommandController(IMediator mediator)
 _mediator = mediator;
 [HttpPost]
 public async Task string Get(CreateUser command)
 return await _mediator.Send(command);
}

在接纳端,进行也十分简单:创建一个进行IRequestHandler T,U 插孔的类。在本例中,大伙儿有一个处理程序,它处理CreateUser并向开启者返回一标识符串:

public class CommandHandlers : IRequestHandler CreateUser, string="" 
 public Task string Handle(CreateUser request, 
 CancellationToken cancellationToken)
 return Task.FromResult("User Created");
}

每个处理程序类可以处理很多命令。处理规范是对于一个独特的命令,理应一直唯一一个处理程序。倘若希望将信息内容消息推送给许多订阅者,则理应运用MediatR中的嵌入通知功效,但在本例广州中山大学家将不可用该功效。

CQRS

Command Query Responsibility Segregation(CQRS)是一个十分简单的方法。它要求大伙儿理应将系统软件手机软件中的命令(写)的进行与查询(读)分离出来出去起來。

有着CQRS,大伙儿会从那般做:

改为那般做:

CQRS一般与event sourcing相关联,但是运用CQRS实际上无须须运用event sourcing,而仅仅运用CQRS本身便会给我们造成很多架构上的优势。它是为什么呢?因为读写能力工作能力的规定一般并不是同的,因而她们务必单独的进行。

Mediator + CQRS

在案例应用程序中结合这二种方法,大伙儿可以创建下列的架构:

 Command和Query

运用MediatR,Command和Query正中间没有明显的分离出来出去,因为两者都将进行IRequest T 插孔。便于更强地分离出来出去她们,大伙儿将引入以下插孔: 

public interface ICommand T : IRequest T 
public interface IQuery T : IRequest T 
}

下面是运用这两个插孔的案例:

public record CreateOrder : ICommand string 
 public int Id { get; set; }
 public int CustomerId { get; set; }
public record GetOrder : IQuery order 
 public int OrderId { get; set; }
}

便于进一步改进大伙儿的编号,大伙儿可让用新的C# 9 record特性。之内部,它仍然是一个类,但是大伙儿为大伙儿转换变成很多模版编号,包括equality, GetHashCode, ToString……

 前端开发开发设计Command和Query

要真正从外部接纳Command和Query,大伙儿务必创建一个ASP.NET Core API。这类action方法将接纳传入的HTTP命令,并将她们传输给MediatR以进行进一步处理。控制器可能是那般的:

[Route("api/[controller]")]
[ApiController]
public class CommandController : ControllerBase
 private readonly IMediator _mediator;
 public CommandController(IMediator mediator)
 _mediator = mediator;
 [HttpPost]
 public async Task string CreateOrder([FromBody] CreateOrder command)
 return await _mediator.Send(command);
 [HttpPost]
 public async Task order GetOrder([FromBody] GetOrder command)
 return await _mediator.Send(command);
}

 接着,MediatR将把Command和Query传输给各种各样各种各样处理程序,这类处理程序将处理她们并返回响应。应用CQRS方法,大伙儿将为Command和Query处理程序运用单独的类。

public class CommandHandlers : IRequestHandler CreateOrder, string="" 
 public Task string Handle(CreateOrder request, CancellationToken ct)
 return Task.FromResult("Order created");
public class QueryHandlers : IRequestHandler GetOrder, Order="" 
 public Task Order Handle(GetOrder request, CancellationToken ct)
 return Task.FromResult(new Order()
 Id = 2201,
 CustomerId = 1234,
 OrderTotal = 9.95m,
 OrderLines = new List OrderLine ()
}

它是Roslyn编译程序程序器中的一个新特性,它允许大伙儿hook到编译程序程序器,并在编译程序程序整个过程转站化成额外的编号。

在一个十分高的等级上,你可以以以看到它下列:

最开始,编译程序程序器编译程序程序你的C#源代码并转换成英文的英语的语法树。 接着,源代码转换成器可以检查这一英文的英语的语法树并转换成新的C#源代码。 接着,这一新的源代码被编译程序程序并再加到最终的输出中。

重要的是要掌握源代码转换成器自始至终不能以修改现阶段的编号,它仅有向应用程序再加新编号。

源代码转换成器+MediatR+CQRS

对于大伙儿进行的每个Command和Query,大伙儿尽量编写相对性的ASP.NET Core action方法。

这喻意着倘若大伙儿的系统软件手机软件中有50个Command和Query,大伙儿务必创建50个action方法。当然,这将是是非非常枯燥乏味的、不断的和十分非常容易不正确的。

但是,倘若仅仅依据Command/Query,大伙儿即可以转换成API编号作为编译程序程序的逐一一部分,我认为是很帅吗?好似那般:

含义是,倘若我创建这一Command类:

/// summary 
/// Create a new order
/// /summary 
/// remarks 
/// Send this command to create a new order in the system for a given customer
/// /remarks 
public record CreateOrder : ICommand string 
 /// summary 
 /// OrderId
 /// /summary 
 /// remarks This is the customers internal ID of the order. /remarks 
 /// example 123 /example 
 [Required]
 public int Id { get; set; }
 /// summary 
 /// CustomerID
 /// /summary 
 /// example 1234 /example 
 [Required]
 public int CustomerId { get; set; }
}

接着,源转换成器将转换成以下类,作为编译程序程序的逐一一部分:

/// summary 
/// This is the controller for all the commands in the system
/// /summary 
[Route("api/[controller]/[Action]")]
[ApiController]
public class CommandController : ControllerBase
 private readonly IMediator _mediator;
 public CommandController(IMediator mediator)
 _mediator = mediator;
 /// summary 
 /// Create a new order
 /// /summary 
 /// remarks 
 /// Send this command to create a new order in the system for a given customer
 /// /remarks 
 /// param name="command" An instance of the CreateOrder
 /// returns The status of the operation /returns 
 /// response code="201" Returns the newly created item /response 
 /// response code="400" If the item is null /response 
 [HttpPost]
 [Produces("application/json")]
 [ProducesResponseType(typeof(string), StatusCodes.Status201Created)]
 [ProducesResponseType(StatusCodes.Status400BadRequest)]
 public async Task string CreateOrder([FromBody] CreateOrder command)
 return await _mediator.Send(command);
}

好运气的是是Swashbuckle包含在ASP.NET Core 5的API模板默认设置设定情况下,见面到这类类而且为大伙儿转换成漂亮的OpenAPI (Swagger)文字文本文档!

看一下我的编号

他是那般组成的:

SourceGenerator

     这一最新项目包含实际的源转换成器,它将转换成API控制器action方法。

SourceGenerator-MediatR-CQRS
它是一个运用源代码转换成器的案例应用程序。查寻最新项目文本文档,以把握该项目如何引进源转换成器。 Templates这一文本文档夹包含Command和Query类的模板。源代码转换成器将把转换成的编号插到到这类模板中。 CommandAndQueries依据此篇件夹中定义的Command和Query,转换成器将转换成相对性的ASP.NET完毕点。

大伙儿如何看到转换成的源代码?依据将这类行再加到API最新项目文本文档中,大伙儿可以告之编译程序程序器将转换成的源代码提及大伙儿选择的文本文档夹中:

 EmitCompilerGeneratedFiles 
 True
 /EmitCompilerGeneratedFiles 
 CompilerGeneratedFilesOutputPath 
 $(BaseIntermediateOutputPath)\GeneratedFiles
 /CompilerGeneratedFilesOutputPath 

 这喻意着你可以以以在这里里个文档文件目录中找寻转换成的编号:

\obj\GeneratedFiles\SourceGenerator\SourceGenerator.MySourceGenerator

在这里里个文本文档夹里你可以找寻以下两个文本文档:

結果

依据引入源代码转换成器的界定,大伙儿可以删除许多尽量编写和维护保养维护保养的模版编号。我不会会是编译程序程序器工程项目新项目师,我都在源代码转换成器方面的方法可能其实不是100%最好的(甚至其实不是100%适当的),但它仍然表明一切人都可以以以创建本身的源代码转换成器,而没有过量麻烦。

 热情热烈欢迎关注我的手机微信微信公众号,倘若让你钟爱的外文技术性性文章内容內容,可以依据手机微信微信公众号留言板留言板留言板留言明显强烈推荐给我。

 

全篇联接:edument.se/en/blog/post/net-5-source-generators-mediatr-cqrs

 


以上信息内容內容来源于于于互连网,若有侵权行为个人行为,请联系网站网站站长删除。

TAG:

上一篇: 下一篇: 与“.NET 5 源代码转换成器——MediatR——CQRS”相关的新闻报道新闻资讯
| 全新升级明显强烈推荐

河北省省富宇自然环境维护设备机器设备较为比较有限公司是技术性技术专业从事UV光氧,VOC催化反应反映引燃设备机器设备,布袋除尘器,中小型型除尘器,脉冲信号除尘器,单机版版除尘器,旋风除尘器,湿式除尘器及除尘器架构,除尘器布袋,电磁感应磁感应脉冲信号阀,脉冲信号控制仪,星型卸料器等。

chuchenhb

河北省省富宇自然环境维护设备机器设备较为比较有限公司生产制造生产制造各种各样各种各样规格型号型号规格沙石料厂除尘器、白灰窑除尘器、仓顶布袋除尘器、脉冲信号单机版版除尘器、除尘器袋笼、除尘布袋、电晕线、卸料器、减速机、电磁感应磁感应阀、膜片等各种各样各种各样除尘器配套设施设备产品。

入站排行

莞讯网立足于于互联网服务东莞市市人民群众,将有高价位位值“新闻报道报导”马上有效地散布给东莞市市普通百姓。

搜經典经典励志将为您提供經典经典励志文章内容內容,經典经典励志名言,經典经典励志搞笑幽默搞笑段子,著名人员小小故事,經典经典励志签名,經典经典励志视频,經典经典励志音乐,經典经典励志视频,經典经典励志演说,經典经典励志书籍等經典经典励志类文字信息内容內容共享资源网站。

城经网(cteo.cn)是继书报刊、广播节目广播电台、电视机机台后的第四新闻报道新闻媒体,就是我国发展趋势迅速的地域性管理方法管理中心大成县市门户网网网之一。集中化化了优异的新闻媒体综合服务平台,将新闻报道新闻资讯与线上服务垂直触碰到一般人民群众,具备信息内容內容共享资源資源.

提供WordPress企业主题风格设计风格,WordPress出入口出口外贸主题风格设计风格,WordPress企业模版,WordPress企业主题风格设计风格完全免费免费下载,WordPress企业建设网站,WordPress CMS门户网网主题风格设计风格开发设计设计方案

富士软起动器在我国区销售市场市场销售公司是一家集富士软起动器,维修富士软起动器的企业,能为消费者提供迅捷,优质的富士软起动器维修和富士软起动器维护保养维护保养。 重要服务有富士软起动器,富士软起动器价钱,富士软起动器代理商商销售市场市场销售等

上一篇:Roberto 返回下一篇:没有了