Há uma parte da nossa base de código escrita no seguinte estilo:
// IScheduledTask.cs
public interface IScheduledTask
{
string TaskName { get; set; }
int TaskPriority { get; set; }
List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein
}
// ScheduledTaskImpl.cs
public class ScheduledTaskImpl : IScheduledTask
{
public string TaskName { get; set; }
public int TaskPriority { get; set; }
public List<IScheduledTask> Subtasks { get; set; }
// ... several more properties in this vein,
// perhaps a constructor or two for convenience.
}
Ou seja, há um grande número de interfaces especificando apenas um conjunto de propriedades sem comportamento, cada uma com uma única implementação correspondente que as implementa com propriedades automáticas. O código é escrito por alguém razoavelmente sênior (muito mais do que eu) e além desse uso de código processual razoável de interfaces. Fiquei me perguntando se alguém havia encontrado / usado esse estilo e se ele tem alguma vantagem sobre o uso de DTOs concretos em todos os lugares, sem as interfaces.
Respostas:
Aqui estão meus dois centavos:
ScheduledTask
,ScheduledJob
,ScheduledEvent
,ScheduledInspection
, etc, devem ser apenas um segregadosSchedulable
interface de fazer qualquer schedulable implementor.TaxSheet
poderia mudar paraSessionAwareTaxSheet
porque uma revisão significativa foi feita, mas a interfaceITaxSheet
provavelmente não será renomeada com tanta facilidade.Conclusão:
fonte
Um problema específico que eu já vi com DTOs que usam interfaces é que isso permite:
Vi esse padrão aplicado como um hack rápido e sujo para implementar algum comportamento crítico. Isso leva ao código que pode ter um comportamento muito confuso:
Isso é difícil de manter e confuso para tentar desembaraçar ou refatorar. Na IMO, a adição de comportamento aos DTOs viola o princípio da responsabilidade única. O objetivo de um DTO é representar dados em um formato que possa ser persistido e preenchido por uma estrutura de persistência.
DTOs não são modelos de domínio. Não devemos nos preocupar se os DTOs são anêmicos. Para citar a discussão de Martin Fowler sobre o modelo de domínio anêmico :
fonte