Sto riprendendo la mia prima applicazione scritta in .NET ormai 3 anni fa e la sto riscrivendo da capo cercando di sfruttare tutte le conoscenze che, in questo eterno (tecnologicamente parlando) periodo, ho appreso.
Trattandosi di un'applicazione non molto complessa (un piccolo Bug Tracker) ho deciso di optare per un DomainModel pattern che sfrutta un Table Data Gateway pattern. All'inizio avevo deciso di mettere Business Logic e Domain Model nello stesso assembly, ma poi ho deciso di separere il tutto. Per prendere confidenza con un pattern in più ho pensato di utilizzare il Lazy Load pattern nella sua forma più semplice (Lazy initialization) caricando le collection figlie legate alla mia classe solo quando richieste dall'applicazione. Qui è scattato il problema. Finchè ho tenuto tutto in un assembly, bastava richiamare all'interno del DomainModel i metodi per caricare la collection quando necessario.
public AlertCollection Alerts{ get { if (_alerts == null) LoadAlertsByUserId(_userId); return _alerts(); } }
La cosa non mi piaceva perchè c'era una dipendenza ciclica tra DomainModel e Business Logic.
A questo punto l'unica soluzione che mi si è presentata davanti è stata quella di pubblicare un evento nel DomainModel e scatenarlo quando la collection è ancora nulla. Nello strato di Business appena si crea l'oggetto, viene effettuata la sottoscrizione all'evento caricando la collection nel momento in cui questo viene scatenato.
Il DomainModel cambia così:
public EventHandler AlertsLazyLoad; public AlertCollection Alerts{ get { if (_alerts == null){ _alerts = new AlertsCollection(); if (AlertsLazyLoad != null) AlertsLazyLoad(this, EventArgs.Empty) } } set { ... } }
...
user.AlertsLazyLoad += new System.EventHandler(this.OnAlertsLazyLoad);
...
private void OnAlertsLazyLoad(object sender, EventArgs e){
((DomainModel.User)sender).Alerts = GetAlertsByUserId(((DomainModel)sender).UserId); }
Stay Tuned...
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Entity Framework è lento! mmmmh, probabilmente sei tu che lo stai usando male!, il 7 ottobre 2022 alle 10:55
- Cosa penso di ASP.NET vNext, il 3 settembre 2014 alle 09:00
- E così AngularJS e DurandalJS convergono..., il 7 maggio 2014 alle 11:51
- Usare fiddler per simulare le risposte da un servizio, il 28 ottobre 2013 alle 08:00
- Tip: cosa fare quando Entity Framework Code-First Migrations smette di funzionare, il 18 gennaio 2013 alle 11:04
- Visual Studio 11 beta: le novità di Entity Framework 5.0 e WCF 4.5, il 2 marzo 2012 alle 23:08