che serve kinfolk a prova di futuro - interfacce contrattuali estendibili [chiuso]

-1

Ok, ho questo umano qui, ma cosa può fare , come scopriresti le sue abilità speciali? E quando scoprirai che tipo di esperto hai, come utilizzeresti le sue esclusive responsabilità?

Un esempio per questa domanda di modello architettonico:

Interfaccia di base con caratteristiche comuni a tutti

interface IHuman {
    DateTime GetDoB();
}

Interfaccia estesa 1

interface ICivilian : IHuman {
    string GetEmail();
    void SendEmail();
}

Interfaccia estesa 2

interface IAccountant : IHuman {        
    double CalculateProfits();
}

Interfaccia estesa n +

interface IAnotherSpecializedHuman : IHuman {
    void DoSomethingExpert();
}

Scoperta e utilizzo dell'API specializzati

Come progetteresti

  • un sistema altamente collegabile e liberamente accoppiato
  • con cui è possibile eseguire tutte le operazioni umane comuni (ad esempio, ottenere l'età),
  • ma esegui anche operazioni specializzate disponibili
  • a seconda di quali moduli sono incorporati
    • es. puoi inviare email, perché il modulo ICivilian è fornito
    • ma non puoi calcolare i profitti, perché il plug-in IAccountant non è fornito
  • e la domanda è non tanto su fornire diverse implementazioni ma fornire diverse API specializzate (e API che hanno un genitore comune con funzionalità condivise)
posta Cel 08.05.2013 - 14:40
fonte

1 risposta

1

Per prima cosa, non avrei diverse API condividere un genitore comune. Non appena ti imbatti in ragionieri alieni o vuoi avere l'età di un cane, sei sfortunato.

Vorrei (e ho) affrontato questo tramite progetti di Entità basata su componenti. Invece di creare un oggetto solido che implementa una tonnellata di interfacce, hai un oggetto molto sottile che contiene una tonnellata di interfacce. L'utente può quindi interrogare "hai qualche capacità che soddisfi questo contratto?". Il consumatore deve ancora conoscere tutti i contratti che intende utilizzare, ma l'entità è libera di costruire, aggregare o altrimenti fornire questi (o non!) A sua discrezione. Hai bisogno di una nuova capacità? Basta aggiungere il nuovo alla raccolta e dare il contratto agli utenti finali per chiedere.

La parte tradizionalmente difficile con questi disegni è come dividere i contratti. Invariabilmente le diverse componenti dell'entità devono parlarsi o condividere alcuni dati comuni. Come risolvi ciò che tende ad essere specifico per il tuo particolare problema.

    
risposta data 08.05.2013 - 16:34
fonte

Leggi altre domande sui tag