
ABP|ABP Vnext
文章平均质量分 78
ABP是一个开源应用程序框架,专注于基于ASP.NET Core的Web应用程序开发,但也支持开发其他类型的应用程序.
.NET跨平台
比较认真。编程就是算法和数据结构,算法和数据结构是编程的灵魂。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ABP官方文档(二十五)【数据传输对象验证】
4.3 ABP应用层 - 数据传输对象验证应用程序的输入首先应该被验证是否有效。输入的数据能够被用户或者其它应用发送。在web应用中,验证通常被实现两次:客户端和服务器端。客户端验证的实现主要用于用户体验。首先,最好是在客户端检验表单并且向用户展示无效的字段。但是,相对于客户端验证,服务器端验证是更重要并且不可缺失的。服务器端的验证通常是在应用层或者控制器中被实现(通常,所有的服务都是从持久层获取数转载 2017-11-02 11:12:54 · 2352 阅读 · 1 评论 -
ABP官方文档(五十三)【集成Dapper】
9.2 ABP基础设施层 - 集成Dapper9.2.1 简介Dapper 是基于.NET的一种对象关系映射工具。Abp.Dapper简单的将Dapper集成到ABP。它作为第二个ORM可以与EF 6.x, EF Core 或者 Nhibernate 工作。9.2.2 安装在开始之前,你需要安装Abp.Dapper以及 EF 6.x, EF Core 或者 NHibernate 这3个当中的任意一个转载 2017-11-06 10:14:15 · 7966 阅读 · 3 评论 -
ABP官方文档(四十)【嵌入资源文件】
6.7 ABP表现层 - 嵌入资源文件6.7.1 简介在一个WEB应用程序中,有JavaScript、css、xml等客户需要使用的文件。一般添加到web项目中并作为分离的文件发布。有时候,我们需要将这些文件打包(类库、dll).ABP提供了ifrastructure使这种任务更容易完成。我们要让这些文件在web应用程序中可用。上线,应当构建嵌入式资源文件。选择metronic转载 2017-11-05 23:33:03 · 938 阅读 · 1 评论 -
ABP官方文档(一)【入门介绍】
1.1 ABP总体介绍 - 入门介绍ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序基础框架和项目模板。ASP.NET Boilerplate 基于DDD的经典分层架构思想,实现了众多DDD的概念(但没有转载 2017-10-30 22:57:14 · 6604 阅读 · 1 评论 -
ABP官方文档(二)【多层次架构体系】
1.2 ABP总体介绍 - 层架构体系1.2.1 前言为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将工程分为四个层:展现层(Presentation):向用户提供一个接口(UI),使用应用层来和用户(UI)进行交互。应用层(Application):应用层是表现层和领域层能够实现交互的中间者,协调业务对象转载 2017-10-31 10:57:35 · 2765 阅读 · 2 评论 -
ABP官方文档(三)【模块系统】
1.3 ABP总体介绍 - 模块系统1.3.1 ABP模块系统简介ABP框架提供了创建和组装模块的基础,一个模块能够依赖于另一个模块。在通常情况下,一个程序集就可以看成是一个模块。在ABP框架中,一个模块通过一个类来定义,而这个类要继承自AbpModule。模块系统当前专注于服务端而不是客户端。 译者注: 如果学习过Orchard的朋友,应该知道module模块的强大了。模块的本质就是可重转载 2017-10-31 11:06:27 · 2536 阅读 · 1 评论 -
ABP官方文档(四)【启动配置】
1.4 ABP总体介绍 - 启动配置在应用启动之前,abp框架提供了模块基本的配置和方法,大家参照下面这个例子就可以了。 译者注: 在看这一节的内容之前,建议大家先下载module-zero这个例子代码,这个例子就是一个用户和角色的模块,并且使用的实例。配置在每一个应用中都可能会有,比如你有一个网站,你要获取网站的一些自定义基本参数,比如logo位置,网站名称,上传文件大小等等。模块化的配转载 2017-10-31 11:13:11 · 1737 阅读 · 1 评论 -
ABP官方文档(五)【多租户】
1.5 ABP总体介绍 - 多租户1.5.1 什么是多租户维基百科:“软件多租户是指一个软件架构的实例软件运行在一个服务器上,但存在多个租户。租户是一组共享一个公共的用户访问特定权限的软件实例。多租户架构,软件应用程序旨在提供每个租户专用的实例包括数据、配置、用户管理、租户个体功能和非功能属性。多租户与多实例架构,独立的软件实例代表不同的租户”操作多租户一般用来创建SaaS(软件即服务)应用程序(云转载 2017-10-31 11:15:06 · 6097 阅读 · 1 评论 -
ABP官方文档(六)【集成OWIN,调试】
1.6 ABP总体介绍 - 集成OWIN1.6.1 简介如果你在你的应用中使用了 ASP.NET MVC 和 ASP.NET Web API,那么你需要添加 Abp.Owin 包到你的项目。1.6.2 安装添加 Abp.Owin 包到你的主项目(一般来说是 Web 项目)。Install-Package Abp.Owin1.6.3 使用在OWIN Startup 文件中调用 UserApp() 的扩转载 2017-10-31 11:17:22 · 1953 阅读 · 1 评论 -
ABP官方文档(五十二)【集成EntityFramework MySQL】
ABP 基础设施层 - 集成 Entity Framework MySql9.4.1 简介虽然启动模板默认设计是使用Sql Server,但是你可以很容易的修改它来使用MySql。要这么做的话,你需要跟随一下步骤:9.4.2 实现使用MySQL下载项目请到 http://aspnetboilerplate.com/Templates 下载一个新的项目,选择ASP.NET 5.x标签,还有要选择EF。转载 2017-11-06 10:11:20 · 2046 阅读 · 0 评论 -
ABP官方文档(五十)【集成NHibernate】
9.2 ABP基础设施层 - 集成NHibernateABP可以与任何ORM框架协同工作,它内置了对NHibernate的集成支持。本文将介绍如何在ABP中使用NHibernate。本文假定你已经初步掌握了NHibernate。 译者注:怎么才算初步掌握了NHibernate呢?译者认为应当懂得使用NHibernate进行CRUD,懂得使用Fluent模式进行映射。9.2.1 Nuget包要在转载 2017-11-06 09:50:55 · 964 阅读 · 0 评论 -
ABP官方文档(四十二)【CSRF和XSRF保护】
6.9 CSRF和XSRF保护6.9.1 简介Cross-Site Request Forgery (CSRF) 跨站请求伪造是一种攻击,发生在具有恶意的网站,email,blog,即时消息,或者程序导致用户的web浏览器在一个受信用的网站去执行了某个有害的行为来获取当前用户的认证信息,详细了解请点击这里脑补。在ASP.NET Web API官网也有如何实现的简短描述。ABP框架尽可能的简化且自动化转载 2017-11-05 23:37:45 · 3855 阅读 · 1 评论 -
ABP官方文档(四十三)【嵌入式资源】
6.10 嵌入式资源6.10.1 简介在Web应用程序中,ABP提供了一个简单的方法来使用嵌入式的 Razor视图(.cshtml文件)和 其它资源(css,js,img等文件)。你可以使用该功能来创建包含UI功能的插件/模块。6.10.2 创建嵌入式文件首先,我们应该创建一个文件并且标记它为 嵌入式资源。任何程序集都可以包含嵌入式资源文件。至于如何标记它,这要看你的项目是什么格式的。项目格式为:x转载 2017-11-05 23:42:09 · 639 阅读 · 1 评论 -
ABP官方文档(四十四)【后台作业和后台工人】
7.1 ABP后台服务 - 后台作业和后台工人7.1.1 简介ABP提供了后台作业和后台工人,来执行应用程序中的后台线程的某些任务。7.1.2 后台作业由于各种各样的原因,你需要后台作业以队列和持久化的方式来排队执行某些任务。例如:用户等待执行一个长时任务。例如:某个用户按下了报表按钮生成一个需要长时间等待的报表。你添加这个工作到队列中,当报表生成完毕后,发送报表结果到该用户的邮箱。重试创建并持转载 2017-11-06 09:34:28 · 2818 阅读 · 0 评论 -
ABP官方文档(四十五)【集成Hangfire】
7.2 ABP后台服务 - 集成Hangfire7.2.1 简介Hangfire是一个综合性的后台作业管理工具。你可以用Hangfire来替换ABP中默认实现的后台作业管理者。你可以对Hangfire使用相同的后台作业API。因此,你的代码将独立于Hangfire。但是,如果你喜欢,你也可以直接的使用 Hangfire 的API。Hangfire的集成依赖于你所使用的框架。7.2.2 ASP.NET转载 2017-11-06 09:36:47 · 5739 阅读 · 0 评论 -
ABP官方文档(四十六)【集成Quartz】
7.3 ABP后台服务 - 集成Quartz7.3.1 简介Quartz是一个功能齐全,且开源的作业调度系统,小型应用到大型企业级系统都可以使用它。Abp.Quartz简单的集成它到ABP。 ABP有个内置的持久化后台作业队列和后台作业工人。Quartz是个好的选择,如果你对后台作业工人有很高的调度需要的话。当然,对于持久化后台作业队列,Hangfire是个不错的选择。7.3.2 安装安装Ab转载 2017-11-06 09:42:03 · 2856 阅读 · 0 评论 -
ABP官方文档(四十七)【通知系统】
8.1 ABP实时服务 - 通知系统8.1.1 简介在系统中,通知是用来告知用户特定事件的。ABP提供了一个基于实时通知的基础设施 pub/sub.8.1.2 发送模式有两种方法来发送通知给用户:用户 订阅 一个特定的通知类型。当我们发布这个类型的通知时,该通知会被投递给所有的订阅用户。这就是 pub/sub 模式。我们能直接的发送通知给目标用户。8.1.3 通知类型通知类型也有两种:常规通转载 2017-11-06 09:43:40 · 4189 阅读 · 1 评论 -
ABP官方文档(四十八)【集成SignalR】
8.2 ABP实时服务 - 集成SignalR8.2.1 简介在基于ABP创建的项目中,有一个很容易的方式使用 SignalR,那就是使用 Abp.Web.SignalR。详情请参考SignalR文档。8.2.2 安装1. 服务器端使用Nuget安装Abp.Web.SignalR到你的项目中(通常是你的Web项目)并且在模块中添加被依赖的模块:[DependsOn(typeof(AbpWebSign转载 2017-11-06 09:45:30 · 4770 阅读 · 0 评论 -
ABP官方文档(四十九)【集成EntityFramework】
9.1 ABP基础设施层 - 集成Entity FrameworkABP可以与任何ORM框架协同工作,它内置了对EntityFramework的集成支持。本文将介绍如何在ABP中使用EntityFramework。本文假定你已经初步掌握了EntityFramework。 译者注:怎么才算初步掌握了EntityFramework呢?译者认为应当懂得使用Code First模式进行CRUD。9.1转载 2017-11-06 09:49:02 · 2629 阅读 · 0 评论 -
ABP官方文档(三十九)【Notification,Message...】
6.6 ABP表现层 - Notification6.6.3.1 Javascript Notification API当一些事情发生的时候,我们喜欢显示一些别致的能够自动消失的通知,例如,当某个记录被保存或者某个问题发生的时候。ABP定义了标准的API实现了该功能。abp.notify.success('a message text', 'optional title');abp.notify.转载 2017-11-05 23:29:54 · 5393 阅读 · 1 评论 -
ABP官方文档(七)【依赖注入】
2.1 ABP公共结构 - 依赖注入如果你已经了解依赖注入的概念、构造函数和属性注入模式,你可以跳过这一节。维基百科:“依赖注入是一种软件设计模式,指一个或多个依赖(或服务)被注入,或通过引用传递,传入一个依赖对象(或客户端)并成为客户状态的一部分。模式通过自身的行为分离了客户依赖的创建,这允许程序设计是松耦合的,同时遵循依赖倒置和单一职责原则。与服务定位器模式直接进行对比,它允许客户了解他们用来查转载 2017-11-01 14:04:40 · 4802 阅读 · 1 评论 -
ABP官方文档(十八)【领域服务】
3.4 ABP领域层 - 领域服务3.4.1 简介领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Applicat转载 2017-11-02 10:16:56 · 1969 阅读 · 1 评论 -
ABP官方文档(十九)【工作单元】
3.5 ABP领域层 - 工作单元3.5.1 简介连接和事务管理是使用数据库的应用程序最重要的概念之一。当你开启一个数据库连接,什么时候开始事务,如何释放连接;诸如此类的…。ABP默认使用 工作单元 来管理数据库连接和事务。3.5.2 在ABP中管理连接和事务当 进入 某个 事务单元 的时候,ABP 会 打开 数据库的连接,并开始 事务 操作(它可能不会立即打开,但是会在首次使用数据库的时候打开)。转载 2017-11-02 10:18:33 · 3730 阅读 · 1 评论 -
ABP官方文档(二十)【领域事件】
3.6 ABP领域层 - 领域事件在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合性。转载 2017-11-02 10:25:59 · 2793 阅读 · 1 评论 -
ABP官方文档(二十一)【数据过滤器】
3.7 ABP领域层 - 数据过滤器3.7.1 简介在数据库开发中,我们一般会运用逻辑删除模式,即不直接从数据库删除数据,而是标记这笔数据为已删除。因此,如果实体被逻辑删除了,那么它就应该不会在应用程序中被检索到。要达到这种效果,我们需要在每次检索实体的查询语句上添加SQL的Where条件IsDeleted = false。这是个乏味的工作,但它是个容易被忘掉的事情。因此,我们应该要有个自动的机制来转载 2017-11-02 10:30:31 · 2430 阅读 · 1 评论 -
ABP官方文档(二十二)【规约模式】
3.8 ABP领域层 - 规约模式3.8.1 简介规约模式 是一种特别的软件设计模式,通过链接业务规则与使用boolean逻辑来重组业务规则。实际上,它主要是用来对实体和其它业务对象构造可重用的过滤器。3.8.2 示例在这节,我们会了解到规约模式的必要性。这节中说到的都是通用的与ABP的实现无关。假设有个统计客户数量的方法;如下所示:public class CustomerManager{转载 2017-11-02 10:33:42 · 2136 阅读 · 1 评论 -
ABP官方文档(二十三)【应用服务】
4.1 ABP应用层 - 应用服务应用服务用于将领域(业务)逻辑暴露给展现层。展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行相应的业务逻辑并且将DTO返回给展现层。因此,展现层和领域层将被完全隔离开来。在一个理想的层级项目中,展现层应该从不直接访问领域对象。4.1.1 IApplicationService接口在ABP中,一个应用服务需要实现 IApplicat转载 2017-11-02 10:58:02 · 2235 阅读 · 1 评论 -
ABP官方文档(二十四)【数据传输对象】
4.2 ABP应用层 - 数据传输对象数据传输对象(Data Transfer Objects)用于应用层和展现层的数据传输。展现层传入数据传输对象(DTO)调用一个应用服务方法,接着应用服务通过领域对象执行一些特定的业务逻辑并且返回DTO给展现层。这样展现层和领域层被完全分离开了。在具有良好分层的应用程序中,展现层不会直接使用领域对象(仓库,实体)。4.2.1 数据传输对象的作用为每个应用服务方法转载 2017-11-02 11:09:39 · 1795 阅读 · 1 评论 -
ABP官方文档(十七)【仓储】
3.3 ABP领域层 - 仓储仓储定义:“在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象”(Martin Fowler)。实际上,仓储被用于领域对象在数据库上的操作(实体Entity和值对象Value types)。一般来说,我们针对不同的实体(或聚合根Aggregate Root)会创建相对应的仓储。3.3.1 IRepository接口在ABP中,仓储类要实现IRepository转载 2017-11-02 10:12:49 · 2034 阅读 · 1 评论 -
ABP官方文档(十六)【值对象】
3.2 ABP领域层 - 值对象3.2.1 简介用来描述领域的特殊方面、且没有标识符的一个对象,叫做值对象。实体有自己的唯一标识,而值对象是没有标识的。如果两个实体的标识是不同的,那么它们是两个不同的实体,即使这两个实体的其它属性值是相同的。想象一下两个不同的人但是他们有相同的姓和名以及年龄。但是,他们的标识是不同的话,那么他们就是不同的两个人。但是,对于地址(这是一个典型的值对象)类,如果这两个地转载 2017-11-02 09:40:29 · 1650 阅读 · 1 评论 -
ABP官方文档(八)【会话管理】
2.2 ABP公共结构 - 会话管理2.2.1 简介ABP提供了 IAbpSession 接口获取当前用户以及租户信息,而不是使用ASP.NET的Session。IAbpSession也被集成且使用在ABP其他模块中,例如:设置管理,权限认证。2.2.2 注入会话IAbpSession通常是以属性注入的方式存在于需要它的类中,不需要获取会话信息的类中则不需要它。如果我们使用属性注入方式,我们可以用N转载 2017-11-01 14:34:48 · 1704 阅读 · 1 评论 -
ABP官方文档(九)【缓存管理】
2.3 ABP公共结构 - 缓存管理2.3.1 简介ABP给出了一个抽象缓存基类。并在内部使用了该抽象基类。使用 MemoryCache 来实现了该抽象基类。它能够被任何其它的缓存类来扩展。Abp.RedisCache 包就扩展了该缓存基类。2.3.2 ICacheManangerABP对外提供了一个缓存接口ICacheMananger。我们通过构造函数注入这个接口来获取缓存。示例如下:public转载 2017-11-01 14:36:35 · 2671 阅读 · 2 评论 -
ABP官方文档(十)【日志管理】
2.4 ABP公共结构 - 日志管理2.4.1 服务器端ABP使用Castle Windsor’s logging facility日志记录工具,并且可以使用不同的日志类库,比如:Log4Net, NLog, Serilog… 等等。对于所有的日志类库,Castle提供了一个通用的接口来实现,我们可以很方便的处理各种特殊的日志库,而且当业务需要的时候,很容易替换日志组件。 译者注:Castle是转载 2017-11-01 14:49:56 · 1890 阅读 · 1 评论 -
ABP官方文档(十一)【设置管理】
2.5 ABP公共结构 - 设置管理2.5.1 简介每个应用程序需要存储一些设置并在应用程序的某个地方使用这些设置。ABP框架提供强大的基础架构,我们可以在服务端或者客户端设置,来存储/获取应用程序、 租户和用户级别的配置。设置通常是存储在数据库(或另一个来源)中,用名称-值(name-value)字符串对应的结构来表示。我们可以把非字符串值转换成字符串值来存储。 注意:关于ISettingSt转载 2017-11-01 15:05:52 · 1641 阅读 · 1 评论 -
ABP官方文档(十二)【时间与时区设置】
2.6 ABP公共结构 - 时间与时区设置2.6.1 简介虽然有些应用的需求是单时区,然而另一些是需要对不同的时区进行处理的。为了满足这样的需求以及对时间的处理。ABP提供了处理时间操作的通用基础设施。2.6.2 ClockClock 这个类是主要用来处理 DateTime 的值。它具有以下静态属性和方法:Now :根据当前设置的提供器来获取当前时间Kind :取得当前提供器的 DateTime转载 2017-11-01 15:07:45 · 4960 阅读 · 1 评论 -
ABP官方文档(十三)【对象之间的映射】
2.7 ABP公共结构 - 对象之间的映射2.7.1 简介我们通常需要在近似的对象之间进行映射处理。这是一个重复且枯燥无味的工作,通常来说两个需要相互映射的对象之间有近似的或者相同的属性。思考一下这样一个案例:应用服务的方法:public class UserAppService : ApplicationService{ private readonly IRepository<User转载 2017-11-01 15:09:43 · 4128 阅读 · 1 评论 -
ABP官方文档(十四)【邮件发送(MailKit集成】
2.8 ABP公共结构 - 邮件发送(MailKit集成)2.8.1 简介几乎所有的应用都有一个发送电子邮件的功能。ABP提供了一个基本的基础设施,它可以简单的发送邮件,并且将邮件服务的配置从发送邮件的功能中分离了出来。2.8.2 IEmailSenderIEmailSender 是一个邮件发送服务接口,使用它你不需要知道详细信息就可以简单的发送邮件。如下所示:public class TaskMa转载 2017-11-01 15:10:53 · 5981 阅读 · 1 评论 -
ABP官方文档(十五)【实体】
3.1 ABP领域层 - 实体实体是 DDD(领域驱动设计)的核心概念之一。Eric Evans 是这样描述的“很多对象不是通过它们的属性定义的,而是通过一连串的连续性事件和标识定义的”(引用领域驱动设计一书)。 译者注:对象不是通过它们的属性来下根本性的定义,而应该是通过它的线性连续性和标识性定义的。所以,实体是具有唯一标识的ID且存储在数据库中。实体通常被映射成数据库中的一个表。3.1.1转载 2017-11-01 15:12:08 · 5059 阅读 · 1 评论 -
ABP官方文档(四十一)【ASP.NET Core】
6.8 ASP.NET Core6.8.1 简介这篇文档是对ABP中集成的ASP.NET Core的描述。ASP.NET 集成是被实现在 Abp.AspNetCore 中。 迁移到ASP.NET Core? 如果你有一个旧项目想要迁移到ASP.NET Core,你可以从该博客获取一些迁移经验6.8.2 Startup Template你可以从Startup Template来创建你的转载 2017-11-05 23:36:44 · 6548 阅读 · 1 评论