在ABP框架中创建Person的应用服务
应用服务通常是为了给客户端(展现层)服务所使用的,它用来执行应用程序的操作实例。
应用程序服务的实现类和接口以及DTO位于.Application
项目中。
首先我们定义一个接口。(当然接口的定义是可选的,只是我建议你创建一个)。
在项目中创建接口,路径:PhoneBooks\Persons\IPersonApplicationService.cs
namespace YoyoSoft.PhoneBookDemo.PhoneBooks.Persons
{
/// <summary>
/// Person的应用程序服务
/// </summary>
public interface IPersonApplicationService: IApplicationService
{
ListResultDto<PersonListDto> GetPeople(GetPeopleInput input);
}
}
在接口中,我们添加一个GetPeople方法,用于返回Dto信息。关于Dto的信息可以参考文档:数据传输对象
返回类型ListResultDto
是一个预构建的DTO
辅助类,用于返回另一个DTO的集合。
GetPeopleInput
是用于将请求参数传递给GetPeople方法的DTO。
因此,GetPeopleIntput和PersonListDto的定义如下所示:
public class GetPeopleInput
{
public string Filter { get; set; }
}
public class PersonListDto : FullAuditedEntityDto<Guid>
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string EmailAddress { get; set; }
/// <summary>
/// 地址信息
/// </summary>
public string Address { get; set; }
}
CustomerAppDtoMapper.cs用于创建从Person到PersonListDto的映射。PersonListDto继承FullAuditedEntityDto以自动实现审计属性。 有关更多信息,请参见应用程序服务和DTO文档。
现在我们在CustomerAppDtoMapper
类中添加以下映射。
configuration.CreateMap<Person, PersonListDto>();
在定义了接口之后,我们需要实现这些接口定义的方法,代码如下:
public class PersonApplicationService : PhoneBookDemoAppServiceBase, IPersonApplicationService
{
private readonly IRepository<Person, Guid> _personRepository;
public PersonApplicationService(IRepository<Person, Guid> personRepository)
{
_personRepository = personRepository;
}
public ListResultDto<PersonListDto> GetPeople(GetPeopleInput input)
{
var people = _personRepository
.GetAll()
.WhereIf(
!input.Filter.IsNullOrEmpty(),
p => p.Name.Contains(input.Filter) ||
p.Address.Contains(input.Filter) ||
p.EmailAddress.Contains(input.Filter)
)
.OrderBy(p => p.Name)
.ThenBy(p => p.Address)
.ToList();
return new ListResultDto<PersonListDto>(ObjectMapper.Map<List<PersonListDto>>(people));
}
}
我们注入了Person的仓储服务(它是由ABP自动创建的),接下来使用仓储服务来过滤数据库并从数据库中查询信息。
- WhereIf是此处的扩展方法(在Abp.Linq.Extensions命名空间中定义)。仅当filter不为null或为空时,它才执行Where条件。
- IsNullOrEmpty也是扩展方法(在Abp.Extensions命名空间中定义)。52ABP中有许多类似的快捷方式扩展方法。
ObjectMapper.Map方法使用 .Application项目中的CustomerAppDtoMapper中的配置,它自动将Person实体列表转换为PersonListDto对象列表。
关于事物的提交
我们不会手动打开数据库连接或手动启动/提交事务。它是通过ABP框架的工作单元自动完成的。有关更多信息,请参见UOW工作单元文档。
关于异常拦截
我们不会手动处理异常(使用try-catch块即可)。因为ABP框架会自动处理Web层上的所有异常并向客户端返回适当的错误消息
然后,它自动处理客户端上的错误,并向用户显示所需的错误信息。有关更多信息,请参见异常处理文档。