ABP框架模板开发手册
实战框架ABP
实战框架ABPabp及实战框架概述接触abp也快⼀年了,有过⼤半年的abp项⽬开发经验,⽬前项⽬中所⽤的abp框架版本为0.10.3,最新的abp框架已经到了1.4,并且⽀持了 core。
关于abp框架有哪些特性、有什么好处我这⾥就不讲了。
如果你对abp不太了解请先去 Abp官⽹了解或者参考我的学习之路⾥⾯的链接。
在这系列的⽂章⾥⾯我会把我在实战中的经验、碰到的坑分享出来。
希望跟⼤家⼀起学习讨论。
学习之路框架概述这个框架版本主要⽤的技术有 mvc5.0、web api、EF 6.1 。
⼀、整体框架概述Topeveyr.Core:主要存放业务实体以及仓储接⼝。
Application⽂件夹:这⾥⾯有两个应⽤服务层,当时是想做读写分离的,⼀个读⼀个写。
但是底层的数据访问层没有实现读写分离。
(全完实现读写分离还没找到解决⽅案)Topevery.EntityFramework.Oracle:主要存放实体映射⽂件、仓储实现类。
Topevery.Web:web界⾯。
Topevery.WebApi:api接⼝。
Topevery.Infrastructure:框架中跟业务⽆关的公共类。
Topevery.WF.Framework:流程业务相关项⽬。
Topevery.Abp:封装了abp类的公共类。
TimeServices:定时服务类库。
Dapper:⼀款轻量级orm框架。
主要是为了⽀持EF操作Oracled包⽽加进来的。
如果是其他数据库可以忽略该项⽬。
为了更好的统⼀,以后应该全部换成存储过程。
Zero⽂件夹:这⾥⾯的三个项⽬分别对应abp的应⽤服务层、核⼼层、数据访问层。
这个项⽬主要⽤来操作⼀些基础信息表以及公共模块。
⽐如,⽤户、⾓⾊、权限、部门等。
⼆、整体框架设计整体框架设计⾥⾯,我觉得“模块”的⽐较重要,这⾥就讲⼀讲我对模块的理解。
每个单独类库或者应⽤程序即是⼀个模块。
当需要⽤到Ioc容器、abp启动配置或者是在应⽤程序启动的时候做⼀些设置就需要⽤到abp⾥⾯的模块。
基于DDD的.NET开发框架-ABP模块设计
基于DDD的.NET开发框架-ABP模块设计ABP是“ Boilerplate Project (样板项⽬)”的简称。
Boilerplate是⼀个⽤最佳实践和流⾏技术开发现代WEB应⽤程序的新起点,它旨在成为⼀个通⽤的WEB应⽤程序框架和项⽬模板。
研究过orchard和nopcommerce的都应该知道模块概念,ABP的模块也和他们是⼀回事。
实现原理也都⼀样:应⽤程序⼀般都是先定义模块接⼝,然后把模块编译的dll放到固定的⽬录中(ABP只能放到bin下),应⽤程序主程序通过加载那些实现了插件接⼝的dll来实现插件的使⽤。
ABP 框架提供了创建和组装模块的基础,⼀个模块能够依赖于另⼀个模块。
在通常情况下,⼀个程序集就可以看成是⼀个模块。
在 ABP 框架中,⼀个模块通过⼀个类来定义,⽽这个类要继承⾃ AbpModule。
nopcommerce插件实现可以到:了解下。
下⾯的例⼦,我们开发⼀个可以在多个不同应⽤中被调⽤MybolgApplication模块,代码如下:public class MyBlogApplicationModule : AbpModule //定义{public override void Initialize() //初始化{IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());//这⾏代码的写法基本上是不变的。
它的作⽤是把当前程序集的特定类或接⼝注册到依赖注⼊容器中。
}}ABP框架会扫描所有的程序集,并且发现AbpModule类中所有已经导⼊的所有类,如果你已经创建了包含多个程序集的应⽤,对于ABP,我们的建议是为每⼀个程序集创建⼀个Module(模块)。
⽣命周期:在⼀个应⽤中,abp框架调⽤了Module模块的⼀些指定的⽅法来进⾏启动和关闭模块的操作。
我们可以重载这些⽅法来完成我们⾃⼰的任务。
ABP实践(一)创建ABP项目
ABP实践(⼀)创建ABP项⽬ABP是⼀个开源应⽤程序框架,专注于基于 Core的Web应⽤程序开发,但也⽀持开发其他类型的应⽤程序.ABP整合了.net开发中的各种技术新版的ABP需要依赖.NET 6的环境,需要先安装对应的SDK⼀.安装ABPdotnet tool install -g Volo.Abp.Cli⼆.创建项⽬这⾥使⽤ABP CLI来进⾏创建abp new ABP.Demo -u mvc -d ef -dbms MySQL -o "D:\ABPDemo"new的常⽤命令--output-folder或者-o: 指定输出⽂件夹,默认是当前⽬录.--ui或者-u: 指定ui框架.默认mvc框架.其他选项 (mvc、angular、blazor、none)--database-provider或者-d: 指定数据库提供程序.默认是ef.其他选项(ef、mongodb)-dbms:指定数据库类型三.⽣成的代码结构项⽬结构项⽬组织在src和test⽂件夹中. src⽂件夹包含实际应⽤程序,该应⽤程序基于前⾯提到的原则进⾏分层. 下图展⽰了解决⽅案的层和项⽬的依赖关系:Domain.Shared 项⽬项⽬包含常量,枚举和其他对象,这些对象实际上是领域层的⼀部分,但是解决⽅案中所有的层/项⽬中都会使⽤到.该项⽬不依赖解决⽅案中的其他项⽬. 其他项⽬直接或间接依赖该项⽬Domain 项⽬解决⽅案的领域层. 它主要包含实体, 集合根, 领域服务, 值类型, 仓储接⼝和解决⽅案的其他领域对象. 它依赖.Domain.Shared项⽬,因为项⽬中会⽤到它的⼀些常量,枚举和定义其他对象.Application.Contracts 项⽬项⽬主要包含应⽤服务 interfaces 和应⽤层的数据传输对象 (DTO). 它⽤于分离应⽤层的接⼝和实现. 这种⽅式可以将接⼝项⽬做为约定包共享给客户端.它依赖.Domain.Shared因为它可能会在应⽤接⼝和DTO中使⽤常量,枚举和其他的共享对象.Application 项⽬项⽬包含.Application.Contracts项⽬的应⽤服务接⼝实现.它依赖.Application.Contracts项⽬, 因为它需要实现接⼝与使⽤DTO.它依赖.Domain项⽬,因为它需要使⽤领域对象(实体,仓储接⼝等)执⾏应⽤程序逻辑..EntityFrameworkCore 项⽬这是集成EF Core的项⽬. 它定义了DbContext并实现.Domain项⽬中定义的仓储接⼝.它依赖.Domain项⽬,因为它需要引⽤实体和仓储接⼝..EntityFrameworkCore.DbMigrations 项⽬包含解决⽅案的EF Core数据库迁移. 它有独⽴的DbContext来专门管理迁移.(ABP是⼀个模块化的框架,理想的设计是让每个模块都有⾃⼰的DbContext类. 这时⽤于迁移的DbContext就会发挥作⽤. 它将所有的DbContext配置统⼀到单个模型中以维护单个数据库的模式. 对于更⾼级的场景,可以程序可以拥有多个数据库(每个数据库有⼀个或多个模块表)和多个迁移DbContext(每个都维护不同的数据库模式))它依赖.EntityFrameworkCore项⽬,因为它重⽤了应⽤程序的DbContext配置 ..DbMigrator 项⽬必要时创建数据库(没有数据库时).应⽤未迁移的数据库迁移.初始化种⼦数据(当你需要时).它依赖.EntityFrameworkCore.DbMigrations项⽬ (针对EF Core),因为它需要访问迁移⽂件.它依赖.Application.Contracts项⽬,因为它需要访问权限定义在初始化种⼦数据时为管理员⽤户赋予所有权限..HttpApi 项⽬⽤于定义API控制器.它依赖.Application.Contracts项⽬,因为它需要注⼊应⽤服务接⼝..HttpApi.Client 项⽬定义C#客户端代理使⽤解决⽅案的HTTP API项⽬. 可以将上编辑共享给第三⽅客户端,使其轻松的在DotNet应⽤程序中使⽤你的HTTP API(其他类型的应⽤程序可以⼿动或使⽤其平台的⼯具来使⽤你的API).它依赖.Application.Contracts项⽬,因为它需要使⽤应⽤服务接⼝和DTO..Web 项⽬包含应⽤程序的⽤户界⾯(UI).如果使⽤ Core MVC UI, 它包括Razor页⾯,javascript⽂件,样式⽂件,图⽚等...包含应⽤程序主要的appsettings.json配置⽂件,⽤于配置数据库连接字符串和应⽤程序的其他配置依赖.HttpApi项⽬,因为UI层需要使⽤解决⽅案的API和应⽤服务接⼝.Test 项⽬.Domain.Tests⽤于测试领域层. .Application.Tests⽤于测试应⽤层. .EntityFrameworkCore.Tests⽤于测试EF Core配置与⾃定义仓储. .Web.Tests⽤于测试UI(适⽤于 Core MVC UI). .TestBase所有测试项⽬的基础(共享)项⽬. 。
ABP开发教程范文
ABP开发教程范文1.ABP基本概念ABP的核心概念是模块化和领域驱动设计。
在ABP中,应用程序被组织成多个模块,每个模块负责一个特定的功能或领域。
每个模块可以包含实体、服务、仓储、应用程序服务等组件。
2.ABP开发环境搭建3.创建模块在ABP中,可以通过使用命令行工具(ABPCLI)来创建新的模块。
首先,打开命令行窗口,导航到项目的根目录下。
然后运行以下命令来创建一个新的模块:dotnet abp create-module MyModule这将在项目中创建一个名为“MyModule”的新模块。
创建模块后,可以添加实体、服务、仓储等组件来实现模块的功能。
4.定义实体在ABP中,实体是应用程序的核心组件。
可以使用EF Core或Dapper等ORM工具来定义和操作实体。
在模块中,创建一个新的实体类,并定义其属性和关联关系。
例如,我们可以创建一个名为“Product”的实体类:public class Product : Entity<Guid>public string Name { get; set; }public decimal Price { get; set; }5.创建应用程序服务应用程序服务是用于实现业务逻辑的组件。
在ABP中,可以通过继承ApplicationService类来创建应用程序服务。
在模块中,创建一个新的应用程序服务类,并实现其方法。
例如,我们可以创建一个名为“ProductAppService”的应用程序服务:public class ProductAppService : ApplicationServiceprivate readonly IRepository<Product, Guid>_productRepository;public ProductAppService(IRepository<Product, Guid> productRepository)_productRepository = productRepository;}public async Task<List<ProductDto>> GetAllvar products = await _productRepository.GetAllListAsync(;return ObjectMapper.Map<List<ProductDto>>(products);}6.创建API控制器使用ABP创建一个API控制器非常简单。
ABP框架的体系结构及模块系统分析
ABP框架的体系结构及模块系统分析作者:陈浩来源:《电脑知识与技术》2016年第32期摘要:ABP是“ Boilerplate Project 即样板项目”的简称。
Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板。
Boilerplate 基于DDD领域驱动设计的经典分层架构思想,实现了众多DDD的概念。
该文针对此问题讨论了ABP的设计过程。
关键词:ABP;;领域驱动设计中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)32-0045-021 ABP框架模式概述ABP框架是基于的Web开发框架,不过它遵循一种名为DDD(领域驱动设计)的设计模式原则,下面就ABP框架的体系结构及模块系统做以分析。
为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。
为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将分为四个层次:展现层(Presentation):提供一个用户界面,实现用户交互操作。
应用层(Application):进行展现层与领域层之间的协调,协调业务对象来执行特定的应用程序的任务。
它不包含业务逻辑。
领域层(Domain):包括业务对象和业务规则,这是应用程序的核心层。
基础设施层(Infrastructure):提供通用技术来支持更高的层。
例如基础设施层的仓储(Repository)可通过ORM来实现数据库交互。
2 ABP体系结构分析一个简单的解决方案,大致包含5个项目,每一层可以用一个或多个程序集来实现,具体分析如下:1)领域层(Domain)领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现。
2)实体(Entity)实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表。
3)仓储(Repository)仓储用来操作数据库进行数据存取。
ABP开发框架前后端开发系列---(1)框架的总体介绍
ABP开发框架前后端开发系列---(1)框架的总体介绍ABP是 Boilerplate的简称,ABP是⼀个开源且⽂档友好的应⽤程序框架。
ABP不仅仅是⼀个框架,它还提供了⼀个最徍实践的基于领域驱动设计(DDD)的体系结构模型。
学习使⽤ABP框架也有⼀段时间了,⼀直想全⾯了解下这个框架的整个来龙去脉,并把想把它使⽤历程整理成⼀个系列出来,不过⼀直没有下笔来写这篇⽂章的开篇,就是希望能够深⼊了解,再深⼊了解⼀些,希望⾃⼰能够理解透彻⼀些,不能误⼈⼦弟,也不想和⽹上千篇⼀律的翻译官⽹的内容,官⽹的英⽂介绍也已经很详细了,于是我觉得还是以实际使⽤的过程进⾏⼀定的整理会更好。
初次了解ABP框架,对它还是⾮常惊艳的,它基本上是.NET 领域架构的集⼤成者,⼏乎囊括了我们.NET领域排的上名的各种技术应⽤,⽽且它本⾝可以⽀持.net framework和.net core两种技术流派,对它的介绍也是⾮常感兴趣。
1)ABP框架的特点我们来⼤概了解下ABP框架涉及到的内容。
依赖注⼊,这个部分使⽤ Castle windsor (依赖注⼊容器)来实现依赖注⼊,这个也是我们经常使⽤IOC来处理的⽅式;Repository仓储模式,已实现了Entity Framework、NHibernate、MangoDB、内存数据库等,仓储模式可以快速实现对数据接⼝的调⽤;⾝份验证与授权管理,可以使⽤声明特性的⽅式对⽤户是否登录,或者接⼝的权限进⾏验证,可以通过⼀个很细粒度的⽅式,对各个接⼝的调⽤权限进⾏设置;数据有效性验证,ABP⾃动对接⼝的输⼊参数对象进⾏⾮空判断,并且可以根据属性的申请信息对属性的有效性进⾏校验;审计⽇志记录,也就是记录我们对每个接⼝的调⽤记录,以及对记录的创建、修改、删除⼈员进⾏记录等处理;Unit Of Work⼯作单元模式,为应⽤层和仓储层的⽅法⾃动实现数据库事务,默认所有应⽤服务层的接⼝,都是以⼯作单元⽅式运⾏,即使它们调⽤了不同的存储对象处理,都是处于⼀个事务的逻辑⾥⾯;异常处理,ABP框架提供了⼀整套⽐较完善的流程处理操作,可以很⽅便的对异常进⾏进⾏记录和传递;⽇志记录,我么可以利⽤Log4Net进⾏常规的⽇志记录,⽅便我们跟踪程序处理信息和错误信息;多语⾔/本地化⽀持,ABP框架对多语⾔的处理也是⽐较友好的,提供了对XML、JSON语⾔信息的配置处理;Auto Mapping⾃动映射,这个是ABP的很重要的对象隔离概念,通过使⽤AutoMaper来实现域对象和DTO对象的属性映射,可以隔离两者的逻辑关系,但是⼜能轻松实现属性信息的赋值;动态Web API层,利⽤这个动态处理,可以把Application Service 直接发布为Web API层,⽽不需要在累赘的为每个业务对象⼿⼯创建⼀个Web API的控制器,⾮常⽅便;动态JavaScript的AJax代理处理,可以⾃动创建Javascript 的代理层来更⽅便使⽤Web Api,这个在Web层使⽤。
ABP入门教程
ABP⼊门教程ABP⼊门教程ABP是“ Boilerplate Project (样板项⽬)”的简称。
Boilerplate是⼀个⽤最佳实践和流⾏技术开发现代WEB应⽤程序的新起点,它旨在成为⼀个通⽤的WEB应⽤程序框架和项⽬模板。
ABP的官⽅⽹站:ABP在Github上的开源项⽬:ABP 的由来“DRY——避免重复代码”是⼀个优秀的开发者在开发软件时所具备的最重要的思想之⼀。
我们在开发企业WEB应⽤程序时都有⼀些类似的需求,例如:都需要登录页⾯、⽤户/⾓⾊管理、权限验证、数据有效性验证、多语⾔/本地化等等。
⼀个⾼品质的⼤型软件都会运⽤⼀些最佳实践,例如分层体系结构、领域驱动设计、依赖注⼊等。
我们也可能会采⽤ORM、数据库迁移(Database Migrations)、⽇志记录(Logging)等⼯具。
从零开始创建⼀个企业应⽤程序是⼀件繁琐的事,因为需要重复做很多常见的基础⼯作。
许多公司都在开发⾃⼰的应⽤程序框架来重⽤于不同的项⽬,然后在框架的基础上开发⼀些新的功能。
但并不是每个公司都有这样的实⼒。
假如我们可以分享的更多,也许可以避免每个公司或每个项⽬的重复编写类似的代码。
作者之所以把项⽬命名为“ Boilerplate”,就是希望它能成为开发⼀般企业WEB应⽤的新起点,直接把ABP作为项⽬模板。
ABP是什么?ABP是为新的现代Web应⽤程序使⽤最佳实践和使⽤最流⾏⼯具的⼀个起点。
可作为⼀般⽤途的应⽤程序的基础框架或项⽬模板。
它的功能包括:服务器端:基于最新的.NET技术(⽬前是 MVC 5、Web API 2、C# 5.0,在 5正式发布后会升级)实现领域驱动设计(实体、仓储、领域服务、领域事件、应⽤服务、数据传输对象,⼯作单元等等)实现分层体系结构(领域层,应⽤层,展现层和基础设施层)提供了⼀个基础架构来开发可重⽤可配置的模块集成⼀些最流⾏的开源框架/库,也许有些是你正在使⽤的。
提供了⼀个基础架构让我们很⽅便地使⽤依赖注⼊(使⽤Castle Windsor作为依赖注⼊的容器)提供Repository仓储模式⽀持不同的ORM(已实现Entity Framework 、NHibernate、MangoDb和内存数据库)⽀持并实现数据库迁移(EF 的 Code first)模块化开发(每个模块有独⽴的EF DbContext,可单独指定数据库)包括⼀个简单的和灵活的多语⾔/本地化系统包括⼀个 EventBus来实现服务器端全局的领域事件统⼀的异常处理(应⽤层⼏乎不需要处理⾃⼰写异常处理代码)数据有效性验证( MVC只能做到Action⽅法的参数验证,ABP实现了Application层⽅法的参数有效性验证)通过Application Services⾃动创建Web Api层(不需要写ApiController层了)提供基类和帮助类让我们⽅便地实现⼀些常见的任务使⽤“约定优于配置原则”客户端:Bootstrap、Less、AngularJs、jQuery、Modernizr和其他JS库: jQuery.validate、jQuery.form、jQuery.blockUI、json2等为单页⾯应⽤程序(AngularJs、Durandaljs)和多页⾯应⽤程序(Bootstrap+Jquery)提供了项⽬模板。
abp next 初始化 模块 调用方法
ABP Next 是一个开源的 Boilerplate 框架的继承者,它提供了一种快速、易用的方式来创建企业级的应用程序。
本文将介绍如何初始化 ABP Next 框架,并调用其模块的方法。
一、初始化 ABP Next1. 下载 ABP Next我们需要从冠方全球信息站(xxx)下载 ABP Next 框架的最新版本。
2. 创建新项目在下载并安装 ABP Next 框架之后,我们可以使用命令行工具或Visual Studio对ABP Next进行初始化。
在命令行中执行以下命令来创建一个新的ABP Next项目:```shellabp new MyProjectName```3. 选择模板在创建项目的过程中,我们可以选择不同的模板来快速构建一个符合我们需求的项目。
4. 配置数据库ABP Next 默认使用Entity Framework Core作为对象关系映射(ORM)框架,我们需要配置数据库连接并进行迁移。
5. 启动项目完成项目初始化后,我们可以使用命令行工具或Visual Studio来启动项目。
二、调用模块方法ABP Next 框架提供了各种模块来简化开发流程,我们可以通过以下步骤来调用这些模块的方法。
1. 引用模块在需要使用模块功能的地方,首先我们需要在代码中引用相应的模块。
如果我们需要使用身份认证模块,可以在代码中引用Identity模块:```csharpusing Volo.Abp.Identity;```2. 获取模块实例在引用了模块后,我们可以通过依赖注入系统来获取模块的实例。
我们可以在控制器中通过构造函数注入Identity模块的实例:```csharpprivate readonly IdentityUserManager _userManager;public MyController(IdentityUserManager userManager){_userManager = userManager;}```3. 调用模块方法一旦我们获取了模块的实例,就可以调用模块提供的方法来完成相应的功能。
ABP框架模板开发手册
ABP框架模板开发手册杭州蒙特信息技术有限公司2018年1月目录1ABP框架介绍 (3)1.1ABP简介 (3)1.2ABP多层结构 (3)1.3ABP环境 (5)1.4开发环境 (5)2搭建网站 (5)2.1获取源码 (5)2.2搭建数据库 (6)2.3搭建站点 (8)3模块开发 (9)3.1领域层 (9)3.2应用层 (18)4后台页面 (22)5前台页面 (27)6后台配置....................................................................................................错误!未定义书签。
1ABP框架介绍1.1ABP简介我们总是对不同的需求开发不同的应用。
但至少在某些层面上,一次又一次地重复实现通用的和类似的功能。
如:授权,验证,异常处理,日志,本地化,数据库连接管理,设置管理,审核日志等功能。
所以我们创建架构和最佳实践,如分层和模块架构,DDD,依赖注入等,并尝试开发应用时基于一些约定。
由于所有这些是非常耗时而且很难单独创建并可适用于每个项目,许多公司创建自己的框架,他们用自己的框架能快速开发新应用而且不出错。
但不是所有的公司都是幸运的,大部分公司没有时间,预算和团队来开发好的框架。
他们甚至都没有可能创建一个框架,因为编写文档,培训开发人员和维护框架都是非常困难的。
Boilerplate (ABP) 是一个开源并且有丰富文档的应用框架,开发宗旨是:“为所有公司,所有开发人员,开发出一个通用框架!”,而且不只是一个框架,同时提供一个强大的基于DDD的构架模型和最佳实践。
1.2ABP多层结构一个应用的代码库的分层是一个广为接受的技术,用来减少复杂度和提高代码复用性。
ABP依照DDD理念来分层,在DDD里有4个基本的层:•表示层:为用户提供一个界面。
使用应用层来完成用户交互。
•应用层:表示层与领域层的媒介。
ABP快速开发框架教程整理
ABP快速开发框架教程整理
ABP是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板,基于DDD的经典分层架构思想,实现了众多DDD的概念,诞生的主要目的就是为了让.NET程序员秒变架构师,将.NET企业级项目的主流开发技术、最先进的架构整合起来,让.NET工程师能够更快的开发出更好的项目。
Boilerplate是一个用最佳实践和流行技术开发现代WEB 应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板。
ABP是基于最新的 CORE, MVC和 Web API 技术的应用程序框架。
并使用流行的框架和库,它提供了便于使用的授权,依赖注入,验证,异常处理,本地化,日志记录,缓存等常用功能。
ABP实现了多层架构(领域层,应用层,基础设施层和表示层),以及领域驱动设计(实体,存储库,领域服务,应用程序服务,DTO 等)。
还实现和提供了良好的基础设施来实现最佳实践,如依赖注入。
ABP轻松地为您的项目创建启动模板。
它默认包括最常用的框架和库。
还允许您选择单页(Angularjs)或多页架构,EntityFramework或NHibernate作为ORM。
关于ABP框架高质量学习资料整理汇总「持续更新」
ABP入门系列目录-学习ABP框架之实操演练系列
Boilerplate 博客系列
ABP框架理论研究总结系列
ABP理论基础篇系列博客
基于DDD的现代开发框架-ABP系列文章总目录
ABP源码分析系列文章目录。
abp系列总结
ABP系列总结简介ABP( Boilerplate)是一个开源的应用程序框架,旨在帮助开发人员快速构建和开发企业级应用程序。
它提供了一套先进的架构和常用功能,使开发人员能够专注于核心业务逻辑而不必花费太多时间处理基础架构。
本文将对ABP系列进行总结,介绍其主要特点、框架架构以及使用方法等内容。
主要特点ABP框架具有以下主要特点:1.模块化设计:ABP采用了模块化设计,开发人员可以根据需求添加或移除所需功能模块,以满足不同应用程序的特定要求。
2.多层架构:ABP采用三层(应用层、领域层和基础设施层)架构,使应用程序的各个部分分离独立,易于维护和测试。
3.领域驱动设计:ABP鼓励开发人员使用领域驱动设计(DDD)的思想,将业务逻辑和领域模型紧密结合,并按照业务需求进行设计。
4.通用功能:ABP提供了大量通用功能,如权限管理、用户角色管理、登录验证、多语言支持、缓存管理等,开发人员可以直接使用这些功能,省去重复编写代码的时间和精力。
5.跨平台支持:ABP支持多种平台,包括 Core、MVC、Xamarin、Angular等,开发人员可以选择适合自己的平台进行开发。
框架架构ABP框架采用三层架构,分为应用层、领域层和基础设施层。
1.应用层:应用层是应用程序的最高层,负责处理用户请求和调用领域层的服务。
它可以包含一系列应用服务,每个应用服务都是一个应用程序的特定功能。
开发人员可以在应用层实现业务逻辑,调用相应的领域服务来处理数据和状态。
2.领域层:领域层是应用程序的核心层,包含了业务逻辑和领域模型。
它定义了应用程序的行为和规则,并提供了一组领域服务供应用层调用。
开发人员可以在领域层实现具体的业务逻辑,并通过领域模型来处理和操作数据。
3.基础设施层:基础设施层是应用程序的最底层,提供了一些通用的功能和服务,使应用程序更易于开发和部署。
它包含了持久化层、外部服务和一些常用的工具类。
开发人员可以在基础设施层集成第三方库、管理数据库、处理日志记录和缓存等。
ABPvNext框架学习教程
ABPvNext框架学习教程APB vNext 框架⼊门快速⼊门案例.NET Core 控制台应⽤1. 安装 ABP 框架核⼼依赖Install-Package Volo.Abp.Core -Version 3.3.22. 新建 ABP 应⽤的启动模块HelloAbpModule.csusing Volo.Abp.Modularity;namespace HelloAbp{/// <summary>/// 启动模块/// </summary>public class HelloAbpModule : AbpModule{}}3. 新建服务,并注册到启动模块中HelloWorldService.csusing System;using Volo.Abp.DependencyInjection;namespace HelloAbp{/// <summary>/// TODO: ABP 注册服务⽅式⼀:继承接⼝/// ISingletonDependency、IScopedDependency、ITransientDependency/// </summary>public class HelloWorldService : ITransientDependency{public void Run(){Console.WriteLine($"{nameof(HelloAbpModule)}-{nameof(HelloWorldService)}: Hello World!");}}}4. 根据启动模块创建 ABP应⽤,调⽤应⽤中注册的服务⽅法Program.csusing System;using Microsoft.Extensions.DependencyInjection;using Volo.Abp;namespace HelloAbp{class Program{static void Main(string[] args){// 根据启动模块创建 abp 应⽤var application = AbpApplicationFactory.Create<HelloAbpModule>();// 初始化 abp 应⽤application.Initialize();// 获取应⽤中注册的服务var service = application.ServiceProvider.GetService<HelloWorldService>();// 调⽤应⽤中的服务⽅法service.Run();Console.ReadKey();}} Core Web 应⽤程序1. 安装 ABP 框架核⼼依赖Install-Package Volo.Abp.Core -Version 3.3.2Install-Package Volo.Abp.AspNetCore.Mvc -Version 3.3.22.新建 ABP 应⽤的启动模块AppModule.csusing System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Http;using Microsoft.Extensions.Hosting;using Volo.Abp;using Volo.Abp.AspNetCore.Mvc;using Volo.Abp.Modularity;namespace HelloWebAbp{/// <summary>/// 启动模块/// TODO: 1.在启动模块中配置 Core Web 程序的管道,就需要定义对 Core Mvc模块的依赖 /// </summary>[DependsOn(typeof(AbpAspNetCoreMvcModule))]public class AppModule : AbpModule{/// <summary>/// 应⽤初始化⽅法/// TODO: 2.重写 ABP 应⽤的初始化⽅法,⽤来构建 Core 应⽤程序的中间件管道/// </summary>/// <param name="context"></param>public override void OnApplicationInitialization(ApplicationInitializationContext context){// base.OnApplicationInitialization(context);var app = context.GetApplicationBuilder();var env = context.GetEnvironment();if (env.IsDevelopment()){eDeveloperExceptionPage();}eRouting();// TODO: 5.将程序应⽤的端点配置修改为 ABP 应⽤的端点配置eConfiguredEndpoints();}}}3. 注册 ABP 启动模块,并初始化 ABP 应⽤Startup.csusing Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Http;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;namespace HelloWebAbp{/// <summary>/// 程序启动类/// TODO: 3. 在 Startup 类中,完成对 ABP 应⽤的初始化/// </summary>public class Startup// This method gets called by the runtime. Use this method to add services to the container.// For more information on how to configure your application, visit https:///fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services){services.AddApplication<AppModule>();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.InitializeApplication();}}}4. 新建控制器,测试 ABP 应⽤运⾏状态HomeController.csusing Microsoft.AspNetCore.Mvc;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Volo.Abp.AspNetCore.Mvc;namespace HelloWebAbp.Controllers{/// <summary>/// 控制器/// TODO: 4. 继承 Abp 框架中的基类控制器(提供了⼀些便捷的服务和⽅法)/// </summary>public class HomeController : AbpController{public IActionResult Index(){return Content("Hello world!");}}}各个击破案例ABP应⽤中的模块可以有很多个,但是启动模块只能有⼀个;ABP应⽤中的每个模块之间没有必然的联系;ABP应⽤中每个模块注册的服务,都注册到了ABP应⽤的全局容器中;ABP应⽤中的模块也分为两种类型:应⽤程序模块(业务实现)和框架模块(技术实现);ABP应⽤中最顶层的模块是启动模块,最后被加载的也是启动模块。
ABP框架的基础配置及依靠注入讲解_
ABP框架的基础配置及依靠注入讲解_ 这篇文章主要介绍了ABP框架的基础配置及依靠注入讲解,是ABP框架上手用法的基本,要的伴侣可以参考下配置ABP配置是通过在自己模块的PreInitialize方法中来实现的代码示例如下:public class SimpleTaskSystemModule : AbpModule{public override void PreInitialize(){//在你的应用中添加语言包,这个是英语和的土耳其语。
nguages.Add(new LanguageInfo("en", "English", "famfamfam-flag-england", true));nguages.Add(new LanguageInfo("tr", "Türke", "famfamfam-flag-tr")); Configuration.Localization.Sources.Add(new XmlLocalizationSource("SimpleTaskSystem",HttpContext.Current.Server.MapPath("~/Localization/ SimpleTaskSystem")));//配置导航和菜单Configuration.Navigation.Providers.AddSimpleTaskSys temNavigationProvider();}public override void Initialize(){IocManager.RegisterAssemblyByConvention(Assembly.Ge tExecutingAssembly());}}和orchard类似,abp框架一开头就被设计成模块化的,不同的模块可以通过abp框架来进行配置。
ABP开发教程
ABP Framework入门开发指南领域驱动设计(DDD)红宝书修订版本号:1.0.0.0ABP框架中国小组(ABPFrameWorkGroup)@版权所有2015-06-11序言天道该开发指南基于ABP Framework官方文档,由ABP框架中国小组(ABPFrameWorkGroup)翻译。
ABP框架中国小组在Github的地址为:https:///ABPFrameWorkGroup,大家可以在该地址下载最新的翻译文档并加入讨论。
以后,最新的ABPFrameWork档,ABPFrameWork实例教程,以及代码都通过Github的ABP框架中国小组(ABPFrameWorkGroup)发布,请大家关注。
ABP官方文档翻译征集启动以来,得到了大家的热烈响应,先后共有10多名群友参与了翻译,目前翻译工作已经安排完毕,再次感谢广大群友的热烈支持。
毫无疑问,该开发指南的发布是一次团体智慧和协作的结晶,是”ABP框架中国小组”共同努力的成果。
我们应当感谢他们的默默付出,感谢他们在这个酷热的夏天依旧能够挥洒着汗水辛苦的工作。
此次的翻译工作完全是个人自主行为,旨在帮助那些学习.NET架构和研究领域驱动设计(DDD)的开发者们。
我们有理由相信,通过学习官方文档并结合ABP的源码,大家的.NET水平必定有所提高。
该文档不仅是ABP的开发指南,也是.NET架构设计的一个优秀参考范本,指南中提及的各种封装和技术实现,也可以很方便的集成到自己的项目中去。
因此,这里推荐大家在研究源码的时候,遇到问题可以首先参考一下这本指南。
关于此次翻译的标准如下:(1) 保留了原文的大部分关键词,这样方便大家以后学习这些常见词汇。
(2) 翻译的人称有第一人称和第二人称,由于时间关系,来不及统一。
我个人倾向于第一人称,因此对部分群友的翻译做了调整。
(3) 对部分翻译的语法做了调整,并且更加符合中国人的习惯。
(4) 翻译总体上保留了原文的风格,大家可以对比一下原文,这不失为一个学习英语的最佳实践。
abpvnext快速搭建项目框架
abpvnext快速搭建项⽬框架abp vnext 快速搭建项⽬框架刚发现图⽚不可看,https://shimo.im/docs/tHRDPcxw88rr6pgg/ 《abp vnext 快速搭建项⽬框架》,这是⽯墨笔记原⽂安装.net core develop 环境请查阅.net core 环境安装,也可以从VS 2019中安装,版本3.1.10(暂时项⽬不考虑.net5)安装 abp VNext clidotnet tool install -g Volo.Abp.Cli --version 3.3.2如果安装了最新版本,创建项⽬的时候需要指定为3.3.2安装时如意外终⽌,再进⾏安装时会报错,abp 与已有命令冲突,解决⽅法,在其他电脑安装好,将报错⽬录的⽂件拷贝过来就可以创建项⽬abp new Dx.Csp.VerificationCode -t app --tiered --no-ui --version 3.3.2-t 是模板默认是app,创建项⽬是可以不使⽤-t,另外⼀个选项为module,创建模块⽤--tiered 创建前后分离的项⽬--no-ui是忽略ui--version abp 版本项⽬结构如下依赖关系去除⽣成时⾃带模块1.Application2.Application.Contracts3.注释租户相关的服务4.删除或者注释掉IdentityServer相关服务如下5.注释Domian中不需要的模块6.注释租户配置7.注释Domian.Shared中不需要的模块8.注释掉⾃带⽤户相关配置包括DbSet<AppUser>9.注释EFCore中不需要的模块10.注释EfCore不使⽤的模块数据迁移11.删除创建项⽬⾃带的Migrations⽬录,执⾏数据迁移的时候⾃动⽣成12.注释HttpApi中不需要的模块13.注释Client模块中不需要的模块14.注释租户、认证、授权中间件(⽹关鉴权)修改配置1.修改Dx.Csp.Examples.DbMigrator,Dx.Csp.Examples.HttpApi.Host中appsettings.json数据库配置2.也可以⾃定义名称和DbContext中注解处相同即可3.修改使⽤mysql数据库,替换sqlserver引⽤4.配置使⽤MySQL新建实体配置数据库映射关系,Domain中新建⽬录可以将命名空间改短⼀些1.新建实体2.配置数据库映射创建服务接⼝,注意继承的接⼝不要丢了创建服务实现服务接⼝,注意箭头指的⽗类,和接⼝执⾏数据命令⽣成迁移脚本1.打开程序包管理控制器,选择DbMigrations类库2.设置控制台项⽬DbMigrator为启动项⽬3.Dx.Csp.Examples.Application中应⽤迁移依赖类库,直接复制过来就可以了在DbMigrations那个类库项⽬中有4.Add-Migration "init",看到To undo this action,use Remove-Migration 就成功了执⾏数据迁移,直接启动Dx.Csp.Examples.DbMigrator控制台项⽬就可以了,会提⽰迁移成功数据验证参阅⽂档命令⽣成最新版本没有问题,但是⽣成3.3.2这个版本是有问题的,可以⽣成最新版本然后改回去。
C#Abp框架入门系列文章(一)
C#Abp框架⼊门系列⽂章(⼀)随着技术的进步,各式各样的框架层出不穷,轮⼦越来越多,那么有没有哪些优秀的开发框架供我们使⽤呢?如果我们能够将各⽅⾯优秀的框架集合起来,应⽤到项⽬开发中,我们的⼯作是不是能事半功倍呢?⽽且各个框架的使⽤⽅向不同,很多配置也不同,如果能够将繁杂的基础⼯作集成起来,由统⼀的框架来完成,那么我们就可以专注于业务逻辑,提⾼⼯作效率。
现在Abp就是这么⼀个框架,使⽤流⾏技术开发现代web应⽤程序的最佳实践。
本⽂作为Abp框架的⼊门⽂章,仅供学习分享使⽤,如有不⾜之处,还请指正。
什么是Abp?ABP是“ Boilerplate Project (样板项⽬)”的简称。
Boilerplate是⼀个⽤最佳实践和流⾏技术开发现代WEB应⽤程序的新起点,它旨在成为⼀个通⽤的WEB应⽤程序框架和项⽬模板。
ABP是基于最新的 CORE, MVC和Web API技术的应⽤程序框架。
并使⽤流⾏的框架和库,它提供了便于使⽤的授权,依赖注⼊,验证,异常处理,本地化,⽇志记录,缓存等常⽤功能。
Abp架构ABP实现了多层架构(领域层,应⽤层,基础设施层和表⽰层),以及领域驱动设计(实体,存储库,领域服务,应⽤程序服务,DTO等)。
还实现和提供了良好的基础设施来实现最佳实践,如依赖注⼊。
了解了Abp框架的基础知识之后,让我们⼀步⼀步的搭建Abp框架,并实现⼀个简单的⼩例⼦。
安装CLI输⼊cmd打开命令⾏窗⼝,然后输⼊以下命令,安装Abp.Cli,如下所⽰:1 dotnet tool install -g Volo.Abp.Cli安装过程,如下图所⽰:创建第⼀个Abp项⽬在命令⾏,切换到程序所在⽬录【最好是空⽬录】,然后通过命令进⾏创建,如下所⽰:1 abp new Acme.BookStore安装过程,如下图所⽰:关于Abp的Cli相关命令,可参考。
项⽬创建成功后,如下所⽰:通过Visual Studio打开解决⽅案,如下所⽰:还原数据库在Abp解决⽅案中,通过运⾏【Acme.BookStore.DbMigrator】进⾏初始化数据库。
基于ABP框架的Web应用程序开发教程(翻译)
基于ABP框架的Web应⽤程序开发教程(翻译)Web Application Development Tutorial Web应⽤程序开发教程About This Tutorial 关于本教程In this tutorial series, you will build an ABP based web application named Acme.BookStore. This application is used to manage a list of books and their authors. It is developed using the following technologies:在这个教程系列中,你将创建⼀个基于ABP的Web应⽤程序,叫Acme.BookStore。
这个应⽤程序是⽤来管理书籍及其作者的列表的。
它是使⽤以下技术开发:Entity Framework Core 作为ORM的提供者.MVC / Razor Pages 作为UI框架.This tutorial is organized as the following parts;本教程由以下⼏个部分组成:Part 1: Creating the server sidePart 2: The book list pagePart 3: Creating, updating and deleting booksPart 4: Integration testsPart 9: Authors: User InterfacePart 10: Book to Author RelationDownload the Source Code 下载源代码This tutorial has multiple versions based on your UI and Database preferences. We've prepared a few combinations of the source code to be downloaded:本教程根据你对UI和Database的偏好有多个版本。
ABP入门系列之2——ABP模板项目
4. 打开程序包管理器控制台,选择以EntityFramework结尾的项目,并执行Update-Database,以创建数据库。 5. Ctrl+F5运行,使用账号admin/123qwe,登陆即可。
到此为止,一个套用ABP框架项目已经完成。
<connectionStrings> <add name="Default" connectionString="Server=localhost; Database=MyProject; Trusted_Connection=True;" providerName="System.Data.SqlClient" />
网络错误503请刷新页面重试持续报错请尝试更换浏览器或网络环境
1. 2. 依次按下图选择:
ABP入门系列之 2——ABP模板项目
3目
1. 使用VS2017打开项目,还原Nuget包:
2. 设置以Web结尾的项目,设置为启动项目:
3. 打开Web.config,修改连接字符串。(Server自行修改,但是name以及database可以不做修改,如若要修改要主要 EntityFramework已使用到的name和database都需要做修改,负责code first创建数据库会失败。)
基于abpvNext的快速开发模板
基于 abpvNext的快速开发模板
介绍
Templates to use when creating an application for abp vNext.
基于abp已经最小化集成了各种项目开发所需的组件,Redis、Swagger、Autofac、Serilog、数据迁移、JWT、多语言支持等,支持多数据库(MySql、SqlServer、Sqlite、
开源地址
MongoDB)自由切换,可以根据业务需求自行简单修改,真正的开箱即用,直接开干写业务。
快速使用
dotnet new -i AbpTemplate dotnet new abp -n Xxx(The name for the output being created)
创建成功后的项目结构如下:
Documents ├── Documents.sln ├── LICENSE ├── src │ ├── Documents.Application │ ├── Documents.Application.Caching │ ├── Documents.Application.Contracts │ ├── Documents.DbMigrator │ ├── Documents.Domain │ ├── Documents.Domain.Shared │ ├── Documents.EntityFrameworkCore │ ├── Documents.EntityFrameworkCore.DbMigrations │ ├── Documents.HttpApi │ ├── Documents.HttpApi.Host │ └── Documents.MongoDB └── test
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ABP框架模板开发手册杭州蒙特信息技术有限公司2018年1月目录1ABP框架介绍 (3)1.1ABP简介 (3)1.2ABP多层结构 (3)1.3ABP环境 (5)1.4开发环境 (5)2搭建网站 (5)2.1获取源码 (5)2.2搭建数据库 (6)2.3搭建站点 (8)3模块开发 (9)3.1领域层 (9)3.2应用层 (18)4后台页面 (22)5前台页面 (27)6后台配置....................................................................................................错误!未定义书签。
1ABP框架介绍1.1ABP简介我们总是对不同的需求开发不同的应用。
但至少在某些层面上,一次又一次地重复实现通用的和类似的功能。
如:授权,验证,异常处理,日志,本地化,数据库连接管理,设置管理,审核日志等功能。
所以我们创建架构和最佳实践,如分层和模块架构,DDD,依赖注入等,并尝试开发应用时基于一些约定。
由于所有这些是非常耗时而且很难单独创建并可适用于每个项目,许多公司创建自己的框架,他们用自己的框架能快速开发新应用而且不出错。
但不是所有的公司都是幸运的,大部分公司没有时间,预算和团队来开发好的框架。
他们甚至都没有可能创建一个框架,因为编写文档,培训开发人员和维护框架都是非常困难的。
Boilerplate (ABP) 是一个开源并且有丰富文档的应用框架,开发宗旨是:“为所有公司,所有开发人员,开发出一个通用框架!”,而且不只是一个框架,同时提供一个强大的基于DDD的构架模型和最佳实践。
1.2ABP多层结构一个应用的代码库的分层是一个广为接受的技术,用来减少复杂度和提高代码复用性。
ABP依照DDD理念来分层,在DDD里有4个基本的层:•表示层:为用户提供一个界面。
使用应用层来完成用户交互。
•应用层:表示层与领域层的媒介。
协调服务业对象执行指定的应用任务。
•领域层:包含业务对象和业务规则。
是整个应用的核心。
•基础层:提供支持更高层的通用技术。
一个基础层的典型例子是通过ORM框架实现与数据库的交互的仓储,或是实现发送邮件的邮件供应器。
也可以根据需要添加层,例如:•分布服务层:为远程客户端公开应用特性。
像 web API和WCF等。
这些都是以领域为核心的架构的通用层。
实现上可能有些细微的差别。
层和结构的预览如下ABP分层结构图如下1.3ABP环境前台环境MVC + Bootstrap后台环境Angular框架 + AdminLTE + Bootstrap基础环境.NET Framework 4.6.1 + EF1.4开发环境TypeScript:微软开发的自由和开源的编程语言,这是Javascript的超集;Web Compiler: A Visual Studio extension that compiles LESS, Sass, JSX, ES6 and CoffeeScript files;如何ABP的.NET框架是Core 2.0时则需要使用Visual Studio 20172搭建网站2.1获取源码第一步:通过SVN获取源码,源码下载之后Visual Studio打开源文件,第二步:用Visual Studio还原NuGet包如下图第三步:重新生成解决方案(检测项目正确性和完整性);2.2搭建数据库2.2.1配置信息第一步:创建空数据库database:database(数据库);uid:uid(用户名);pwd:ILwFjPFH8J(密码);第二步:修改配置文件g,配置网站数据库信息,更改ConnectionStrings的数据库连接字符串信息;database:数据库名 ,uid:用户名,pwd:密码;配置方法如下图2.2.2创建数据库第一步:打开程序包管理器控制台第二步:选择"EntityFramework"项目第三步:将Web项目设置为启动项第四步:执行命令创建数据库及表:Update-Database–Verbose第五步:执行完打开数据库管理器查看,如下图所示说明成功了到这里数据库的搭建工作完成。
2.3搭建站点第一步:重新生成解决方案第二步:将Mt.文件夹内的所有文件拷贝至网站的根目录下第三步:访问网站;后台网址:域名/B;默认账号:admin,密码:123qwe;开发者账号:mountor,密码:123qwe后台页面3模块开发3.1领域层领域层必须实现所有业务规则。
实体:展示数据和领域业务的操作。
通常地它们映射到数据库表。
仓储:类似于对象集合,用来获取和持久化实体到数据源(数据库)。
领域层定义了仓储,但不实现它们,由基础层来实现它们。
领域事件:定义领域里特定的事件,并触发和处理它们。
领域服务利用实体(及其它领域对象)实现那些不属于某个单独实体的业务规则。
工作单元:是一个管理数据库连接和事务的设计模式,跟踪实体变化并保存变化到数据存储。
领域层定义了它,但由基础层实现它。
这一层应该尽可能地独立于第三方类库。
3.1.1实体类实体是DDD一个核心的概念。
Eric Evans是这么描述的:“一个对象根本上不是按它的特性定义的,而是按一个线程的连续性和身份来定义”。
所以实体有一个id属性存入数据库中。
一个实体通常映射成关系型数据库的一个表。
继承FullAuditedEntity<Guid>:主键类型为Guid类型的全审计实体(软删除,记录删除时间和删除人员等信息)(必要)IPassivabile:信息状态接口(必要)IMustHaveTenant:必要性租户字段接口(必要)IMenuID:栏目ID接口(必要)INeedAuxiliaryId:辅助ID接口(辅助ID为long类字段)(必要)ILanguage:语言接口(必要)IAutoSynchronous:数据同步接口(非必要)ISynchronousSource:数据同步源接口(非必要)常量:字段长度限制规范:定义字段的限制3.1.2领域服务领域服务(或服务)用来执行领域操作和业务规则。
Eric Evans描述一个好的服务需要三个特点(在他的DDD书里):操作与领域概念(不是一个实体或值对象天生的一部分)相关。
接口要按照领域模型的其它元素来定义。
操作是无状态的。
与应用服务获取/返回DTO(数据传输对象)不同,领域服务获取/返回领域对象(如实体或值类型)。
领域服务可被应用服务或其它领域服务调用,但不直接被展现层(应用服务是针对它的)使用。
首先我们要为服务定义一个接口,接口继承IDomainService,接口中的服务包含创建、修改和删除有五个方法。
其次实现服务IDomainService 接口和DomainService 服务ABP定义了IDomainService接口,按约定所有的领域服务都要实现它,实现之后,领域服务被自动暂时的注册到依赖注入系统。
同样,领域服务(随意地)可以从DomainService类继承,因此它可以使用继承得来的日志、本地化、等属性。
即使不继承DomainService类,也可以在需要时注入它。
3.1.3定义模块权限授权系统使用IPermissionChecker来检查许可,虽然你用自己的方式实现它,不过在module-zero项目里已完全实现。
如果没有实现该接口,会使用NullPermissionChecker,它给每个人授予所有许可。
为每个操作定义的唯一许可必须得到授权,为使用许可要先定义一个,ABP是按模块化设计的,所以不同的模块可以拥有不同的许可,一个模块为了定义它的许可,应当创建一个继承AuthorizationProvider的类。
授权供应器示例如下:第一步:定义权限常量:第二步:定义权限许可第三步:定义许可中displayName的本地化(/Core/Localization/AppPermissions)IPermissionDefinitionContext拥有获取和创建许可的方法。
一个许可包含一些属性:Name:一个系统域内的唯一名称,用一个字符串常量,不用可变的字符串,是一个好的做法。
在分级里我们更喜欢用.(点)号来命名,但它不是必须的,你设置为你喜欢的名称,唯一的规则是一定要唯一。
DisplayName:一个本地化的用来之后在UI上显示许可的文本。
Description:一个本地化的用来之后在UI上显示许可描述的文本。
MultiTenancySides:在多租户应用里,许可可被租户或宿主使用,这是一个标记性的枚举,所以一个许可可同时被租户和宿主使用。
DependedFeature:用来表明一个对Feature(特色)的依赖,所以这个许可只有在满足Feature(特色)依赖时才会被允许。
一个许可可以有一个父许可和多个子许可,虽然这对于许可检查没有什么作用,但可能有助于在UI上组织许可。
第四步:创建一个授权供应器之后,我们应当在我们模块的预初始化方法里注册它,在Core/Common/中注册许可:3.1.4定义模块功能功能系统使用IFeatureValueStore来获取功能的值。
尽管你可以用自己的方式实现它,但在module-zero项目里已经完全实现。
如果它没有被实现,NullFeatureValueStore用来为所有功能返回null(这种情况下使用默认功能值)。
功能的值类型Boolean 类型:可以是“true”或“false”,一个这种类型的功能可以是启用或禁用(为一个版本或一个租户)。
Value 类型:可以是任意值,它保存和获取一个字符串,数字也保存成字符串。
第一步:定义功能常量:第二步:定义常量:在检查功能前,先要定义它,一个模块可通过继承FeatureProvider类来定义自己的功能一个功能定义要求至少两个属性:Name:一个唯一名称(字符串),这个功能的标志。
DefaultValue:一个默认值,当我们需要这个功能的值而又不能从当前租户取得时,我们需要一个默认值。
DisplayName:一个本地化的字符串,为用户显示这个功能的名称。
第三步:定义功能的displayName的本地化(/Core/Localization/AppFeatures)第四步:在创建一个功能供应器之后,我们应当在我们模块()的PreInitialize 方法里注册它(Core/Common/),如下所示:3.1.5更新数据库第一步:定义DbSet(Mt.)第二步:定义表名(Mt.yFramework.HkWebDbModelBuilderExtensions)第三步:执行命令更新数据库打开工具->NuGet包管理器->程序包管理器控制台,重新生成解决方案;然后将默认项目设置为EntityFrameworkCore;最后在控制台中输入Add-Migration“name”(name:不能用重复的名字可以使用“描述+日期”如:createNews)运行之后Migrations文件夹中2070_生成;第四步:更新数据库创建表;在程序包管理器控制台中运行Update-Database命令随后数据库就会新建了一个表3.2应用层应用层包含用于展示层的应用服务。