Esiste un modo preferibile in cui un servizio dovrebbe mantenere i dati?
Aggiorna
Dipende se i servizi sono pubblici o interni?
Alcuni servizi accettano oggetti entità come parametri per eseguire azioni su quell'oggetto, aggiornarne lo stato o aggiungervi alcuni dati. Questo servizio dovrebbe anche mantenere le modifiche a quell'oggetto nel database (SaveChanges, Flush, ...) o il chiamante che ha ottenuto / creato quell'entità decide se e quando farlo persistere?
Rendendo il servizio interno persistente i dati includono problemi come: test più difficili, non possono usare transazioni di database implicite, forse molti roundtrip di database invece di uno.
È meglio descriverlo con un esempio:
public void PerformAction(int productId, int actionId)
{
var product = productRepository.GetProduct(productId);
var action = actionRepository.GetAction(actionId);
actionService.PerformAction(product, action);
//Should this be necessary?
productRepository.Update(product);
}
Ciò sarebbe ovvio, ma il PerformAction
non può avere dipendenze diverse dal modello:
public void PerformAction(int productId, int actionId)
{
var product = productRepository.GetProduct(productId);
var action = actionRepository.GetAction(actionId);
product.PerformAction(action);
//Obviously necessary!
productRepository.Update(product);
}