+ All Categories
Home > Software > Entity Framework v enterprise aplikacích

Entity Framework v enterprise aplikacích

Date post: 09-Jan-2017
Category:
Upload: profinit
View: 223 times
Download: 4 times
Share this document with a friend
13
© 2015 Profinit. All rights reserved. Entity Framework v enterprise aplikacích Tomáš Vichta 28. 11. 2015
Transcript
Page 1: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

Entity Frameworkv enterprise aplikacíchTomáš Vichta 28. 11. 2015

Page 2: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

2

Entity Frameworkv enterprise aplikacícho Design vzorové aplikace

o Automapper

o CRUD

o DbContext

Page 3: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

3

Entity Frameworkv enterprise aplikacícho Cílový projekt

– Menší až střední datově orientovaná webová aplikace– Převážně atomické CRUD operace (Create, Read, Update, Delete)

• Konfigurační nástroje, reporty, jednoduché datové vazby– Zjednodušený CQRS pattern (Command Query Responsibility Segregation)

• a přizpůsobený pro použití s EF– Společné sdílené komponenty– Celkem silná vazba na EF

• může být nevýhoda• šlo by vylepšit, ale za cenu vyšší složitosti

– Logiku pro specifické operace (jiné než klasický CRUD/CQRS) může být vhodnější implementovat paralelně vedle, samostatně

• Je pak k diskuzi, zda komplikovat aplikaci 2 odlišnými přístupy pro práci s daty, nebo to celé navrhnout jinak a jednotně.

Page 4: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

Datové objekty a aplikační vrstvy

Page 5: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

AutoMapper

o nuget balíček AutoMapper, http://automapper.org/

o Automatické mapování mezi datovým objekty (Entity, Dto objekty, View models, …)

o Podpora EF Linq, Expressions (AutoMapper.QueryableExtensions)

o Lze integrovat s Dependency Injection frameworky

o Podpora pokročilých funkcí (custom mapování)

o Podpora mapování collections

Page 6: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

6

CRUDQueries – zobrazení dat

Page 7: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

7

CRUDModifikace dat

Page 8: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

8

Datové objekty

o Datové objekty mají vždy primární klíč: Int32 Id– Toto omezení může někdy vadit, pro CRUD je to tak ale obvykle OK– Často to takto vyžadují GUI komponenty (např. Telerik Kendo grid)

o EF entity, BusinessDto a ViewModel objekty– BusinessDto nebo i EF entitu lze poslat až na UI vrstvu– zanášíme tím ale závislost na nižších vrstvách– pro jednoduché scénáře lze akceptovat– správně – samostatné ViewModel objekty pro Create, Update, i Delete

• designově OK, ale přidělává to práci• často se používá jediný objekt (přímo EF entita) pro celý CRUD – spíš nedoporučuji, ale

záleží na typu a velikosti projektu

Page 9: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

9

Design obecně

o Create/Update/Delete operace– I Update by šel udělat genericky, ale takto je to bezpečnější– Nenačítáme entitu před update/delete, protože to není třeba

• Při editaci 1 entity by to typicky nevadilo, problém při editaci mnoha entit najednou

o CrudFacade– Šlo by to i bez Facade, možná by to bylo i designově čistější

o Dependency Injection– Standard a základ– Co nejméně kombinovat se singletony, statickými třídami a ručně vytvářenými objekty

• Problém obecně u Atributů, MVC - Razor helpery, atd.

o Zapouzdření– pouze "hlavní" interfaces a datové objekty jsou public– Třídy v Business vrstvě internal– MVC Controllers a další MVC komponenty ve WebUI musí být public

• vlastnost MVC a .NET - např. runtime kompilace Views v samostatné app. doméně

Page 10: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

10

DbContext

o Lifecycle– Unit of work – ale jak velkou tu Unit of work uděláme?– PerWebRequest – častý kompromis– Alternativně lze doporučit menší scope: per-facade, per-operation– Pokud váháte, dělejte spíš menší scope, než větší – EF má problémy, když projde

ChangeTrackerem stovky a více entit.

o Dependency Injection– Objekt jako každý jiný – proč jej neřídit pomocí DI?– Umožní injectovat závislosti, viz. příklad:

• IDateTimeFacade• Pro automatické nastavování CreatedAt, ModifiedAt, DeletedAt• Pro testy složitých integrací – možnost uměle posunout čas pomocí testovací implementace• Opatrně potom na používání času na DB serveru – GETDATE(), ….

• IAuthenticationService – pro automatické nastavování CreatedBy, ModifiedBy, DeletedBy

o Definovat vlastní repository na DbContextem?

Page 11: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

Diskuze

Page 12: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

Díky za pozornost• 1

Page 13: Entity Framework v enterprise aplikacích

© 2015 Profinit. All rights reserved.

Profinit, s.r.o., Tychonova 2, 160 00 Praha 6, +420 224 316 016, www.profinit.eu

Společnost PROFINIT je členem nadnárodní skupiny New Frontier Group, která je leadrem v oblasti digitální transformace organizací a firem ve střední a východní Evropě. S více než 2000 zaměstnanci v 17 zemích patří mezi deset největších poskytovatelů ICT služeb v celém CEE regionu a řadí se ke špičce v oblasti vývoje software na zakázku, data managementu, datových skladů a business intelligence.

PROFINIT má řadu významných zákazníků z finančního a telekomunikačního sektoru, utilit a státní správy. Společnost se primárně zaměřuje na konzultační služby v oblasti digitální transformace, technologické služby a outsourcing. Podle údajů IDC (2012) patří PROFINIT mezi 5 největších firem v oblasti vývoje software na zakázku v České Republice a je držitelem řady dalších ocenění.

Shaping future, delivering results!


Recommended