Interfacce specifiche del dominio

1

Ci sono dei reali vantaggi nell'usare le interfacce su classi astratte in un modello di dominio? Qualcuno ha esperienza sull'uso di interfacce in un modello di dominio in un progetto reale?

Da un punto di vista tecnico, DDD definisce stereotipi come aggregato , valore , repository , ecc. I repository quindi, ad esempio, possono essere definiti come interfacce come ICustomerRepository che vengono poi implementate dall'infrastruttura. Questo è un caso d'uso valido per un'interfaccia, poiché possono esserci più implementazioni del repository (mock, falsi, ecc.). Tuttavia, questo è un motivo completamente tecnico per utilizzarlo: qui l'interfaccia viene utilizzata solo per separare il repository specifico del dominio dall'implementazione tecnica.

Ma per quanto riguarda le interfacce puramente specifiche del dominio? Qualcuno ha mai incontrato una situazione in cui sia l'interfaccia che la sua realizzazione non fossero tecniche? In particolare, quali ragioni potrebbero parlare per scegliere un'interfaccia su una classe astratta quando si implementa un tipo specifico del dominio? Forse quando è implicata l'ereditarietà multipla, sarebbe necessario, ma quanto è probabile e potrebbe essere considerato un buon progetto?

    
posta proskor 25.07.2014 - 13:09
fonte

1 risposta

2

Does anyone have any experience using interfaces in a domain model in a real project?

Abbiamo un sacco di interface s e c'è un grosso problema con molti di loro; e questo è l'accoppiamento temporale - e l'accoppiamento inconoscibile a questo ....

Dovrebbe essere una classe astratta basata su modelli

Il metodo di sequenziamento del metodo dell'interfaccia e la struttura del codice nell'implementazione effettiva chiarisce che senza sapere come dovrebbero interagire i metodi è impossibile implementare il interface . Non solo quali metodi chiamano quali altri metodi, ma in quali condizioni e con particolari dettagli necessari w / in singoli metodi.

Dopo aver visto la 3a implementazione è chiaro che c'è un refactoring che urla per uscire ma non può a causa di ciò che accade al codice dato:

  • le devastazioni del tempo
  • diversi codificatori
  • e peggio di tutti i programmatori diversi in momenti diversi, soprattutto in considerazione dell'inevitabile turn over dello staff.

Le implementazioni successive sono "diverse senza essere distintive"

La prima implementazione è stata imitata - non sto dicendo necessariamente tagliata e incollata - dall'implementazione successiva, successiva, ecc. con l'inevitabile conseguenza di leggere differenze che a un'ispezione vicina (e che richiede tempo) si rivelano semplicemente differenze.

La manutenzione viene annullata in diversi modi

  1. L'assenza di una struttura di classe astratta incoraggia gravi violazioni del principio di responsabilità singola.
  2. Questa cosa diventa la locandina di DRY.
  3. La vera funzionalità comune è nascosta dalle differenze di implementazione irrilevanti e dalle violazioni SRP.
  4. Inevitabilità alcune implementazioni rivelano un bug comune, ma sono corrette solo dove viene segnalato il bug. Ciò non è sorprendente per chiunque lavori su grandi progetti.
  5. Inevitabilità alcune implementazioni introducono bug che sarebbero stati prevenuti da una classe astratta con implementazione di base e gestione degli errori.
  6. Il refactoring diventa (a) troppo dispendioso in termini di tempo (b) troppo rischioso (c) generalmente poco pratico
risposta data 28.07.2014 - 23:17
fonte