您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
tpl是啥意思_tplpplh啥意思
架构,命令,应用程序tpl是啥意思_tplpplh啥意思
发布时间:2016-12-08加入收藏来源:互联网点击:
很多朋友想了解关于tpl是啥意思的一些资料信息,下面是小编整理的与tpl是啥意思相关的内容分享给大家,一起来看看吧。
介绍在这篇博文中,我将介绍整洁架构(Clean Architecture ),它是一种现代、可扩展的正式软件架构,适用于现代 Web 应用程序。接下来,我将讨论DDD(领域驱动设计)如何适应这幅图景,以及 DDD 概念如何与清洁架构完美契合,从而产生一种称为清洁 DDD 的方法。最后,我介绍了命令查询职责分离 (CQRS),并描述了它如何补充和增强 Clean DDD 解决方案,以创建优雅、健壮、可扩展和可测试的软件系统。
清洁架构清洁建筑是一种相对“现代”的正式建筑,因为它不到十年的历史。它随着时间的推移从其他几种架构演变而来,包括六边形架构、端口和适配器以及洋葱架构。 在这篇文章中,Bob 大叔强调了所有前身架构和清洁架构都具备的五个品质:
框架独立:架构与第三方框架解耦。可测试:该架构易于编写单元测试。UI 独立:架构可以从用户界面中拔出数据库独立:架构与底层数据存储分离。外部代理独立:架构的业务规则是孤立的,对外界一无所知。Clean Architecture 可以被可视化为一系列同心圆,每个圆代表应用程序的不同层。使架构结合在一起的原则称为Dependency Rule:
“使这个架构工作的最重要的规则是依赖规则。这条规则说源代码依赖只能指向内部。内圈中的任何东西都无法知道外圈中的某物。特别是某物的名称内圈中的代码不得提及外圈中声明的内容。这包括函数、类、变量或任何其他命名的软件实体。
这是一个很好的起点,但我想进一步详细说明。清洁架构应用程序中的层:
可能永远不知道围绕(在)它的层。也可能永远不知道与其相邻的层。在实时应用程序中通过依赖倒置在功能上相互连接——即通过在外层实现的抽象(接口)。整洁架构的显着特征是组成它的同心层围绕着一个包含抽象和业务逻辑的中央核心。这些抽象的实现,连同它们的外部依赖,被推到外层。在描述这种布局时,我喜欢使用“外围”的术语来指代外部实现层,而“核心”来指代内部层。请注意,这是我的命名约定,此时您不太可能在其他任何地方找到它。
同样,我想强调一下我们如何明确地使用依赖倒置原则来确保内部层(纯逻辑和抽象)永远不会有任何外部层(实现)的知识。内部层使用这些层中定义的抽象,而实际的实现逻辑存在于外部层中。重申一下:依赖倒置原则指出细节依赖于抽象;抽象不依赖于细节。因此,我们正在区分什么是本质(核心)和什么是细节(外围)。使用依赖注入,通常通过控制容器的反转,所有内容都在完成的解决方案中结合在一起。
整洁的领域驱动设计我对 Clean DDD 的解读
整洁的领域驱动设计代表了软件架构开发的下一个合乎逻辑的步骤。这种方法源自Blob的原始架构,但在概念上略有不同。相同之处在于它在较高级别使用相同的同心层方法,但是使用域驱动设计来构建内核。此外,DDD 推动将域分离为不同的有界上下文也为这种设计提供了信息,因为这些有界上下文现在成为堆栈每一层水平分离的指南。这是一个真正的、现代的、以领域为中心的模型,用于构建和交付复杂的业务应用程序。
核心层领域层域层是核心中最中心的层。该层是使用 DDD 原则构建的,其中没有任何内容对它之外的任何内容有任何了解。在大多数情况下,这里不使用依赖注入,尽管事件调度程序实现可能会出现罕见的异常。领域层中的领域服务和其他业务逻辑甚至不需要真正位于接口后面,因为该逻辑不太可能随着时间而改变,并且不需要多态。在使用接口确实有意义的领域领域,例如使用策略模式来封装不同的业务逻辑,继续使用它们;否则,只需将域服务直接注入需要它们的类中。
应用层应用层非常重要,因为它基本上是将领域层与外层绑定的“粘合剂”。它几乎就像一个中间层。应用层声明了代表基础设施、持久和表示组件的接口和其他抽象。这些组件的实际实现不在这一层中声明,而是通过依赖注入提供给应用程序组件。
该层还负责编排:它实现了操作域对象和启动域工作流的高级逻辑。这样,它本身不包含任何一流的业务逻辑,而是通过对领域层的调用来组织该逻辑。它可以协调任务并将工作委托给域,但它不包含业务规则或维护业务状态。
应用层同样使用注入的持久化接口执行持久化操作。这就是存储库模式或 CQRS 发挥作用的地方(解释如下)。由于不同的编排操作,它将数据传输对象(DTO) 传递到表示层。同样,它还使用注入的基础设施接口与操作系统和其他外部资源进行通信。
外围层持久层持久层包含 应用层中声明的持久接口的实现。它还包含专门的持久模型(数据访问)类,这些类可能是也可能不是数据库表的镜像(特别是如果您使用对象关系映射器,又名 ORM),或者可能代表数据库查询的投影。这是对数据库进行实际读/写的所有硬逻辑所在的位置。
基础设施层基础设施层包含应用程序层中声明的基础设施接口的实现。这里没有太多要说的,因为它是你所期望的:它封装了与操作系统、外部 API 等通信的逻辑。与外部消息队列通信的实现细节以及通信的服务都在这里与任何其他外部机构。
表示层表示层是一个 API 层,它汇集了所有应用程序层组件,并将它们注入适当的实现(通常使用 IOC 容器)。在我的解释中,这一层不是用户界面(UI),而是呈现 UI 与之通信的外观。在 Web 应用程序中,表示层是一个 MVC 应用程序,它使用 Web 协议(如 REST、GraphQL 或 Web 套接字)与 UI 通信。展望未来,当我谈到 MVC 控制器时,要知道我总是将它们称为表示层组件。
现在,您需要注意一些事情。我研究过的一些资料将 Web API 视为系统的应用层。换句话说,应用层和表示层似乎是一回事。我强烈不同意这一点。应用程序层是它自己的动物,如果需要,您应该始终能够将其与表示逻辑分离。
用户界面用户界面是该架构中绝对最高的概念层。这是用户直接与之交互的代码。一些示例可能是 Angular 或 React 等,它们在用户的 Web 浏览器中运行,或者使用 Windows Presentation Foundation (WPF) 构建的桌面应用程序。一些消息来源将其与表示层混为一谈,但我认为将其分开很重要,至少在 Web 应用程序中是这样。如果架构良好,您的系统应该能够毫不费力地移除 UI 并用不同的 UI 替换。
公共层公共层是一个库或一组库,用于横切关注点,例如日志记录、文本操作、日期/时间算法、配置等,它们对整个系统都是全局的. 公共层中的组件和接口可以在堆栈的任何层中使用(UI 除外,它可能完全断开连接,在 Web 应用程序的情况下,完全在用户的浏览器中运行)。公共层包含组件和功能的实现细节,这些细节足够通用,可以在应用程序的任何地方使用。在这一点上,这里绝对不应该有任何业务逻辑或与域有关的任何事情。
努力防止这一层膨胀失控。当怀疑某个东西是否属于公共层时,想想自己,这个组件是否可以在完全不同的软件系统中重用,甚至可以放入可重用工具包中?如果答案是“否”,那么您真的需要考虑它是否是一个横切关注点,或者它是否属于系统的另一部分。
上一篇:气压结构床和框架结构床的区别(气压结构床和框架结构床的区别)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |