Datová vrstva Best Practices

hlasů
9

Jsem uprostřed „diskuse“ s kolegou o tom, jak nejlépe realizovat vrstvy dat v nové žádosti.

Jedním hlediskem je, že datová vrstva musí být vědomi podnikatelských objektů (naše vlastní třídy, které představují entitu), a musí být schopen pracovat s tímto objektem nativně.

Protilehlá hledisko je, že data vrstva by měla být objektově agnostik, a pouze pomocí jednoduchých datových typů (řetězce, bools, data, atd)

Vidím, že oba přístupy mohou být platný, ale můj vlastní názor je, že dávám přednost první. Tímto způsobem, pokud se změní médium pro ukládání dat, obchodní vrstva nemusí (nezbytně) muset změnit, aby se přizpůsobila nové datové vrstvy. Bylo by tedy triviální věc pro změnu z úložiště dat SQL na serializovaném obchodě xml souborového systému.

bod mého kolegy pohledu je, že datová vrstva by neměla mít vědět o definicích objektů, a to tak dlouho, dokud budou data předána o vhodně, to je dost.

Vím, že toto je jedna z těch otázek, které má potenciál začít náboženskou válku, ale ocenil bych jakoukoli zpětnou vazbu od komunity o tom, jak se budete blížit takové věci.

TIA

Položena 14/08/2008 v 11:23
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
5

To opravdu záleží na vašem pohledu na svět - jsem býval v odpojeném táboře. Dal byl jen tam dodávat data do BAL - konec příběhu.

Díky nové technologie, jako je LINQ to SQL a Entity Framework stává trochu více populární, pak je hranice mezi DAL a BAL byly rozmazané trochu. V L2S je především vaše DAL docela pevně spojen s obchodními objekty, jak objektový model má 1-1 mapování do databáze pole.

Stejně jako cokoli ve vývoji softwaru není správná nebo špatná odpověď. Musíte pochopit vaše požadavky a budoucí požadavky se a pracovat odtamtud. Já bych nic víc používat Ferrari na Dakhar rally jako bych Range Rover v den trati.

Odpovězeno 14/08/2008 v 11:38
zdroj uživatelem

hlasů
3

Můžete mít obojí. Nechť datová vrstva neznám Vaše podnikání objekty a dělat to schopný pracovat s více než jedním typem zdroje dat. Pokud zadáte společné rozhraní (nebo abstraktní třídu) pro interakci s daty, můžete mít různé implementace pro každý typ zdroje dat. Factory vzor pokračuje dobře.

Odpovězeno 14/08/2008 v 11:28
zdroj uživatelem

hlasů
1

Jeffrey Palermo napsal dobrý příspěvek o tom. Nazval ji Onion Architecture .

Odpovězeno 14/08/2008 v 11:30
zdroj uživatelem

hlasů
1

Vynikající kniha mám, který pokrývá toto téma, je přístup k datům vzory , podle Clifton Nock. Má mnoho dobrých vysvětlení a dobré nápady, jak oddělit své obchodní vrstvu z persistence vrstvy. Měli byste to zkusit. Je to jedna z mých nejoblíbenějších knih.

Odpovězeno 14/08/2008 v 11:27
zdroj uživatelem

hlasů
0

Starý příspěvek ale hledal podobné informace, které jsem narazil na to , která to vysvětluje pěkně.

Odpovězeno 11/10/2008 v 14:24
zdroj uživatelem

hlasů
0

V aplikacích, kde používáme NHibernate, odpověď bude „někde mezi“, v tom, že zatímco definice mapování XML (oni určit, které tabulka patří ke kterému objekt a sloupce, které patří ke kterému pole, atd) jsou jasně v obchodní objekt vrstvě ,

Jsou předány generické správce dat relace, která není vědom některého z obchodních objektů; jediným požadavkem je, že podnikatelské objekty, které jí byly pro CRUD mít soubor mapování.

Odpovězeno 14/08/2008 v 11:30
zdroj uživatelem

hlasů
0

Podívejte se na LINQ to SQL, když jsem se vytvořit novou aplikaci právě teď bych považoval spoléhat na zcela Linq založené datové vrstvy.

Jiné, než to myslím, že je dobrým zvykem de-pár údajů a logiku co nejvíce, ale to není vždy praktické. Čistý oddělení logických a přístup k datům značkám spojení a optimalizace obtížné, což je to, co dělá Linq tak silný.

Odpovězeno 14/08/2008 v 11:28
zdroj uživatelem

hlasů
0

Jeden trik jsem našel šikovný je mít moje datová vrstva bude „kolekce agnostik“. To znamená, že vždy, když chci vrátit seznam objektů z mé datové vrstvy, jsem si volající projít v seznamu. Takže toto místo:

public IList<Foo> GetFoosById(int id) { ... }

Dělám to:

public void GetFoosById(IList<Foo> foos, int id) { ... }

To mi umožňuje projít v obyčejném starém seznamu, jestli je to všechno, co potřebuji, nebo inteligentnější provádění IList <T> (jako ObservableCollection <T>), když jsem v úmyslu vázat se na něj z uživatelského rozhraní. Tato technika také umožňuje, abych se vrátit věci z metody jako ValidationResult obsahující chybovou zprávu, pokud nedošlo.

To stále znamená, že moje údaje vrstva ví o mých definic objektů, ale to mi dává navíc jeden stupeň flexibility.

Odpovězeno 14/08/2008 v 11:28
zdroj uživatelem

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