入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

ASP.NET Core 企业级开发架构简介及框架汇总

创建时间:2017-11-20 投稿人: 浏览次数:1013

                     ASP.NET Core 企业级开发架构简介及框架汇总

企业开发框架包括垂直方向架构和水平方向架构。垂直方向架构是指一个应用程序的由下到上叠加多层的架构,同时这样的程序又叫整体式程序。水平方向架构是指将大应用分成若干小的应用实现系统功能的架构,同时这样的系统叫做分布式系统。在架构上Java和.Net世界都有优秀的框架支持构建垂直和水平方向架构。ASP.Net Core非常轻量且具有很高的性能,不仅适合做整体式程序,也非常适合做分布式系统。随着微服务的兴起,各种语言的混合应用是个趋势。


一、 垂直方向架构


1. 多层架构


分层架构通过程序包或者程序的隔离构建松耦合的应用。我们以最近流行的洋葱架构模型进行分析,如图:




1.1 领域模型


包括领域实体/存储接口/服务接口,是整个程序的核心。


  • 贫血模型


如果把大量的业务逻辑委托给服务接口实现者,领域模型显得很瘦小,就可以称之为贫血模型。这种模型下的领域对象仅仅表示“状态”。“行为”(也称为逻辑、过程)放在了N层结构的Logic/Service/Manager层中。优点是易于理解和实现,缺点是随着业务发展模型会难以表达业务领域。目前不少业内软件架构是这种模式。


贫血模型的简单图示:




  • 充血模型


如果在领域模型中实现主要的业务逻辑,把不方便实现的业务(比如汇率结算,地理坐标解析等)委托给服务接口实现者,此时领域模型显得粗壮,就可以称之为充血模型。这种模型下的领域对象既表示“状态”又有”行为“,领域对象之间还通过聚合在一个根(聚合根),然后由根对象保证状态的一致性(类似于数据库表之间的约束一致性)。优点是模型易于跟进业务发展,容易通过重构表达最新的业务领域;缺点是不易掌握。


充血模型的简单图示:




1.2 存储仓库


领域模型中的对象自从被创建出来后不会一直留在内存中活动,当它不活动时会被持久化到数据库中,然后当需要的时候就会重建该对象;重建对象就是根据数据库中已存储的对象的状态重新创建对象的过程。可见持久化和重建对象是一个和数据库打交道的过程。从更广义的角度来理解,程序会像集合一样从某个类似集合的地方根据某个条件获取一个或一些对象,往集合中添加对象或移除对象。也就是说,这就需要提供一种机制,可以提供类似集合的接口来帮助程序管理对象。仓储就是基于这样的思想被设计出来的。


贫血模型下的存储仓库:实现实体对象的CRUD。


充血模型下的存储仓库:创建聚合根对象,实体对象的创建/更新/删除的行为由聚合根完成。


1.3 服务


一般有三种服务:应用服务、领域服务、基础服务。




  • 应用服务

    调用领域服务,形成工作流程,提供事物上下文。应用服务可以直接为UI提供服务或者直接作为API暴露出去。

  • 领域服务

    在具体一个业务上下文中提供服务。比如订单生成服务提供订单的生成功能,订单的跟踪服务提供订单的执行信息。

  • 基础服务

    基础服务提供的是和业务无直接关系的工具辅助服务。比如日志,安全,通信,事件总线等等。


1.4 UI


提供应用程序界面,支持用户输入。高效的UI开发往往会依赖UI框架,比如MVC框架。


UI框架比较多,比如MFC,WinForm,Asp.net WebForm,Asp.net MVC,Structs等等。


综上:洋葱模型的各层由外到内的单向依赖,简单直接的降低了代码之间的耦合度。


2. 典型框架


2.1 数据存储框架


2.1.1 数据访问辅助


这类框架往往提供了一套操作连接/命令/结果集的接口。用户先发起连接,发生sql命令,然后得到结果集以按行(又叫记录)方式进行遍历。不同的数据库需要相应的数据库驱动和实现,但对于用户来说操作数据的方式都是一样的。


  • 优点:


1. 编写原始sql,执行效率高。

2. 握有连接对象,可以自定义事物的发起,提交或者回滚。

3. 可以针对不同数据存储方式定义数据访问库。

4. 一般比较轻量,依赖少。


  • 缺点:


1. 编写sql容易出错,随着数据库的演变,sql的潜在错误必须依赖充分的单元测试才能消除。

2. 数据库的演变,sql重构难度会逐渐增大。


框架 特点 开发语言
JDBC 简单易学,上手快,非常灵活构建SQL,效率高 Java
ADO.NET 接口清晰,支持离线遍历数据集,支持数据库和非数据库数据源 C#

2.1.2 对象-关系映射


对象-关系映射(Object-Relational Mapping,简称ORM),以面向对象的开发方法实现数据的增删改查。


  • 优点:


1. 提高开发效率,降低开发成本

2. 使开发更加对象化

3. 可移植

4. 可以很方便地引入数据缓存之类的附加功能


  • 缺点:


1. 自动化进行关系数据库的映射需要消耗系统性能。其实这里的性能消耗还不大,一般来说都可以忽略之(除非在性能特别关键应用)。

2. 在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂。


典型框架:


框架 特点 开发语言
Dapper 半自动;轻量级;自己写sql语句,可操作性强,小巧 C#
Entity Framework 全自动;较重量级;支持写linq和原生sql,功能强大 C#
Hibernate Hibernate功能强大,数据库无关性好,O/R映射能力强,需要学习HQL,精通的难度高 Java
iBATIS 更名为MyBatis,入门简单,即学即用;功能比较简陋,需要受写sql语句 Java / NET


2.2 MVC 框架


  • Model


负责提供界面绑定的数据,以及业务逻辑处理。


  • View


负责提供用户和应用之间的交互界面。不同类型的应用交互界面不同,可以是桌面程序窗口和web页面。


  • Controller


负责收集用户输入事件,并分配事件给对该事件感兴趣的模型处理。对MVC的理解难点在于控制器的解读,在下面我们会用经典MVC模式和后端MVC模式分析。


2.2.1 经典MVC模式


这种模式大量用在复杂交互界面的桌面应用程序,比如MFC框架;以及web富应用框架中,比如AngularJS 1(尽管有人称之为为MVVM框架)。




控制器把输入事件通知给对该事件感兴趣的模型(步骤3),模型更新自己的状态并引起视图更新(步骤4),然后将更新事件通知控制器(步骤5),此时如果有对该更新事件感兴趣的模型会进一步进行处理(步骤6)。事实上控制器和模型之间构成了订阅/发布关系。


MVVM框架:把Controller变成了ViewModel,它与View进行双向绑定:View的变动,自动反映在 ViewModel,反之亦然。




2.2.2 后端MVC模式


自web应用普及开来,涌现了不少后端MVC模式,比如JAVA的Structs,.NET的Asp.net MVC等。由于页面在浏览器中显示,用户输入通过http到达后端,在后端看来MVC模式默认如下图所示:




与经典MVC模式不同,控制器直接获

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。