ASP.NET ZERO 学习 —— (11) 应用开发Demo之创建应用服务

来源:互联网 发布:oppo声卡软件下载 编辑:程序博客网 时间:2024/05/06 17:03

创建Person的应用服务

应用服务是用来被客户端(表现层)调用执行逻辑操作。

应用服务是放在.Application项目中。我们创建第一应用服务用来从服务端获取Person信息。
首先在Application项目中创建一个叫Person的文件夹,再在Person文件夹下创建一个叫Dto的文件夹。

这里写图片描述

创建一个接口来定义Person应用服务:

    public interface IPersonAppService: IApplicationService    {        ListResultDto<PersonListDto> GetPeople(GetPeopleInput input);    }

应用服务是用来获取或返回DTO对象,ListResultDto是框架创建用来返回DTO对象列表的帮助类。GetPeopleInput是GetPeople方法的请求参数。所以,GetPeopleInput和PersonListDto 定义如下:

    public class GetPeopleInput    {        public string Filter { get; set; }    }
    [AutoMapFrom(typeof(Entities.Person))]    public class PersonListDto : FullAuditedEntityDto    {        public string Name { get; set; }        public string Surname { get; set; }        public string EmailAddress { get; set; }    }

AutoMapFrom属性是使用AutoMapper创建PersonPersonListDto的映射。FullAuditedEntityDto包含了审计属性。参见应用服务和DTO文档了解更多。

当定义完接口后,我们如下面所示来进行实现:

    public class PersonAppService : AbpZeroTemplateAppServiceBase, IPersonAppService    {        private readonly IRepository<Entities.Person> _personRepository;        public PersonAppService(IRepository<Entities.Person> personRepository)        {            this._personRepository = personRepository;        }        public ListResultDto<PersonListDto> GetPeople(GetPeopleInput input)        {            var persons = this._personRepository                .GetAll()                .WhereIf(                    !input.Filter.IsNullOrEmpty(),                    p => p.Name.Contains(input.Filter) ||                        p.Surname.Contains(input.Filter) ||                        p.EmailAddress.Contains(input.Filter)                )                .OrderBy(p => p.Name)                .ThenBy(p => p.Surname)                .ToList();            return new ListResultDto<PersonListDto>(persons.MapTo<List<PersonListDto>>());        }    }

我们注入Person Repository并使用它从数据库过滤并获取Person的信息。

WhereIf是一个扩展方法(在Abp.Linq.Extensions命名空间中定义)。只用当Filter不为Null或Empty,它才执行Where条件语句。
IsNullOrEmpty也是一个扩展方法(在Abp.Extensions命名空间中定义)。ABP拥有许多类似的快捷扩展方法。
MapTo方法通过使用AutoMapper自动将 Person 对象列表转换为 PersonListDto 对象列表

连接与事务管理

我们不用手动打开数据库连接或开启/提交事务。在ABP框架的工作单元(Unit Of Work)系统中已进行了自动处理。见UOW了解更多。

错误捕获

我们不用手动捕获错误(使用Try-Catch),因为ABP框架会自动在Web层捕获所有错误并返回适当的错误消息至客户端。然后在客户端捕获错误并向用户显示所需的错误信息。见错误捕获了解更多。

0 0
原创粉丝点击