.NET逻辑分层架构总结

   本人将从另一个角度来解析.NET分层架构的真正奥秘。分层,一些技术功底比较薄弱的程序员听到分层就会联想到三层架构(BLL,DAL之类的),其实不是,分层是一个很大的技术框架思想,三层架构只不过是对普通的信息系统来说,将信息的流转通过三层来分解,

  一.基础知识准备:

  1.层的原则:

  (1)每一层以接口方式供上层调用。

  (2)上层只能调用下层。

  (3)依赖分为松散交互和严格交互两种。

  2.业务逻辑分类:

  (1)应用逻辑。

  (2)领域逻辑。

  3.采用的层:

  (1)表示层(用户接口层):领域无关。

  (2)服务层(应用层):应用逻辑。

  (3)业务逻辑层(领域层):领域逻辑。

  (4)共享层:提供通用代码。

  (5)实现层:提供接口实现。

  4.约定:

  (1)领域层默认采用领域模型

  (2)数据访问层默认需要引用领域模型

  二.分层架构

  分层架构的三个基本层次为:表示层、业务逻辑层和数据访问层。如果按照业务逻辑的分类将业务逻辑层分解为服务层和领域层,则三层扩展为四个层次:表示层、服务层、领域层和数据访问层。数据访问层一般必须了解领域模型,这将在层之间产生双向依赖,通常我们有如下两种解决方案:

  1.将领域模型放置在共享层:

  评价:PetShop采用此种模型,但缺点众多:业务逻辑层名不副实,领域模型实为数据模型,保持了层间依赖,引入了更多依赖,明显的数据驱动思想,没有以领域为核心。

  2.将数据访问接口定义在业务逻辑层:

  评价:NopCommerce采用此种模型,即使采用分离出了服务层和采用了资源库命名方式,但NopCommerce不是DDD分层架构,只是采用了领域模型和接口分离原则的普通三层架构。缺点:除了数据房产,没有将其他具体的技术依赖从业务逻辑层中分离。

  三.DDD分层:

  DDD分层明确的将业务逻辑层分成了应用层(服务层)和领域层两部分。同时将数据访问和其他接口的具体技术实现部分统一到了基础设施层。

  1.原始的DDD分层:

  评价:优点是将具体技术实现从领域分离,基础设施层复用价值增加。缺点是没有使用共享和实现的概念细分基础设施层,导致在基础设施层中实现仓储会产生反向依赖,虽然在单项目解决方案中没有影响(仅命名空间层次的形式上的依赖),但在.NET多项目解决方案中,只能通过接口分离方式将仓储实现独立成类似数据访问层的方式。

  2.改善的DDD分层:

  评价:基础设施层同时具有共享层和实现层的特征。优点是终于做到了形式上领域为核心且同时解决了在基础设施层中实现仓储不能引用领域模型的尴尬,缺点是同样没有区分共享和实现的概念。

  3.最新的DDD分层:

  评价:优点是这是真正的以领域为核心,再也不用为基础设施层无法引用领域层而再服务层中再次适配了。使用依赖倒置原则彻底各层对具体技术的依赖倒置。缺点,依赖倒置应用过了头,同样是在单项目解决方案中没有问题,但在.NET多项目解决方案中会导致命名空间形式上的双向依赖。基础设施层作为实现层基本上没有了复用的价值。更好的方式是调换图中用户接口层和基础设施层的位置。

  可以根据需要考虑在上图添加适当的共享层。

  四.架构的趋势:

  (1)以业务逻辑为核心,更加重视业务逻辑。

  (2)将业务逻辑层的具体依赖划分到一个层次统一管理。

  (3)更加重视降低解决方案内的依赖性而不是解决方案间的代码复用。

  (4)共享层和实现层的分离将会越来越多的体现。例如洋葱型架构。

  以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-09-11 00:56:40

.NET逻辑分层架构总结的相关文章

.NET逻辑分层架构总结_实用技巧

一.基础知识准备: 1.层的原则: (1)每一层以接口方式供上层调用. (2)上层只能调用下层. (3)依赖分为松散交互和严格交互两种. 2.业务逻辑分类: (1)应用逻辑. (2)领域逻辑. 3.采用的层: (1)表示层(用户接口层):领域无关. (2)服务层(应用层):应用逻辑. (3)业务逻辑层(领域层):领域逻辑. (4)共享层:提供通用代码. (5)实现层:提供接口实现. 4.约定: (1)领域层默认采用领域模型 (2)数据访问层默认需要引用领域模型 二.分层架构 分层架构的三个基本层

基于.NET平台的分层架构实战

基于.NET平台的分层架构实战(十一)-表示层的实现 基于.NET平台的分层架构实战(十)-业务逻辑层的实现 基于.NET平台的分层架构实战(九)-数据访问层的第三种实现:基 基于.NET平台的分层架构实战(八)-数据访问层的第二种实现:SQ 基于.NET平台的分层架构实战(七-外一篇)-对数据访问层第一种 基于.NET平台的分层架构实战(七)-数据访问层的第一种实现:Acc 基于.NET平台的分层架构实战(六)-依赖注入机制及IoC的设计 基于.NET平台的分层架构实战(五)-接口的设计与实现

EntityFramework之领域驱动设计实践(二):分层架构

在引入实例以前,我们有必要回顾,并进一步了解分层架构."层"是一种体系结构模式[POSA1],也是被广大软件从业人员用得最为广泛而且最为灵活的模式之一.记得在CSDN上,时常有朋友问到:"分层是什么?为什么要分层?三层架构是不是就是表现层.业务逻辑层和数据访问层?" 到这里,你可能会觉得这些朋友的问题很简单,分层嘛,不就是将具有不同职责的组件分离开来,组成一套层内部高聚合,层与层之间低耦合的软件系统吗?不错!这是分层的目标.但是,我们应该如何分层呢? 领域驱动设计的

基于.NET平台的分层架构实战(六)—依赖注入机制及IoC的设计

我们设计的分层架构,层与层之间应该是松散耦合的.因为是单向单一调用, 所以,这里的"松散耦合"实际是指上层类不能具体依赖于下层类, 而应该依赖于下层提供的一个接口.这样,上层类不能直接实例化下层中的类, 而只持有接口,至于接口所指变量最终究竟是哪一个类,则由依赖注入机制决定 . 之所以这样做,是为了实现层与层之间的"可替换"式设计 ,例如,现在需要换一种方式实现数据访问层,只要这个实现遵循了前面定义的 数据访问层接口,业务逻辑层和表示层不需要做任何改动,只需要改一下

基于.NET平台的分层架构实战(五)—接口的设计与实现

接下来,将进行接口的设计.这里包括数据访问层接口和业务逻辑层接口.在 分层架构中,接口扮演着非常重要的角色,它不但直接决定了各层中的各个操作 类需要实现何种操作,而且它明确了各个层次的职责.接口也是系统实现依赖注 入机制不可缺少的部分. 本项目的接口设计将按如下顺序进行: 1.首先由前文的需求分析,列出主要的UI部分. 2.分析各个UI需 要什么业务逻辑支持,从而确定业务逻辑层接口. 3.分析业务逻辑层接口 需要何种数据访问操作,从而确定数据访问层接口. 另外,为保证完全的 面向对象特性,接口之

基于.NET平台的分层架构实战(一)—综述

通过浏览博客园的文章发现,很多朋友对分层架构特别感兴趣,刚好我刚做完 的毕业设计就是专门研究.NET平台上分层架构的(题目叫"基于.NET平台的 分层架构与设计模式应用研究").通过做这篇论文,我对分层架构有了一 定的了解,所以,就萌发了想写一个文章系列,详述一下分层架构.然而,论文 的理论性太强,不适合在网上发布,尤其不适合初学者理解,所以,我想在这个 文章系列中,少讲理论,而是通过做一个完整的案例来讨论分层架构的基本方法 ,这样会直观很多.希望在这个文章系列的写作过程中,能和朋友们

Flume日志收集分层架构应用实践

Flume作为一个日志收集工具,非常轻量级,基于一个个Flume Agent,能够构建一个很复杂很强大的日志收集系统,它的灵活性和优势,主要体现在如下几点: 模块化设计:在其Flume Agent内部可以定义三种组件:Source.Channel.Sink 组合式设计:可以在Flume Agent中根据业务需要组合Source.Channel.Sink三种组件,构建相对复杂的日志流管道 插件式设计:可以通过配置文件来编排收集日志管道的流程,减少对Flume代码的侵入性 可扩展性:我们可以根据自己

应用程序框架实战十三:DDD分层架构之我见(转)

前面介绍了应用程序框架的一个重要组成部分--公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构,使用单层架构和普通三层架构一样可以,不过你如果希望获得更进一步的复用性和封装度,使用更加面向对象的技术是必经之程. 我在2010年以前还在使用古老的ASP.NET WebForm和原始的Ado.Net.之前我有个观念:.NET技术发展太快,跟着微软屁股后面跑太累,所以只使用它一些原始的东西,自己封

《软件架构模式》-第一章分层架构(上)

第一章 分层架构 最通常的架构模式就是分层架构模式,即所谓的N层架构.这种模式对大部分JAVAEE应用程序来说是标准模式,因此被大部分架构师.软件设计师.开发者广泛知晓.由于分层架构模式和公司里传统的IT沟通以及组织结构非常类似,使得它成为大多数商务应用开发最自然的选择. 模式描述 在分层架构模式中,它将应用分成多个水平层,每个水平层在应用中担任一个专门的角色(比如表现层或者业务逻辑).尽管分层架构模型并没有指定必须的层次个数以及类型,但大部分这种模型都由4个标准层次构成:表现层.业务层.持久层