Architettura relativa al componente della logica aziendale nell'API REST

1

Sono uno sviluppatore lato server .net desidero realizzare applicazioni web con la seguente logica:
Registrazione degli utenti (CRUD)
Registrazione delle attività (CRUD): cosa, dove, quando
L'utente può creare elementi attivi, ad esempio:
Partita di calcio, stadio delle rose, Portland, Oregon, 10/12/2016, 20:00.
CRUD per utente / attività può essere implementato tramite rest API e salva tutto il jSON su noSQL.
La mia domanda è, quando progetti applicazioni (il client può essere app Web / telefono / altro), cosa succede quando voglio aggiungere una logica aggiuntiva?
Quando l'utente aggiunge attività, voglio fare quanto segue:
1. Creare un elenco di utenti che potrebbero essere intereseted in quell'attività 2. Invia loro un suggerimento su tale attività.

Quindi presumo di aver bisogno di un componente SuggestionService, dove lo combino?

Da quello che so, il flusso di solito è come questo (RestAPI):

ActivityController.AddNewActivity(data) -> Take json and build class  
ActivityService.AddNewActivity(data) -> Validate class data   
ActivityRepository.AddNewActivity(data) -> add data to mongoDB/Redis

Dove dovrebbe essere la nuova logica? L'implementazione ActivityService.AddNewActivity deve essere (pseudo codice):

public void ActivityService.AddNewActivity(data)  
{  
if (!data.IsValid()) throw new Exception(..);  
ActivityRepository.AddNewActivity(data);  
var relUsers = SuggestionService.GetRelevantUsersForActivity(data.Id);
UserService.SendActivityToUsers(data.Id, relUsers);  
}  

O dovrei semplicemente fare ActivityRepository.AddNewActivity(data);
E per avere uno stato della macchina di stato sull'oggetto Activity, 1 = creato, 2 = suggerito, 3 = inprogress, 4 = completato
E poi fare un lavoro / servizio logico che sondaggi le attività da mongoDB, e secondo il loro stato fare comportamenti diversi.
Ad esempio ogni 1 minuto controllerà, se è stata effettuata una nuova attività, ottenere utenti pertinenti e inviare loro suggerimenti.

Il lavoro / servizio logico non è correlato con alcun mezzo alle operazioni CRUD, ma manipola solo i dati su mongo e gli utenti dell'API REST per eseguire operazioni (ottenere utenti rilevanti, inviare attività agli utenti) ecc. Può essere scritto in C # e l'API CRUD in java.

Non sono sicuro dell'architettura di app complesse, quello che cerco di fare è separare la logica dei lavori dalla logica della normale API CRUD REST. Lo sto facendo bene?

    
posta ilansch 09.09.2016 - 08:50
fonte

0 risposte

Leggi altre domande sui tag