Ho un problema di architettura / dubbio e mi piacerebbe avere qualche idea su questo.
Contesto:
Siamo in un'app mobile che si basa esclusivamente sulle chiamate al servizio web da utilizzare. È possibile accedere a un solo utente in qualsiasi momento e tutte le chiamate richiedono un utente. Stiamo parlando di riunioni (a scopo di esempio e chiarezza) (un utente ha una riunione) e visitatori (un visitatore è un contatto, non un altro utente).
Il dibattito:
Abbiamo discusso per circa un'ora. Un lato vuole avere diversi "Manager" o "Servizi" che gestiscono, per esempio, le riunioni e portano un utente in parametro. Questo servizio / gestore viene chiamato quando necessario per ottenere un elenco di riunioni e viene assegnato all'utente corrente. Questo sembra pulito, non accoppiato (ben separato), e abbastanza chiaro senza essere ingombro e complicato.
L'altro lato dice che non ci sono azioni che un utente può fare senza essere loggato, e tutti quei servizi avranno bisogno di un utente come parametro. Quindi potremmo anche avere tutti quei servizi chiamati dall'utente stesso, e semplicemente usare user.GetMeetings();
quando vogliamo quelle riunioni. Questo utente sarebbe in grado di controllare tutto da solo,. isLoggedIn
, o. logIn
, e molto altro.
Da un lato, questo aspetto è "più semplice" all'esterno, chiamiamo sempre un metodo utente e i nostri viewmodels non conoscono nulla se non un utente. D'altra parte questo sembra proprio un wrapper giant che copre praticamente l'intera applicazione (che si estende oltre gli ospiti e gli ospiti).
Ci sarebbe quel livello utente che fa tutto attraverso l'utente corrente, e tutti quei servizi esisterebbero ancora ma solo l'utente lo chiamerebbe, e stiamo solo girando in circolo perché "l'utente è ovunque comunque, e i servizi sarebbero comunque chiamati ovunque ". Ma l'utente che fa tutto sembra così strettamente legato ai servizi che sembra sbagliato, anche se solo lui lo usa e lo farà sempre.
Ad ogni modo, mi piacerebbe sapere cosa ne pensate voi ragazzi, c'è qualcosa di meglio? C'è uno standard? C'è una risposta sbagliata nelle mie due situazioni? Nota (e questo è importante) che stiamo discutendo solo nel contesto della nostra app, non in generale. Ovviamente se gli utenti dovessero interagire tra loro, se avessi utenti anonimi o molte altre situazioni, questo non funzionerebbe. Ma noi sappiamo che questo rimarrà sempre lo stesso, l'utente sarà sempre necessario per le chiamate al servizio web e ci sarà sempre un solo utente. Sono stato seduto lì ad ascoltarli e sono solo confuso e curioso di avere un feedback esterno su questo.
Non sto parlando di una grande e grande classe di Dio per l'utente. In entrambi i casi tutte le chiamate vengono effettuate in classi di servizi / gestori separati. La grande differenza è la seguente:
-
Caso 1: Il mio modello conosce l'utente corrente e il servizio di cui ha bisogno (es:
MeetingService
), e chiede semplicemente al servizio riunione di ottenere tutte le riunioni e gli assegna l'utente corrente come parametro. -
Caso 2: il mio modello conosce solo l'utente corrente e gli chiede di ottenere tutti i meeting (.
GetMyMeetings();
), senza preoccuparsi di come lo fa. L'utente stesso conosce semplicemente tutti i diversi servizi di cui potrebbe aver bisogno e, in tal caso, chiama il MeetingService e restituisce tutto ciò che è stato chiesto.
Stiamo semplicemente aggiungendo un livello nella nostra gerarchia, in modo che tutti si combinino nell'utente.
Ma in termini di codice, l'utente non diventerà così grande, probabilmente finirà per essere lungo circa 100 righe, comprese le proprietà e tutti i metodi di cui avremo bisogno.