Clean Architecture Template

2025-12-07 0 614

ASP Net Core 9干净的建筑锅炉板。启动企业项目所需的一切!

就我个人而言,我已经看到了许多基于ASP Net的Clean Architecture Template S,但是其中大多数在生产中不可用,并且您面临着框架本身而不是实际域问题所产生的问题。我在不同的初创公司和公司工作了大约5年,所以当我说这个框架建立在实际的现实世界挑战上,而不是阅读书籍并将其每个段落转换为代码时,请相信我。

因此,让我们开始吧!

很高兴知道

在Visual Studio中检查此链接以获取更好,更清洁的项目解决方案视图

快速简便的安装

打开PowerShell或命令提示符并执行以下命令:

 dotnet new install Bobby.CleanArcTemplate

创建一个空文件夹。通过PowerShell或CMD导航到它,然后执行以下命令:

 dotnet new ca-template

您的项目是创建并准备代码的!

使用Docker文件和Docker组成

首先,您需要生成自签名的SSL证书。打开终端并运行以下命令:

 dotnet dev-certs https -ep $env:USERPROFILE/.aspnet/https/cleanarc.pfx -p Strong@Password

现在,要信任证书,请运行以下命令:

 dotnet dev-certs https --trust

导航到项目目录并使用您喜欢的终端运行以下命令:

 docker build -t bobby-cleanarc -f dockerfile.

最后运行以下命令(请注意,此命令将从Docker Hub中摘取最新的SQL Server 2022图像):

 docker-compose up -d

干净的体系结构。我们的期望

当您在Google上搜索“清洁体系结构”关键字时,搜索结果中首先出现的是下图。但是它到底说什么?

域层

我们的核心(或“域” )完全孤立,其他层的变化不会影响我们的核心服务和逻辑。

应用层

第二个最重要的层是“应用程序”层(与“域”层一起,它们构造了我们整个项目的骨干)。如果您认为该项目是人体,那么“领域”就是这个人的大脑,而“应用”就是这个人的身体。因此,“应用程序层”在某种程度上充当“请求编排”,并将每个请求路由到其适当的域模型。 “应用程序层”还定义了一组项目对其行动的“合同”。应用程序和域层不在乎这些合同的实施细节,他们所知道的只是这些合同的签名,它们对这些签名行事。因此,通过这种方式,我们的项目可以测试,我们可以开始开发而无需担心其他任何事情(例如数据库提供商,身份,记录,消息传递等…)。您可以看到我们项目的核心已经变得完全不可知和自我管理。

基础架构层

该层提供了我们项目在现实世界中工作所需的东西。 “基础架构”层通常实现“应用程序”层中定义的合同。这是确定我们要使用的数据库,消息传递服务实现,用户身份验证机制等的一层。

通过这种方法,我们可以轻松地更改我们想要的服务。我们需要做的就是将“应用程序”中定义的所需合同的实现交换给我们想要的合同。

webui层

在此层中,我们决定要如何展示我们的项目。它可以是ASP Net Core Web API,WPF,GRPC服务器,Blazor Server等…该层成为我们项目的运行实例。

潜入逻辑!

让我们看一下每一层并查看其目的。

ShareSkernel

该层(或类库)是我们定义扩展方法或其他常见的用户方法,我们可以在任何其他层中使用这些方法。因此,每一层都必须对其进行引用。

领域

我们项目的核心或“大脑” 。每个领域实体都可以具有自己的特定方法和行为。为了明确定义这些模型,我们创建了一个称为“基础性”的通用抽象实体,并从中继承了我们的域实体。通过这种方式,我们标记了“域实体” ,后来我们可以使用反射或源生成器来自动开发过程,从而撰写较少的无聊和重复代码。 (您可以在“基础架构”中看到实际示例

应用

如前所述,该层负责我们项目需要的请求路由和定义合同(通常是“接口” )。这些合同将在其他级别实施。由于此层处理请求路由,因此该层也是实现“ CQRS模式”的最佳候选者,并且可以通过我们都知道的流行软件包来实现这一目标。媒体

单位测试

干净体系结构的核心方面之一是应测试每一层解决方案。您可能知道,设置测试环境可能是令人讨厌且重复的任务。该框架提供了所需的基本测试设置,以帮助您仅专注于编写单元测试。另外,您可以免费为所有想要的层编写单元测试

在这一层中,我们有一组“功能” ,其中我们主要根据“域服务”作用。为了遵循CQRS最佳实践,我们将“命令”“查询”模型分开。 MediaTR将为我们照顾其余的工作,并自动打电话给相关的处理程序。

cleanarc.infrastructure.Crosscutting

交叉切割服务是跨多层且与服务或上下文没有特别相关的服务。例如,记录服务是所有其他服务都将使用它的服务。

cleanarc.infrastructure.Identity

实施用于用户注册,身份验证和授权的服务。我们使用ASP Net核心身份包,因为它已经实现了许多功能,并且已经应用了许多安全考虑。此层中已经实施了“动态访问控制”“ JWE-Token Base认证”“ OTP身份验证”服务。 (只需检查代码。

cleanarc.infrastructure.persistence

我们已经看到了许多网络周围的“存储库”“工作单位”模式的例子。我认为,其中大多数只是增加了更复杂的情况,而没有任何好处。许多人甚至可以说,使用EF核心,我们不需要这些旧模式。在某种程度上,我同意,但我也认为许多“存储库”和“工作单位”实现完全错误。拥有一个具有自挖掘名称和目的的存储库有助于我们封装“数据访问策略”背后的逻辑和技术。这给我们带来了“持久性不可知论”的好处,这意味着我们不依赖数据库提供商系统,并且可以如果需要的话,我们可以完全交换数据库。还具有“工作单位”有助于我们在数据库交易中维护“原子能”“一致性” ,并在一个请求中执行多个事务,该请求将数据库状态从一个有效状态更改为另一个有效状态

cleanarc.webframework

随着项目的进行,不同服务和配置的数量增加。很快,您将面临一个污染的程序类,其中只有数千行重复的代码仅用于服务配置。该层有助于我们将每个配置分离到其自己的类。因此,维护和调试变得更加容易,您可以编写可重复使用的配置

cleanarc.web.api

整个项目的“演示” 。我认为“ ASP Net Core Web API”是最合适的方法,因为它涵盖了我们从演示层所需的大多数东西。

cleanarc.web.plugins

现在有这个框架的获胜点!

您可能想知道“等一下!我们不能在Web API框架中使用插件!”但是我们可以!

插件是整体应用微服务体系结构之间的甜蜜点。使用插件,您的代码将变成模块化,同时保持“高凝聚力”而没有普通的微服务开发缺点(例如开发和维护微服务应用程序的高成本)。

您可能已经听到了ASP Net Core中所谓的“应用程序零件” 。通常,应用程序零件是Controller类Bocome HTTP端点,C#类成为JSON值,服务寿命和实现的位置。它是整个ASP Net Core配置的非常重要和敏感的部分。如果您不够小心,则可以心跳加速整个项目。但是您不必担心任何一个。我为您做了最多的工作! (看看Cleanarc.web.plugins.grpc类库)。

最后一句话

就我个人而言,我喜欢这个框架,并在我的许多个人项目中使用它,但还没有让我失望。我随便更新此存储库(无论是软件包更新,代码重构还是添加新功能)。因此,请随意创建问题或创建拉动请求。我会检查它们。

如果您喜欢这个框架,请给它一个明星。您的明星使我有动力保持此仓库,并为其开发新的开源和令人兴奋的套餐。提前致谢!

代码灵感

MJ Ebrahimi完整的Web API回购

杰森·泰勒(Jason Taylor)的清洁弧

下载源码

通过命令行克隆项目:

git clone https://github.com/babaktaremi/Clean-Architecture-Template.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 Clean Architecture Template https://www.zuozi.net/31939.html

spec
上一篇: spec
angular gantt
下一篇: angular gantt
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务