Il y a une partie de notre base de code écrite dans le style suivant:
// 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.
}
C'est-à-dire qu'il existe un grand nombre d'interfaces spécifiant juste un ensemble de propriétés sans comportement chacune avec une implémentation correspondante unique qui les implémente avec des auto-propriétés. Le code est écrit par une personne assez âgée (beaucoup plus que moi) et est en dehors de cette utilisation d'interfaces de code procédural raisonnable. Je me demandais si quelqu'un d'autre avait rencontré / utilisé ce style et s'il avait des avantages par rapport à l'utilisation de DTO concrets partout sans les interfaces.
Réponses:
Voici mes deux cents:
ScheduledTask
,ScheduledJob
,ScheduledEvent
,ScheduledInspection
, etc, ne devrait être qu'une ségrégationSchedulable
interface de faire une planifiable de implementor.TaxSheet
pourrait changer enSessionAwareTaxSheet
raison d'une refonte importante mais l'interfaceITaxSheet
ne sera probablement pas renommée si facilement.Conclusion:
la source
Un problème particulier que j'ai vu avec les DTO qui utilisent des interfaces est qu'il permet ceci:
J'ai vu ce modèle appliqué comme un hack rapide et sale pour implémenter un comportement critique. Cela conduit à du code qui peut avoir un comportement très déroutant:
C'est difficile à maintenir et déroutant pour essayer de démêler ou de refactoriser. OMI, l'ajout d'un comportement aux DTO viole le principe de responsabilité unique. Le but d'un DTO est de représenter les données dans un format qui peut être conservé et rempli par un cadre de persistance.
Les DTO ne sont pas des modèles de domaine. Nous ne devrions pas nous inquiéter si les DTO sont anémiques. Pour citer la discussion de Martin Fowler sur le modèle de domaine anémique :
la source