Är det någon som har använt sig av M-V-VM modellen och där även haft en cache för att cacha data.
Jag håller på att implementera M-V-VM i ett DDD projekt, där jag skall kunna köra min WPF-klient i ett "offline" läge, så jag måste ha en cache där data kan hållas även om kopplingen till min services går ner.
Cachen innehåller observablecollection för att få databiningen att fungera som den skall mot WPF-kontrollerna. Mitt problem är att jag tycker att jag får för mycket logik i min VM-klass, som bör ligga i mitt DDD typ i en applikationservices, men samtidigt så tycker jag att min cache bör ligga i presentationslagret eftersom den inkluderar observablecollections.
Här är lite kod som jag tycker borde flyttas ner från min VM-klass till DDD lagret.
AddQueueWorkerItems();
if (!CacheManager.Instance.BuyerCollection.InstancedWithData)
{
IEnumerable<IBuyer> tmpBuyers = _buyerRepository.GetBuyers();
IList<BuyerPresentationModel> tmpBuyerPresentations = new List<BuyerPresentationModel>();
foreach (IBuyer tmpBuyer in tmpBuyers)
tmpBuyerPresentations.Add(new BuyerPresentationModel(tmpBuyer));
CacheManager.Instance.BuyerCollection.ClearCollectionAndAddItems(tmpBuyerPresentations.AsEnumerable<BuyerPresentationModel>());
}
this.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle,
new ThreadStart(delegate
{
this.BuyerCollection = CacheManager.Instance.BuyerCollection.Collection;
RemoveQueueWorkerItems();
}));
Koden
IEnumerable<IBuyer> tmpBuyers = _buyerRepository.GetBuyers();
IList<BuyerPresentationModel> tmpBuyerPresentations = new List<BuyerPresentationModel>();
foreach (IBuyer tmpBuyer in tmpBuyers)
tmpBuyerPresentations.Add(new BuyerPresentationModel(tmpBuyer));
Är den som jag önskar flytta ner, tyvärr har den referenser till myn BuyerPresentationModel som ligger i Presentationslagret.
Även en sådan sak som att lägga till en ny Buyer skulle kräva en massa logik i min VM-modell eftersom den dels måste läggas till i cachen och sedan till repositoryt och det är verkligen logik som borde ligga i DDD-lagret.
Det finns en lösning och det är att flytta ner BuyerPresentationModel och cachen till mitt DDD, men det känns inte helt rätt.
Någon som har gjort något liknande som har några ideer...
- M