ABP入门教程1 - 开篇
基于DDD的现代ASP.NET开发框架 - ABP
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。
ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板。
ABP的官方网站:http://www.aspnetboilerplate.com
ABP在Github上的开源项目:https://github.com/aspnetboilerplate
ABP 的由来
“DRY——避免重复代码”是一个优秀的开发者在开发软件时所具备的最重要的思想之一。我们在开发企业WEB应用程序时都有一些类似的需求,例如:都需要登录页面、用户/角色管理、权限验证、数据有效性验证、多语言/本地化等等。一个高品质的大型软件都会运用一些最佳实践,例如分层体系结构、领域驱动设计、依赖注入等。我们也可能会采用ORM、数据库迁移(Database Migrations)、日志记录(Logging)等工具。
从零开始创建一个企业应用程序是一件繁琐的事,因为需要重复做很多常见的基础工作。许多公司都在开发自己的应用程序框架来重用于不同的项目,然后在框架的基础上开发一些新的功能。但并不是每个公司都有这样的实力。假如我们可以分享的更多,也许可以避免每个公司或每个项目的重复编写类似的代码。作者之所以把项目命名为“ASP.NET Boilerplate”,就是希望它能成为开发一般企业WEB应用的新起点,直接把ABP作为项目模板。
ABP是什么?
ABP是为新的现代Web应用程序使用最佳实践和使用最流行工具的一个起点。可作为一般用途的应用程序的基础框架或项目模板。它的功能包括:
服务器端:
- 基于最新的.NET技术 (ASP.NET Core,EF Cor,ASP.NET MVC 5.x,EF6.x)
- 实现领域驱动设计(实体、仓储、领域服务、领域事件、应用服务、数据传输对象,工作单元等等)
- 实现分层体系结构(领域层,应用层,展现层和基础设施层)
- 提供了一个基础架构来开发可重用可配置的模块
- 集成一些最流行的开源框架/库,也许有些是你正在使用的
- 提供了一个基础架构让我们很方便地使用依赖注入(使用Castle Windsor作为依赖注入的容器)
- 提供Repository仓储模式支持不同的ORM(已实现Entity Framework 、NHibernate、MangoDb和内存数据库)
- 支持并实现数据库迁移(EF 的 Code first)
- 模块化开发(每个模块有独立的EF DbContext,可单独指定数据库)
- 包括一个简单的和灵活的多语言/本地化系统
- 包括一个 EventBus来实现服务器端全局的领域事件
- 统一的异常处理(应用层几乎不需要处理自己写异常处理代码)
- 数据有效性验证(Asp.NET MVC只能做到Action方法的参数验证,ABP实现了Application层方法的参数有效性验证)
- 通过Application Services自动创建Web API层(不需要写APIController层了)
- 提供基类和帮助类让我们方便地实现一些常见的任务
- 使用“约定优于配置原则”
客户端:
- Bootstrap、jQuery、Angular、Vue、React和其他JS库: jQuery.validate、jQuery.form、jQuery.blockUI、json2等
- 为单页面应用程序(Angular,Vue,React)和多页面应用程序(Bootstrap+jQuery)提供了项目模板。
- 自动创建Javascript 的代理层来更方便使用Web API
- 封装一些Javascript 函数,更方便地使用ajax、消息框、通知组件、忙状态的遮罩层等等
除ABP框架项目以外,还开发了名叫“Zero”的模块,实现了以下功能:
- 用户,角色,权限和组织单位管理界面。
- 租户,版本和功能管理界面,租户订阅系统。
- Xamarin移动应用程序。
- 设置管理界面。
- 动态语言管理用户界面,RTL支持。
- 实时聊天和通知系统。
- 审核日志报告用户界面。
- 用户个人资料,帐户链接,模拟,社交登录等...
- 基于Metronic的主题。
ABP不是什么?
ABP 提供了一个应用程序开发模型用于最佳实践。它拥有基础类、接口和工具使我们容易建立起可维护的大规模的应用程序。
然而:
它不是RAD工具之一,RAD工具的目的是无需编码创建应用程序。相反,ABP提供了一种编码的最佳实践。
它不是一个代码生成工具。在运行时虽然它有一些特性构建动态代码,但它不能生成代码。
它不是一个一体化的框架。相反,它使用流行的工具/库来完成特定的任务(例如用EF做ORM,用Log4Net做日志记录,使得Castle Windsor作为赖注入容器, Angular,Vue,React 用于SPA 框架)。
ABP入门教程1 - 开篇的更多相关文章
- ABP入门教程0 - 目录
ABP入门教程 本教程主要讲解如何基于ABP实现CURD(增删改查)示例. 源码已分享: GitHub Gitee ABP入门教程0 - 目录 ABP入门教程1 - 开篇 ABP入门教程2 - ...
- ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- 基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程
基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...
- ABP入门教程
ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- ABP入门教程3 - 解决方案
点这里进入ABP入门教程目录 创建项目 点这里进入ABP启动模板 如图操作,我们先生成一个基于.NET Core的MPA(多页面应用).点击"Create my project!" ...
- ABP入门教程2 - 体系架构
点这里进入ABP入门教程目录 介绍 应用程序代码库的分层是一种广泛接受的技术,可帮助降低复杂性并提高代码可重用性.为了实现分层体系结构,ASP.NET Boilerplate遵循域驱动设计的原理. D ...
- ABP入门教程4 - 初始化运行
点这里进入ABP入门教程目录 编译解决方案 重新生成解决方案,确保生成成功. 连接数据库 打开JD.CRS.Web.Host / appsettings.json,修改数据库连接设置Connectio ...
- ABP入门教程5 - 界面调整
点这里进入ABP入门教程目录 调整前 调整后 调整项 页面标题 把favicon.ico替换为指定Logo JD.CRS.Web.Mvc\wwwroot\favicon.ico 顶部工具栏 把logo ...
- ABP入门教程6 - 领域层创建实体
点这里进入ABP入门教程目录 创建实体 在领域层(即JD.CRS.Core)下新建文件夹Entitys //用以存放实体对象添加一个实体类Course.cs //课程信息 using Abp.Doma ...
随机推荐
- 64-Weave 如何与外网通信?
上一节我们学习了 Weave 网络内部如何通信,今天讨论 Weave 如何与外界通信. weave 是一个私有的 VxLAN 网络,默认与外部网络隔离.外部网络如何才能访问到 weave 中的容器呢? ...
- C# ODP.NET 调用Oracle函数返回值时报错的一个解决方案
有人在社区问到:C#调用Oracle中自定义函数的返回值时,无法正常调用.但在PL/SQL中正常调用返回. 于是动手一试: 1.准备函数(Oralce 11g.2.0.0.4) CREATE OR R ...
- VMware 虚拟机黑屏问题
VMware Workstation 14打开虚拟机黑屏解决方法 听语音 浏览:0 | 更新:2017-11-21 16:56 | 标签:操作系统 虚拟机 VMWARE 1 2 3 4 分步阅读 最近 ...
- DDD 实战记录——实现「借鉴学习计划」
「借鉴学习计划」的核心是:复制一份别人的学习计划到自己的计划中,并同步推送学习任务给自己,并且每个操作都要发送通知给对方. 它们的类图如下: 它们的关系是一对多: // Schedule entity ...
- Http中URI协议 和URL协议的区别和联系
虽然说URL和URI是整个网络协议栈很常用的东西.可是,假如你去面试求职者其中的差别,估计十个人有八个人答复不上来. 想要熟悉基础知识的朋友最好还是看一下我这个文章. “A Uniform Resou ...
- CURL命令学习一
每天学习一点点.... 直接获取页面数据: curl http://www.xxx.com/[可以指定具体的路径获取某个文件] 用户名(密码): curl -u username http://www ...
- CSS transition 的默认值
语法 transition: property duration timing-function delay|initial|inherit; 示例: div { width: 100px; ...
- Consul初探-在深交之前先认识
Consul 是什么? Consul 官方站点:https://www.consul.io/ 首先,官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现.配置.分段 ...
- JavaWeb学习——在Eclipse里使用Tomcat
JavaWeb学习——在Eclipse里使用Tomcat 摘要:本文主要学习了如何在Eclipse里使用Tomcat服务器. 添加Tomcat 打开Eclipse的配置页面,点击菜单上的“Window ...
- Spring 核心技术与产品理念剖析【下】
3. Spring Cloud 蝶变重生 Spring 框架的升级演进都是围绕分层架构进行的,从简单到复杂,再回到简单的过程.如果我们没有经历过 Spring 最开始繁琐的配置,然后一步步精简,就根本 ...