Domanda

Non sono sicuro di dove posizionare la mia logica aziendale. Ho un servizio WCF che espone i suoi metodi al mio cliente.

Se la mia logica aziendale dovesse andare nel metodo di servizio

public User GetUser(int id)
{  
     //Retrieve the user from a repository and perform business logic
     return user;
}

o dovrebbe essere in una classe separata in cui ciascun metodo di servizio WCF chiamerà a sua volta i metodi di livello aziendale.

public User GetUser(int id)
{  
     return _userLogic.GetUser(id);
}
È stato utile?

Soluzione

La mia preferenza personale è quella di avere WCF come strato molto sottile in cima a uno strato aziendale separato. Il livello WCF non fa altro che effettuare chiamate al livello aziendale, simile a quello che hai mostrato nell'opzione 2. Questo ti dà una certa flessibilità nel caso in cui desideri avere il tuo livello aziendale consumato da qualcosa di diverso dai clienti WCF (ad esempio , un'applicazione WPF che chiama direttamente il tuo livello aziendale anziché tramite WCF).

Altri suggerimenti

I servizi WCF sono già, per impostazione predefinita, progettati per il riutilizzo. Non vedo alcun motivo per non avere qualche logica nei tuoi servizi, anche se tieni a mente cose come il principio di responsabilità unica in modo da non finire con un servizio che fa una dozzina di cose.

Anche allora, se finisci per il parco della tua funzionalità in classi più piccole, non è affatto una cattiva idea ospitare quelle classi come servizi WCF. È quindi possibile utilizzarli in-Proc (tramite tubi) quando necessario o attraverso i confini della macchina (TCP) o anche come servizi Web. Crea facciate in base alle necessità per fornire l'accesso alla funzionalità degli altri servizi più piccoli.

Non è vero bisogno di evitare di inserire alcuna logica nelle classi di servizio WCF.

Penso che la decisione dipenda dalle tue esigenze aziendali. WCF è un meccanismo per trasportare dati (oggetti) tra server e client. Se ti piace che la logica Businsess esegue sul server, dovresti lasciare che WCF espone l'oggetto dopo aver eseguito la logica aziendale.

Dovrebbe andare in un set separato di classi. Il livello WCF dovrebbe contenere solo una logica che riguarda direttamente il modo in cui viene consegnato il prodotto del servizio.

Nel tuo caso, vedo che hai un metodo WCF che restituisce un utente (presumo che sia una classe personalizzata) perché avere un metodo separato per restituire l'utente invece di popolare quella proprietà come parte del restituzione dell'oggetto utente?

Per il riutilizzo/testabilità/manutenzione/leggibilità, dovresti sempre inserirti in un livello separato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top