Завершение списка объектов с 1 дополнительным свойством - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть следующие классы:

QuestionnaireListDto.cs

namespace Services.DTOs
{
    public class QuestionnaireListDto
    {        
        public IList<QuestionnaireEntryDto> Questionnaires;

        public QuestionnaireListDto(IList<QuestionnaireEntryDto> questionnaires)
        {
            Questionnaires = questionnaires;
        }
    }
}

QuestionnaireEntryDto.cs

namespace Services.DTOs
{
    public class QuestionnaireEntryDto
    {
        // Omitting several properties here for brevity...

        public int Id { get; }
        public int QnreId { get; }
        // Other properties here...

        public QuestionnaireEntryDto(QnrsMailed qnrsMailed)
        {
            Id = qnrsMailed.Id;
            QnreId = qnrsMailed.QnreId;
            // Initialize other members...
        }
    }
}

Эти классы DTO инициализируются отдельной библиотекой.Затем эти DTO передаются в Razor view.Я использую ASP.NET Core Data Protection для шифрования / дешифрования значений Id, указанных выше.

Я пытаюсь «прикрепить» зашифрованную версию свойства Id выше.API защиты данных создает строковую версию идентификатора.Я хотел бы иметь возможность сделать это без создания отдельного свойства "EncryptedId".Когда DTO создаются, я не знаю зашифрованный идентификатор на данный момент.Я также хочу, чтобы шифрование / дешифрование происходило в классе Controller, если это возможно.

Я не могу придумать чистого способа сделать это.На данный момент самое близкое, что я могу придумать, - это создать универсальный класс-обертку, который включает в себя свойство EncryptedId, что-то вроде:

public class EncryptedDto<T> where T : class
{
    public string EncryptedId { get; }
    public T Dto { get; }

    public EncryptedDto(string encryptedId, T dto)
    {
        EncryptedId = encryptedId
        Dto = dto;
    }
}

Конечно, чтобы сделать это, мне пришлось бы перебрать списокDTO и создайте один из них для каждого объекта DTO.А также создайте новый класс DTO, который может хранить список этих универсальных объектов.Это все еще только кажется грязным / громоздким.Есть ли лучший способ?

1 Ответ

0 голосов
/ 17 апреля 2019

В вашем решении нет ничего плохого. Перераспределение DTO - обычная практика Если вы считаете, что ваш код сопоставления грязный, вы можете использовать Automapper для этого. Другим обходным решением является использование статического класса для делегирования шифрования / дешифрования. И всякий раз, когда вы используете и id внутри представления, вы вызываете метод шифрования этого класса, чтобы отображался только зашифрованный идентификатор.

...