Caching vypočteny hodnoty (Sečte / výsledné součty) v databázi

hlasů
0

Vezměme si model následující objekt (- >> označuje kolekce):

Zákaznicky> Objednávky

Objednávky - >> OrderLineItems-> Product {} Cena

Aplikace je zaměřena na zpracování objednávek, takže většinu času tabulky ukazují všechny objednávky, které odpovídají určitým kritériím se používají v uživatelském rozhraní. 99% času jsem zájem pouze o zobrazování součtu LineTotals, nikoliv jednotlivé LineTotals.

dále přemýšlet o tom, že mohlo být vícenásobné platby (bankovní převody, šek, kreditní karty atd) spojené s každou objednávku, opět im zájem pouze o částku, která jsem obdržel.

Při dotazování databáze k objednávce Nechci vybrat všechny příkazy a pak pro každou objednávku, jeho platby a LineItems.

Moje představa byla pro uložení spolupracovník každé objednávky s „status“ objektu, do mezipaměti všechny částky a stav objednávky, zlepšení výkonu dotazu řádů a také podporuje scénáře dotazu pro nezaplacené objednávky placené zakázky, objednávky kvůli atd.

Tím se zabrání logiku domény (např pokud je objednávka považována za zaplacenou) neunikaly do databázových dotazů. Nicméně, to klade odpovědnost za udržování částky až do dnešního dne. Systém má obvykle dobře definované body, kde to potřebuje, aby se stalo, například zadávání nebo integrací plateb, vytvářet / modifikovat objednávku.

Zatím jsem použil pozorovatelných sbírky, které spouštějí přepočet stavu, kdy jsou položky přidány nebo odstraněny, nebo určité vlastnosti na položky jsou aktualizovány. Kladu si otázku, kde je logika pro všechny, které by měly být z hlediska ddd. Zdá se mi divné vynutit veškeré elektroinstalace události a výpočtové logiky v celkové root.

Položena 26/08/2009 v 23:45
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Musíte vyjádřit záměr o žádosti v záměrem-odhalující rozhraní, takže vaše úložiště lze pochopit, co přesně chcete udělat a podle toho reagovat. V tomto případě je rozhraní odhalí záměr, nikoliv ostatním vývojářům, ale na jiný kód. Takže chcete-li stav nebo celkem vytvořit rozhraní, které odhalí tento záměr a požádá objekt tohoto typu z úložiště. Úložiště pak může vytvořit a vrátí objekt domény, která zapouzdřuje dělá přesně práci potřebnou pro výpočet celkové a nic víc.

Kromě toho je vaše DAL může inteligentně vybrat, které načítání strategie by měl platit od rozhraní, žádosti, tj líný nakládky pro situace, kdy nepotřebujete přístup k podřízeným objektům a dychtivý zatížení, kde vy.

Udi Dahan má několik skvělých příspěvků o tom . Napsal a mluvil o uplatňování intention-odhalující rozhraní k tomuto problému, který on volá dělat role explicitní .

Odpovězeno 03/09/2009 v 23:55
zdroj uživatelem

hlasů
0

„Zdá se mi divné vynutit veškeré elektroinstalace události a výpočtové logiky v celkové root.“

To je obvykle volání po «Service».

Odpovězeno 15/09/2009 v 22:24
zdroj uživatelem

hlasů
0

Velmi doporučuji při pohledu na nebo (objekt relační) mappers které podporují LINQ. Pojmenovat dva hlavní ty, LINQ to SQL a Entity Framework, a to jak od společnosti Microsoft. Věřím LLBLGen podporuje také LINQ teď, a NHibernate má několik LINQ řešení předpečené můžete zkusit. Můj prvotní doporučení je Entity Framework v4.0, která je k dispozici prostřednictvím rozhraní .NET 4.0 beta verze nebo Visual Studio 2010 Beta.

Se zapnutým OR mapper LINQ, můžete snadno dotaz na souhrnné informace, které potřebujete dynamicky v reálném čase, pouze pomocí modelu domény. Není potřeba pro obchodní logiky prosakovat do datové vrstvy, protože se obecně nebudou používat uložené procedury. OR mappers generovat parametrizované SQL pro vás v reálném čase. LINQ v kombinaci s OR mappers je velmi mocný nástroj, který vám umožní nejen dotazu a získávat entity a grafy entity, ale také dotaz pro datové výstupky na modelu domény ... umožňuje načítání sad na zakázku dat, agregací, atd prostřednictvím jediného konceptuálního modelu.

Odpovězeno 27/08/2009 v 07:56
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more