Objekt z datove vrstvy   otázka

.NET Tips

Dobrý den, chtěl zeptat na správný postup. Když rozdělím aplikaci do 3 vrstev DL, BL, UI a datovou vrstvu mám v EF code first, jak dostanu objekt z DL do UI, třeba List<Users>. Pokud přidám referenci DL do UI, tak to sice v pohodě dostanu přes BL až do UI, ale co jsem vygooglil tak to asi není dobře. Pokud tam tu referenci nepřidám, tak se mi zas v BL duplikuje kód z DL v definicích jednotlivých tříd. Předpokládám, že správně bude nějaký třetí způsob. Díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jeden ze správných postupů (asi ne jediný, ale zaleží na scénáři a zvolené architektuře aplikace) by mohl být asi následující:

1) V DL máte objekt UserEntity (nebo User z namespace něco.Entities) což je objekt odpovídající tabulce v DB pro EF code first. Pomoci něho DL přistupuje na data.

2) V BL máte (v tomto případě asi poměrně jednoduchý) model/"business objekt" User (nebo User z namespace něco.Models) což je model pro prezentační vrstvu. BL vrstva bude mít např. nějakou metodu, která zavolá DL vracející IEnumerable<UserEntity>, každé UserEntity předělá na User a vrátí IEnumerable<User>.

3) UI o DL neví, potřebuje znát pouze User.

User a UserEntity se liší například v tom, že obsahuje dotažené údaje z jiných tabulek, "složeniny" (jako FullName), jiné odvozené údaje apod. Naopak již neobsahuje reference na jiné Entity.

Toto je příklad jednoduchého případu, ale u složitějších případů se úplně normálně může stát, že model a zdrojová entita/entity si vůbec neodpovídají a ty objekty těchto dvou vrstev jsou úplně různé.

Také se koukněte na tuto diskuzi, ve které se řešila volba vrstev aplikace:

http://www.dotnetportal.cz/forum/tema/26...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback