Как избежать дублирования кода между DTO, когда один расширяет другой свойством ID и немного другой моделью отношенийC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать дублирования кода между DTO, когда один расширяет другой свойством ID и немного другой моделью отношений

Сообщение Anonymous »

У меня есть доменная сущность KycInformation, и я использую два DTO для обработки разных сценариев:
  • KycInformationDto для операций создания (идентификатор не требуется)
  • KycInformationDetailDto для операций получения/обновления (включая идентификатор)
Единственные различия между этими DTO:
  • KycInformationDetailDto включает свойство Id
  • DocumentsКоллекция использует KycDocumentDetailDto вместо KycDocumentDto
Каков наилучший подход к уменьшению дублирования кода при сохранении разделение между созданием и получением/обновлением DTO? Я использую AutoMapper для сопоставления этих типов.
public class KycInformation : BaseEntity
{
public required KycStatus Status { get; set; }
public required RiskRating RiskRating { get; set; }
public required AmlStatus AmlStatus { get; set; }
public required SanctionsCheckStatus SanctionsCheckStatus { get; set; }
public string? ComplianceNotes { get; set; }
public string? ParentCompany { get; set; }

public required Guid LegalEntityId { get; set; }
public required LegalEntity LegalEntity { get; set; }

public ICollection Documents { get; set; } = new List();

public void AddDocument(KycDocument document) => Documents.Add(document);

public void ClearDocuments() => Documents.Clear();
}

public record KycInformationDto
{
public required KycStatus Status { get; init; }
public required RiskRating RiskRating { get; init; }
public required AmlStatus AmlStatus { get; init; }
public required SanctionsCheckStatus SanctionsCheckStatus { get; init; }
public string? ComplianceNotes { get; init; }
public string? ParentCompany { get; init; }

public ICollection Documents { get; init; } = new List();

private class Mapping : Profile
{
public Mapping()
{
CreateMap();
CreateMap();
}
}
}

public record KycInformationDetailDto : KycInformationDto
{
public required Guid Id { get; init; }

public new ICollection Documents { get; init; } = new List();

private class Mapping : Profile
{
public Mapping()
{
CreateMap();
CreateMap();
}
}
}

public record KycDocumentDto
{
public required string DocumentType { get; init; }
public required string DocumentName { get; init; }
public string? DocumentDescription { get; init; }
public required string DocumentUrl { get; init; }

private class Mapping : Profile
{
public Mapping()
{
CreateMap();
CreateMap();
}
}
}

public record KycDocumentDetailDto : KycDocumentDto
{
public required Guid Id { get; init; }

private class Mapping : Profile
{
public Mapping()
{
CreateMap();
CreateMap();
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... th-an-id-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»