Architettura a cipolla nell'applicazione client-server

3

Sto fissando un nuovo progetto, multipiattaforma. Voglio usare l'architettura della cipolla lì. Sarà un gioco semplice (tic tac toe), solo per scopi educativi. Questa app sarà di tipo client-server.

Ora ho letto molto sull'architettura della cipolla, ma non sono ancora sicuro di come gestirlo nel client-server.

Devo creare due repository diversi (1) per server e per client? O dovrei tenerli entrambi in soluzione singola (2) (dal momento che molte classi / interfacce in Core / Domain sono uguali per entrambi)?

  • (1) - repository di codice sorgente (su bitbucket o sth come quello)
  • (2) - Soluzione Visual Studio

Modifica

Sarà un'app multipiattaforma (C # via xamarin) con singolo server anche in C #. Comunicazione tramite WCF . Il server memorizzerà solo gli account degli utenti, guarderà ogni mossa, salverà la cronologia dei giochi - non è importante, è solo per l'istruzione.

Rispondendo a @Kasper, come vedo OA nell'app client-server:

Ho pensato che avrei potuto condividere più codice possibile in Core di Onion - come Entità, Helpers, Logger (?), Interfacce ... Poi, avrò un altro layer - project per Client API (Application e Servizi di dominio) e Server API (Servizi applicativi: consumo e invio di messaggi da / a client), quindi Interface strati. Separato per client e per server.

Quindi, soluzione VS singolo, due app, singolo Core . So che è tecnicamente possibile - ma è una buona pratica?

    
posta Kesi Sparks 21.09.2015 - 12:27
fonte

1 risposta

1

Non è chiaro cosa intendi per "repository". Intendi Repository del codice sorgente ? In questo caso, usa sicuramente un solo repository.

Inoltre, non è chiaro cosa intendi per "soluzione". Stai utilizzando C #, presumibilmente Visual Studio, e in Visual Studio "Solution" è un contenitore di tutti i tuoi progetti. Quindi, sicuramente usa una soluzione. Questa soluzione conterrebbe più progetti.

Quindi, la tua soluzione "Tic Tac Toe" conterrà:

  • Un progetto "Client" per il tuo cliente (forse di tipo applicazione WinForms ?)
  • Un progetto "Server" per il tuo server (forse di tipo Applicazione console ?)
  • Un progetto "TicTacToe" con tutto il codice che è comune per entrambi (di tipo Libreria di classi .)

Il progetto "Cliente" dipenderà (usa il tuo) progetto "TicTacToe", e il tuo progetto "Server" dipenderà anche da (usa) il tuo progetto "TicTacToe".

Inoltre, anche se il progetto del tuo cliente non invoca direttamente (non può fare uso, a livello di codice sorgente) del tuo progetto server, dovresti comunque definire il client come dipende dal server, perché ogni volta che vuoi eseguire il client, si desidera che Visual Studio si assicuri che il server sia aggiornato. (È stato compilato.) Quindi, potresti avere un meccanismo che riavvia automaticamente il server ogni volta che viene ricompilato, ma questo va oltre lo scopo di questa domanda.

Quindi, il progetto TicTacToe Class Library può essere considerato come il centro della tua cipolla, il progetto Application Server può essere considerato come un livello intermedio della tua cipolla e il progetto Applicazione client può essere considerato come il livello esterno della tua cipolla.

    
risposta data 22.09.2015 - 14:28
fonte