Attualmente sto avviando un nuovo sistema sulla mia azienda e stiamo utilizzando una buona separazione tra modelli, viste e controllori, fondamentalmente usando Asp.Net MVC 3 per l'interfaccia utente utente e una libreria di classi C # per il modello.
La domanda riguarda la "modellazione di un modello".
Stiamo utilizzando Linq-to-SQL come livello di accesso ai dati e modellazione di entità su questo DAL. Esempio:
// DAL, an autogenerated .dbml file
...
public System.Data.Linq.Table<TB_USER> TB_USERs {
get {
return this.GetTable<TB_USER>();
}
}
...
E stiamo mappando questa tabella su un'entità, come di seguito:
public class User {
// Entity, mirroring a .dbml table
public static IEnumerable<User> GetAll() {
var db = new MyDataContext();
var userList = (from u in db.TB_USERs select u).ToList();
IEnumerable<User> retorno = lista.ConvertAll(u => (User)u);
return retorno;
}
// Active Record ?
public static User Save(User user) { ... }
}
Questo tipo di modellazione è corretta? Mi sento come se stessi ripetendo me stesso avendo due entità che significano la stessa cosa (Utente e TB_USER), ma TB_USER è la rappresentazione grezza della tabella del database che persiste nell'entità Utente.
E il metodo GetAll, un metodo statico creato sull'entità con l'unico scopo di recuperarli tutti. Ciò significa che se voglio recuperare i dati utilizzando un filtro, ad esempio, devo creare un altro metodo GetDataBy...
.
E il metodo Save? So che si suppone di salvare lo stato di un utente, ma cosa succede se devo salvare un oggetto utente casuale insieme ad altri oggetti per effettuare una transazione?
Non dovrebbe questo tipo di controllo delle transazioni essere nel database?