【ABP框架系列学习】介绍篇(1)

 

0.引言

该系列博文主要在【官方文档】及【tkbSimplest】ABP框架理论研究系列博文的基础上进行总结的,或许大家会质问,别人都已经翻译过了,这不是多此一举吗?原因如下:

1.【tkbSimplest】的相关博文由于撰写得比较早的,在参照官方文档学习的过程中,发现部分知识未能及时同步(当前V4.0.2版本),如【EntityHistory】、【Multi-Lingual Engities】章节未涉及、【Caching】章节没有Entity Caching等内容。

2.进一步深入学习ABP的理论知识。

3.借此机会提高英文文档的阅读能力,故根据官方当前最新的版本,并在前人的基础上,自己也感受一下英文帮助文档的魅力。

好了,下面开始进入正题。

1.APB是什么?

ABP是ASP.NET Boilerplate的简称,从英文字面上理解它是一个关于ASP.NET的模板,在github上已经有5.7k的star(截止2018年11月21日)。官方的解释:ABP是一个开源且文档友好的应用程序框架。ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型。

ABP与最新的ASP.NET COREEF CORE版本保持同步,同样也支持ASP.NET MVC 5.x和EF6.x。

2.一个快速事例

 让我们研究一个简单的类,看看ABP具有哪些优点:

复制代码
public class TaskAppService : ApplicationService, ITaskAppService     {         private readonly IRepository<Task> _taskRepository;          public TaskAppService(IRepository<Task> taskRepository)         {             _taskRepository = taskRepository;         }          [AbpAuthorize(MyPermissions.UpdateTasks)]         public async Task UpdateTask(UpdateTaskInput input)         {             Logger.Info("Updating a task for input: " + input);              var task = await _taskRepository.FirstOrDefaultAsync(input.TaskId);             if (task == null)             {                 throw new UserFriendlyException(L("CouldNotFindTheTaskMessage"));             }              input.MapTo(task);         }     }
复制代码

这里我们看到一个Application Service(应用服务)方法。在DDD中,应用服务直接用于表现层(UI)执行应用程序的用例。那么在UI层中就可以通过javascript ajax的方式调用UpdateTask方法。

复制代码
var _taskService = abp.services.app.task; _taskService.updateTask(...);
复制代码

3.ABP的优点

通过上述事例,让我们来看看ABP的一些优点:

依赖注入(Dependency Injection):ABP使用并提供了传统的DI基础设施。上述TaskAppService类是一个应用服务(继承自ApplicationService),所以它按照惯例以短暂(每次请求创建一次)的形式自动注册到DI容器中。同样的,也可以简单地注入其他依赖(如事例中的IRepository<Task>)。

部分源码分析:TaskAppService类继承自ApplicationService,IApplicaitonServcie又继承自ITransientDependency接口,在ABP框架中已经将ITransientDependency接口注入到DI容器中,所有继承自ITransientDependency接口的类或接口都会默认注入。

 
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信