Har följande scenario. En viss program modul har en modulKategori. Hej vi hade en kille här för länge sen som gillade lazy loadsMer funderingar kring DDD.
Jag använder modulens repository för att fylla dennas kategori objekt då modulen laddas.
Enligt kod nedan.
Har funderingar på om det är bättra att göra denna laddning vi modul entiteten?
Alltså via dess property typ; minModule.Category? (Är det det som kallas lazy load?)
fördelar nackdelar?
Nästa fundering gäller själva frågan mot DAL.
Är det bättre att baka ihop dessa två anrop, alltså fråga för att hämta modul data och dess kategoridata då detta görs i SpecificModuleRepository.
<code>
public class SpecificModuleRepository : ModuleRepository
{
public SpecificModuleRepository ()
{
}
public override Module Load(int moduleId)
{
using (SqlDataReader dbR = new .....)
{
specificModule = this.Factory.Create(dbR);
}
if (specificModule != null)
{
if (specificModule.StandardCategoryCid > 0)
{
specificModule.Category = this.LoadCategory(specificModule.StandardCategoryCid);
}
}
return myModule;
}
protected override ModuleCategory LoadCategory(int categoryId)
{
ModuleCategoryRepository moduleCategoryRepository = new ModuleCategoryRepository();
return moduleCategoryRepository.Load(categoryCid);
}
}
public class SpecificModule : Module
{
....
public override ModuleCategory Category
{
get
{
return m_ModuleCategory;
}
set
{
m_ModuleCategory = value;
}
}
}
</code>Sv: Mer funderingar kring DDD.
Lazy Load är som du säger när man laddar nått så fort man accessar det.
Ex.
Order.OrderLines <- Har man många OrderLines och använder Order ofta där du inte har nytta
av OrderLines lika ofta är det rätt onödigt att kanske fylle dennqa varje gång, då kan man istället
göra så att OrderLines fylls när man gör en get mot den.
Det finns många tankar hur man kan lösa detta snyggt. Antingen göra en OrderLineRepository som man
nyttjar i sin entitet (blir hårdare koppling då).
Eller så gör man en transparant hnatering för att läsa in Repositories.
Man man använda AOP för att automatisera det med. Ettt trevligt ramverk som jag vet har detta implementerat är NPersist saker.
Skrev en liten post för ett bra tagsedan om Lazy Load vet ej om det ger nått men du kan titta på den om du vill.
<a>http://www.johannormen.com/blog/viewpost.aspx?PostID=111</a>
Ang fråga två är jag inte helt med, troligen för att jag inte vet riktigt vad modul o kategori symboloserar i ditt system.
Men om Module är en etitet och aggregat root så bör denna ha sin egna Repository är det samma med Cartegory bör den ha sin egna Repos. Men är Category en Associasion för Module kan ModuleRepository ha i uppgift att läsa upp Category.
mvh JohanSv:Mer funderingar kring DDD.
han la lazyloads i proeprtys med tanken då att de bara skulle anropas när de behövdes
det är väl ok i teorin
men när han sen jobbade med andra objekt och andra kom och implementerade hans objekt i något annat sammanhang och anropade dessa properties som om de vore de facto properties så blev både webserver och sqlserver ledsen
with lazyload comes great responsibility - use it wisely :)