Часть нашего кода написана в следующем стиле:
// 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.
}
То есть существует большое количество интерфейсов, определяющих только набор свойств без поведения, каждый с единственной соответствующей реализацией, которая реализует их с помощью авто-свойств. Код написан кем-то достаточно старшим (гораздо больше, чем я) и отличается от этого использования интерфейсов разумным процедурным кодом. Мне было интересно, сталкивался ли кто-либо еще с этим стилем и использовал ли он какие-либо преимущества по сравнению с использованием конкретных DTO везде без интерфейсов.
Ответы:
Вот мои два цента:
ScheduledTask
,ScheduledJob
,ScheduledEvent
,ScheduledInspection
и т.д., должно быть только один отделеныSchedulable
интерфейс делает любой реализатор запланированным.TaxSheet
может измениться,SessionAwareTaxSheet
потому что был сделан значительный пересмотр, но интерфейсITaxSheet
, вероятно, не будет так легко переименован.Нижняя граница:
источник
Особая проблема, с которой я столкнулся в DTO, использующих интерфейсы, заключается в том, что это позволяет:
Я видел, как этот шаблон применялся как быстрый, грязный хак для реализации некоторого критического поведения. Это приводит к коду, который может иметь очень запутанное поведение:
Это трудно поддерживать и сбить с толку, чтобы попытаться распутать или изменить. ИМО, добавление поведения в DTO нарушает принцип единой ответственности. Целью DTO является представление данных в формате, который можно сохранить и заполнить с помощью структуры постоянства.
DTO не являются моделями доменов. Мы не должны беспокоиться, если DTO являются анемичными. Процитируем обсуждение Мартином Фаулером модели анемичной области :
источник