在一个理想的层级项目中,展现层是不能直接访问领域对象的,那么展现层如何获取到自己需要的数据呢?也就是今天的主角-Application层,它的职责就是为展现层服务,它通过仓储获取到相应的数据,然后将数据以Dto的形式传给展现层,负责展示。

那么问题来了:1.什么是Dto?2.Dto的好处是什么?

一.Dto

Dto (Data Transfer Object):数据转换对象,也就是用来传递数据用的。

Dto的好处

1.在EF的CodeFirst的Model中,我们经常会使用导航属性,但是使用导航属性,带来方便的同时,经常会遇到将数据序列化的问题,也就是对象循环序列化的死循环中。这就是直接使用Model作为展现层数据传输媒介带来的问题。所以我们可以使用Dto来避免。

2.Model中的数据就是数据库中的具体的字段,然而我们可能只是使用其中的很少一部分的数据用于前台的展示,所以使用Dto可以根据我们自己的需要减少传递的数据量,起到一定的保密性。

3.ABP框架中已经实现了一些现有的Dto,可以方便我们的开发,同时支持Dto的验证,提高数据的安全性。

4.说到底,Dto最大的好处就是灵活,可以根据自己的需要灵活的扩展,不影响与数据库的操作。起到了一定的解耦分离的作用。

在ABP框架中提供了很多方便我们开发的Dto,关于Dto的数据验证,将在接下来的“电影票系统”的增删改中具体的实践,今天主要是针对的“查”,先展现出来看看再说。

二 .Application层的具体操作

我们自己的应用服务层的代码创建在哪里呢,当然是ABP模板中为我们创建的Application中啊,嘿嘿

上面就是ABP模板为我们自动创建的Configuratrion功能的相关文件,我们按照上面的模式,创建出我们自己的Dto文件夹,AppService 和接口。需要的注意,这里我们自己定义的服务层的接口和实现类的后缀名都是以AppService接口为结尾的,这是ABP框架中的约定,至于为什么要这样,肯定是ABP中有很多的操作都是按照这个约定实现的,所以我们只需要按照约定办事就好了。

1.首先创建出我的目录结构

2. 前面的说过,一定要按照约定,以AppService命名结尾

Service

IService

Dto

Dto这边需要注意两点:

1.一定要定义Mapper的映射规则,此处采用的是特性标签的方式定义映射规则。

2.前面已经说过ABP中提供了很多的现成的Dto可以简化我们的操作,上面的EntityDto里面定义了一个Id属性,同时EntityDto还提供了泛型的支持,满足对不同类型的Id的支持。

至于展现层,这里我直接模仿代码模板中的样式,稍微修改一下(先偷个懒)

这个父类继承了AbpController,AbpController重写了MVC的Controller的一些东西,同时提供了一些常用的属性注入,比如AbpSession等

从上面的代码中可以看出,我们的控制器也是支持注入的,而且也是临时的,及时销毁的.

接下来我们就跑一下看看,能不能展示出来呢

我们定义的Service在Controller中没有注入进来,为什么没有注入进来呢?喜闻乐见,这就是没有按照约定办事的结果。。。。。。这里我们对MovieTicketAppService的命名重新更正。

再次运行一下,哈哈哈,出来了!

三.应用服务层的三个注意点

1.一定要实现接口IApplicationService,一定要按照约定来命名自己的Service,这是确保可以依赖注入的关键。

2.ApplicationService也是采用的UnitOfWork的模式,这个跟仓储那边是类似的。就是在一个服务方法中,共用一个数据库连接,共用一个事务,当方法结束时,提交事务同时关闭数据库的连接。

3.应用服务层注入的实例也是临时性的,这个在上面的代码中可以看出,IApplicationService继承自ITransientDenpency。

其实还有一个问题没有详细的介绍,既然我们有Dto用来为展现层提供数据,那么我们的Model是如何转换为Dto的呢?哈哈哈,这个简单,不就是属性赋值嘛,我一个个给Dto赋值。。。嗯,没毛病。我上面使用了一种简单的方法,那就是AutoMapper,自动实现映射,这个将在下一篇稍微研究一下。

ABP之应用服务(1)的更多相关文章

  1. ABP(现代ASP.NET样板开发框架)系列之15、ABP应用层——应用服务(Application services)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Application services) ABP是“ASP.NET Boiler ...

  2. ABP应用层——应用服务(Application services)

    ABP应用层——应用服务(Application services) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Applic ...

  3. ABP框架 - 应用服务

    文档目录 本节内容: IApplicationService 接口 ApplicationService 类 CrudAppService 和 AsyncCrudAppService 类 简单的CRU ...

  4. ABP创建应用服务

    原文作者:圣杰 原文地址:ABP入门系列(4)——创建应用服务 在原文作者上进行改正,适配ABP新版本.内容相同 1. 解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DT ...

  5. ABP之应用服务(2)

    在上一篇的笔记中,已经大致对Application层的使用作了简要的使用说明,感觉还是有些东西需要研究一下,所以承接上文,对AutoMapper这个方便的东西,稍微研究一下. 一.初识AutoMapp ...

  6. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  7. ABP系列文章总目录:

    转自:http://www.cnblogs.com/mienreal/p/4528470.html 1.ABP总体介绍 2.ASP.NET Boilerplate入门 3.ABP分层架构 4.ABP模 ...

  8. ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

    本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深 ...

  9. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录(转)

    出处:http://www.cnblogs.com/mienreal/p/4528470.html ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视 ...

随机推荐

  1. smartgit 需要输入序列号解决办法

    找到路径: %APPDATA%\syntevo\SmartGit\<main-smartgit-version> 然后删除: settings.xml 再重新打开smartgit 就可以了

  2. Images.xcassets 的简单使用

    总结起来Images.xcassets 就这么几句话 (1)以下開始简单整理 进入images.xcassets 右键--->New Image Set 或者点XCode的images.xcas ...

  3. Struts2_day02讲义_使用Struts完成对客户的新增操作

  4. Ldap 漏洞

    0x00 Ldap安装 官网地址:https://www.userbooster.de/en/download/openldap-for-windows.aspx 在win2008上安装,一路Next ...

  5. Dictionary的应用

    在C#中,Dictionary提供快速的基于兼职的元素查找.他的结构是这样的:Dictionary<[key], [value]> ,当你有很多元素的时候可以使用它.它包含在System. ...

  6. Linux线程编程之生产者消费者问题

    前言 本文基于顺序循环队列,给出Linux生产者/消费者问题的多线程示例,并讨论编程时需要注意的事项.文中涉及的代码运行环境如下: 本文假定读者已具备线程同步的基础知识. 一  顺序表循环队列 1.1 ...

  7. Microsoft 设计原则

    在本文中 关于现代设计 技术为本 实现以较少投入取得极大成绩 迅速和流畅 真正实现数字化 合作共赢 相关主题 驱动出色设计的基础 我们相信遵循 Microsoft 设计原则可帮助你构建使用户感到愉悦并 ...

  8. 【MySQL8】 安装后的简单配置(主要解决navicat等客户端登陆报错问题)

    一.navicat等客户端登陆报错的原因 使用mysql,多数我们还是喜欢用可视化的客户端登陆管理的,个人比较喜欢用navicat.一般装好服务器以后,习惯建一个远程的登陆帐号,在mysql8服务器上 ...

  9. 决策树归纳算法之C4.5

    前面学习了ID3,知道了有关“熵”以及“信息增益”的概念之后. 今天,来学习一下C4.5.都说C4.5是ID3的改进版,那么,ID3到底哪些地方做的不好?C4.5又是如何改进的呢? 在此,引用一下前人 ...

  10. UI设计中的高保真和低保真

    低保真一般用Axure Rp产出,高保真分两种,带交互的或不带交互的.不带交互的高保真直接根据低保真用PS产出即可.带交互的,需要 PS产出后,再切图,再使用Axure RP与低保真结合产出高保真. ...