al momento sto progettando un componente aggiuntivo per lo strumento di modellazione Enterprise Architect. L'architettura generale è mostrata nell'immagine qui sotto.
Fondamentalmente ogni azione a cui il componente aggiuntivo può reagire viene attivata da PreDefinedEvents per il quale il componente aggiuntivo può fornire funzioni di callback. Queste funzioni di callback sono il punto di partenza per costruire qualsiasi applicazione che qualcuno vorrebbe mettere in primo piano EA. Uno ha accesso al database del modello (file .mdb) tramite l'API (che utilizza algoritmi closed-source) o tramite accesso diretto, il che può causare incongruenze e non è sicuro rispetto alle modifiche della struttura del database.
L'approccio attuale dei progetti precedenti era quello di costruire classi monolitiche chiamate EA_XXX_Utilities contenenti un'enorme quantità di metodi statici. Tutti questi metodi ottengono come argomento un riferimento al repository del modello che è memorizzato all'interno di Closed Source e che lavora con esso.
Penso che questo approccio non sia molto utile in relazione alla manutenibilità e all'espandibilità, che avrà una priorità elevata nei progetti futuri, quindi sto cercando di trovare il modo migliore che mi consente di soddisfare i requisiti in base a questi aspetti di qualità.
Ogni requisito consiste fondamentalmente in due parti:
- modifica il modello sottostante
- presenta parti del modello in modo personalizzato
Questo mi odora come una specie di architettura MVC, ma il mio problema principale è che se ho memorizzato il riferimento nel repository del modello da qualche parte nella mia applicazione, allora dovrei in qualche modo ricevere una notifica di tutte le modifiche che gli algoritmi closed source fanno al database. Ma non tutti vengono inoltrati al componente aggiuntivo, quindi a un certo punto il modello memorizzato nel componente aggiuntivo diventerà incoerente.
Questo porta alla domanda:
Come posso progettare l'add-in, in modo che abbia qualche architettura in esso e ancora meglio soddisfare gli aspetti di qualità?