Es gibt einen Teil unserer Codebasis, der im folgenden Stil geschrieben ist:
// 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.
}
Das heißt, es gibt eine große Anzahl von Schnittstellen, die nur eine Reihe von Eigenschaften ohne Verhalten angeben, wobei jeweils eine einzige entsprechende Implementierung diese mit automatischen Eigenschaften implementiert. Der Code wurde von jemandem geschrieben, der ziemlich hochrangig ist (viel mehr als ich) und abgesehen von dieser Verwendung von Schnittstellen vernünftigen Verfahrenscode. Ich habe mich gefragt, ob jemand auf diesen Stil gestoßen ist / ihn verwendet hat und ob er Vorteile gegenüber der Verwendung konkreter DTOs überall ohne Schnittstellen hat.
Antworten:
Hier sind meine zwei Cent:
ScheduledTask
,ScheduledJob
,ScheduledEvent
,ScheduledInspection
, usw., sollte nur eine getrenntSchedulable
jede Implementierer planbare Schnittstelle zu machen.TaxSheet
ändern,SessionAwareTaxSheet
weil eine wesentliche Überarbeitung vorgenommen wurde, die SchnittstelleITaxSheet
jedoch wahrscheinlich nicht so einfach umbenannt werden kann.Endeffekt:
quelle
Ein besonderes Problem, das ich bei DTOs gesehen habe, die Schnittstellen verwenden, ist, dass dies Folgendes ermöglicht:
Ich habe gesehen, dass dieses Muster als schneller, schmutziger Hack angewendet wurde, um ein kritisches Verhalten zu implementieren. Dies führt zu Code, der sich sehr verwirrend verhalten kann:
Dies ist schwer zu pflegen und verwirrend zu versuchen, zu entwirren oder umzugestalten. IMO: Das Hinzufügen von Verhalten zu DTOs verstößt gegen das Prinzip der Einzelverantwortung. Der Zweck eines DTO besteht darin, Daten in einem Format darzustellen, das von einem Persistenz-Framework beibehalten und ausgefüllt werden kann.
DTOs sind keine Domänenmodelle. Wir sollten uns keine Sorgen machen, wenn DTOs anämisch sind. Um Martin Fowlers Diskussion über das anämische Domänenmodell zu zitieren :
quelle