你的位置:首页 > ASP.net教程

[ASP.net教程][Architect] ABP(现代ASP.NET样板开发框架) 分层架构


本节目录

  • 介绍
  • Domain Layer
  • Application Layer
  • Infrastructure Layer
  • Web Layer
    • SPA & MPA
    • frameworks/libraries
  • 其他

 

介绍

为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。

ABP遵循Domain Driven Design,在DDD中,会有4个基础分层.

  • Presentation(展现层): 引用 Application Layer ,提供用户界面.
  • Application(应用层): 作为Presentation and Domain Layers的中间人. 协调business objects 执行特殊的应用.
  • Domain(领域层): 整个软件的核心,包括 business objects and rules. 
  • Infrastructure: 为其他层提供技术支持. 如数据持久化.

可能会添加的层:

  • Distributed Service(分布式服务层): 公开应用层,提供远程调用.如 ASP.NET Web API and WCF实现该层.

这些都是以domain为中心的架构的通用分层,他们可能会在实现上略微不同.

 

每一层都可以由1个或多个程序集实现.创建多个程序集作为第三方依赖可能更好(比如Nhibernate).

 

 

Domain (Core) Layer

该层会实现所有 business rules.

Entities 提供业务领域的数据和操作. 通常会映射到数据库中的表.

Repositories 是1个对象集合,可以从数据库中读写entities.通常在Domain Layer 定义,在Infrastructure Layer实现.

Domain Events 定义领域事件并触发和处理事件.Domain services 处理entities and implement business rules 来解决不属于单个实体的功能.

Unit of Work 是1种管理实体的设计模式, 将受到业务逻辑影响的实体持久化到数据库中.

该层需尽可能少的引用第三方库.

 

Application Layer

应用层包含展现层需要使用的 application services.

 

应用服务方法接受1个 DTO (Data Transfer Object) 作为输入参数,使用这个输入参数执行一些领域操作.可能会返回另外1个DTO.

通常,不会直接接受和返回实体给展现层.

每个服务方法通常会包括,Unit of Work. User input validation 在该层已实现.

ABP很容易实现自定义验证.并建议使用 AutoMapper 作为实体到DTOS的转换

 

Infrastructure Layer

在基础设施层中,会使用NHibernate or EntityFramework实现Domain Layer 定义的repositories,ABP提供了这2个ORM的基类.

Database Migrations 建议放在该层.

该层一般为其他层提供依赖的第三方库.

 

Web & Presentation Layers

SPA & MPA

Web层可以使用ASP.NET MVC and Web API来实现,可实现成Multi-Page Applications or Single-Page Applications.

Single-Page Application (SPA) 中会一次加载所有资源(或者懒加载资源)给客户端,然后通过AJAX调用服务端.服务端返回数据给客户端,客户端生成HTML.页面不会刷新.

有很多JS的SPA框架,如 AngularJs, DurandalJs, BackboneJs, and EmberJs. ABP可以任意结合,且提供了AngularJs and DurandalJs的例子.

Multi-Page (Classic) Application (MPA),客户端发1个请求到服务端,服务端从数据库获取数据,通过Razor views生成HTML,返回到客户端展示,每个新的页面都会导致整个刷新.

SPA and MPA涉及完成不同的架构,后台管理适合使用SPA架构,博客适合MPA架构,因为博客希望被搜索引擎抓取,虽然有些工具可以让SPAs对搜索引擎可见,一般还是使用MPA

 

frameworks/libraries

SignalR是服务器推送通知的优秀工具,它可以提供丰富,及时的用户体验.

还有很多Javascript libraries & frameworks,jQuery是最流行的,拥有众多免费插件.

也有很多HTML & CSS tools/frameworks,Twitter Bootstrap目前非常火.

ABP提供基础设施,会为application service自动创建Web API,并且很容易通过JS来调用它(see documentation).

ABP还提供了菜单,本地化localization,语言切换,JS展示系统消息和通知的基础设施.

ABP自动 handles exceptions,并返回给客户端合适的结果.

 

其他

ABP提供并使用 Castle Windsor 作为Dependency Injection.

同时,在服务端使用Log4Net for logging.并且无需改变代码轻松实现切换日志

ABP使用了非常优秀的frameworks/libraries,并且提供完善的基础设施,同时,提供templates方便开始1个新项目.