ABP开发手记1 - 开篇
基于ddd的现代asp.net开发框架 - abp
abp是“asp.net boilerplate project (asp.net样板项目)”的简称。
asp.net boilerplate是一个用最佳实践和流行技术开发现代web应用程序的新起点,它旨在成为一个通用的web应用程序框架和项目模板。
abp的官方网站:
abp在github上的开源项目:
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 框架)。
上一篇: 【leetcode】595. 大的国家
下一篇: LeetCode刷题之连续出现的数字