Понимание сервисов APB и репозиториев - PullRequest
0 голосов
/ 24 мая 2019

Я изучаю APB, и я анализирую и расширяю код из учебника Введение, часть 2 (ASP.NET Core, EF). https://aspnetboilerplate.com/Pages/Documents/Articles/Introduction-With-AspNet-Core-And-Entity-Framework-Core-Part-2/index.html

Сначала я представил новую сущность - Team. Команда - это группа людей. Я добавил внешний ключ в сущность Person.

[Table("AppPersons")]
public class Person : AuditedEntity<Guid>
{
    public const int MaxNameLength = 32;

    [Required]
    [StringLength(MaxNameLength)]
    public string Name { get; set; }

    public Guid TeamId { get; set; }

    [ForeignKey(nameof(TeamId))]
    public Team Team { get; set; }
}

Я хотел бы создать ApplicationService, который будет возвращать список людей для конкретной команды с количеством назначенных задач. Я не знаю, как мне объединить инфраструктуру Repository и Mapping для достижения этой цели.

public class FooAppService : ApplicationService, IFooAppService
{
    private readonly IRepository<Task, Guid> _taskRepository;

    public FooAppService(IRepository<Task, Guid> taskRepository)
    {
        _taskRepository = taskRepository;
    }

    public ListResultDto<PersonWithNumberOfTasksAssignedDto> FooMethod(Guid teamId)
    {
        ...
    }

}

Я также не знаю, как лучше проектировать объект DTO. Нужен ли новый объект DTO для этого метода службы или мне следует использовать кортеж? У меня есть PersonDto объект, который используется для добавления / редактирования Person. Должен ли я просто обернуть это свойство count?

public class PersonWithNumberOfTasksAssignedDto : EntityDto<Guid>
{
    public PersonDto Person { get; set; }
    public int NumberOfAssignedTasks { get; set; }
}

1 Ответ

0 голосов
/ 24 мая 2019

Вы можете воспользоваться ссылкой из бесплатного шаблона запуска Abp.

public async Task<PersonDto> Create(PersonCreateInput input)
{
    var person = ObjectMapper.Map<Person>(input);

    await CurrentUnitOfWork.SaveChangesAsync();

    return MapToEntityDto(person);
}

Например, UserAppService.Create() https://github.com/aspnetboilerplate/module-zero-core-template/blob/164a5c9e28cb29383551d0f3310986ab43d0ceed/aspnet-core/src/AbpCompanyName.AbpProjectName.Application/Users/UserAppService.cs#L55-L76

Чтобы получить список элементов, вы можете использовать AsyncCrudAppService базовый класс, который обеспечивает сортировку и нумерацию страниц из коробки (через AsyncCrudAppService.GetAll(). См. https://github.com/aspnetboilerplate/aspnetboilerplate/blob/14c4fe5a5408a66e913a434688b951815247827d/src/Abp/Application/Services/AsyncCrudAppService.cs#L112-L129

...