Soluzione per più versioni di un solo software

1

Mi dispiace se il titolo è un po 'difficile da ottenere.

Non ho mai costruito un intero grande software, solo alcune piccole app nel mio tempo libero, ero più familiarizzato con le cose del fare-cosa-il-capo-mi-raccontate. E il nostro approccio è un po 'amatoriale, anche obsoleto (Foxpro 8.0 e MS SQL 2000).

Ora ho iniziato a lavorare in un'altra azienda e sono stato assegnato alla realizzazione di un software in C # .Net, ma il problema è che non sono sicuro dell'architettura del programma

Il mio problema è che stiamo costruendo un software. Ma abbiamo una varietà di clienti e, ad esempio, abbiamo una funzione CalculateCostOfProduct e potrebbe essere diversa per ogni cliente.

Si dice per la parte A, la funzione è:

function CalculateCostOfProduct()
return 5; 

per il partito B:

function CalculateCostOfProduct()
return 10; 

...

E dovrebbero esserci anche moduli aggiuntivi per esigenze specifiche! Quindi ci saranno versioni personalizzate dallo standard originale. Come dovrei gestirlo?

Ma non possiamo creare exe diversi per client diversi!

Quindi, per favore, dammi alcune idee o soluzioni che potrebbero risolvere questo problema.

    
posta NeedAnswers 19.07.2014 - 07:33
fonte

1 risposta

3

Per risolvere questi tipi di problemi è il motivo per cui esistono polimorfismo e iniezione di dipendenza.

Seguendo il tuo esempio, puoi avere un'interfaccia CostCalculator o una classe astratta e due implementazioni: ClientACostCalculator e ClientBCostCalculator. Con questa metà del problema è risolto, ora dobbiamo usare l'iniezione di dipendenza per risolvere l'altra metà.

Si supponga di utilizzare queste classi da un processo nel proprio sistema, chiamare il processo "MyCalculationProcess", quindi è necessario iniettare il CostCalculatorn corretto in base al client. È possibile utilizzare un framework di iniezione delle dipendenze (ce ne sono molti per .net) e iniettare l'implementazione clientA o clientB in base a qualche configurazione o variabile di ambiente. Oppure puoi implementarlo molto facilmente, ad esempio:

class MyCalculationProcessFactory {

   public MyCalculationProcess createProcess(Config config) {

        if (config.isClient("A")) 
            return new MyCalculationProcess(new ClientACostCalculator()); 

        if (config.isClient("B")) 
            return new MyCalculationProcess(new ClientBCostCalculator()); 

   }

} 

Non è il modo migliore per implementare questo e il suo più java di c # ma spero che tu possa avere l'idea.

Inoltre, se non hai solo questo CostCalculator, hai più cose del genere a seconda di un cliente meglio della precedente "fabbrica semplice" puoi usare un pattern AbstractFactory.

    
risposta data 20.07.2014 - 00:47
fonte

Leggi altre domande sui tag