Ho sviluppato un sistema con un profilo aziendale. Il sistema è costruito usando i servizi WCF, asp.net.
Ora un'altra società vuole usare anche il nostro sistema. E potrebbero aver bisogno di personalizzazione e alcuni dei loro elementi di dati sono diversi. Pertanto, sto pianificando di creare un database separato per la nuova società e di suddividere il livello della logica aziendale.
Ho pensato a diverse opzioni per architettare questo e ho finito con il seguente. Quindi qual è il modo migliore per progettare un sistema di questo tipo.
Approccio A:
Esporre i metodi come due diversi servizi WCF uno per ciascuna azienda. Quindi ci sarà un'interfaccia client WCF (IClient) ma due diverse classi di servizio per ogni azienda che le impianta. ClientAService : IClient, ClientBService : IClient.
Problema:
Il problema con questo è tutti i miei datacontracts e datamembers sono esposti al client in 2 diversi namespace. (ClientAService.ObjectABC and ClientBService.ObjectABC).
Quindi tutti gli oggetti che uso nel sito sono in conflitto. cioè (quando ho una lista di ObjectABC
in un'origine dati nelle pagine web, il sito web non capisce se è da ClientAService
o ClientBService
.
Approccio B: Esporre i metodi come singolo client WCF, ma 2 livelli di business logic diversi. Ma useranno gli stessi datacontracts. Quindi i metodi restituiranno lo stesso tipo di dati.
quindi avrò una classe di servizio
ClientService : IClient
{
public <ObjectABC> Method1(String Companycode)
{
if(CompanyCode == "A")
return new AbusinessLogic().Method1();
else if(CompanyCode == "B")
return new BbusinessLogic().Method1();
}
}
Problema: L'unico problema a cui riesco a pensare in questo momento per ogni nuova azienda, ho aggiunto quanto sopra se fosse parte di tutti i miei metodi.
Sono anche aperto a sapere se questo può essere fatto in un modo migliore rispetto alle opzioni indicate.
nota: mi è stato detto che potrebbero esserci altre società da aggiungere in futuro.