Come faccio ad architetto 2 plugin che condividono un componente comune?

4

Ho un oggetto che contiene dati e sputa un output trasformato, chiamato IBaseItem .

Ho anche due parser, IParserA e IParserB . Questi parser trasformano i dati esterni (nel formato dataA e dataB rispettivamente) in un formato utilizzabile dal mio IBaseItem (baseData).

Voglio creare 2 sistemi, uno che funzioni con dataA e uno che funzioni con dataB. Permetteranno all'utente di inserire dati e associarli ai plug-in / implementazioni giusti e trasformare i dati in outData.

Voglio scrivere personalmente questi agenti, ma altre persone forniscono la parser e la logica baseitem, e come tale sto implementando questi elementi come plugin (da qui l'uso delle interfacce). Altri programmatori possono scegliere di implementare 1 o entrambi i parser.

Q: Come dovrei strutturare il modo in cui gli elementi di base e i parser sono associati, memorizzati e caricati in ciascuno dei miei programmi?

Relazioni di classe:

Quello che ho provato:

Inizialmente, penso che ci dovrebbe essere una dll diversa per ciascuno dei miei 2 vigili urbani, ognuno dei quali ha un parser e un valore base in essi. Tuttavia, la duplicazione della logica baseitem non sembra corretta (specialmente se la logica dell'elemento base cambia).

Ho quindi pensato che gli elementi base potessero tutti avere una propria dll e quindi associare in qualche modo parser e basi (guids?), ma non so se l'implementazione dell'ID / associazione overhead aggiungesse troppa complessità.

    
posta James 04.07.2012 - 19:22
fonte

1 risposta

2

Vorrei strutturare questa soluzione in questo modo:

  • Avresti un unico assembly che contiene il contratto IBaseItem (e qualsiasi altro contratto che esponi ai tuoi consumatori). Chiamalo assemblaggio del contratto.
  • Potresti quindi aver bisogno di un secondo assembly che contenga qualsiasi codice condiviso per i tuoi due parser. A seconda della natura della soluzione, questo codice condiviso potrebbe andare nell'assembly del contratto o potrebbe essere necessario eseguire un assembly logico di base. Questo assembly del parser di base avrebbe quasi certamente bisogno di fare riferimento all'assembly del contratto per eseguire le funzioni di base.
  • Infine, i due parser possono esistere nei propri progetti e fare riferimento a entrambi gli altri assembly.

Non seguo la menzione di associare parser con oggetti base tramite i guids. La domanda menziona solo un oggetto base, e ogni parser conosce solo un tipo di dati: è un processo abbastanza semplice per analizzare il tuo unico tipo di input conosciuto nel tuo unico tipo di output conosciuto.

    
risposta data 05.07.2012 - 04:17
fonte

Leggi altre domande sui tag