Ahojte, pokusim sa popisat problem s ktorym sa uz nejaky cas trapim.
Vyvijam aplikaciu (v ramci nejakeho samostudia) ktora by raz mala byt e-shopom. Aktualne pouzivam MVC 5 a EF 6, ale EF 6 chcem nahradit Dapperom. Koncept maleho ORM ma zaujal viac ako EF, navyse je vykonnejsi. V zasade to asi nie je podstatne.
Ide mi o to, ze by som chcel izolovat DAL vrstvu od BLL vrstvy. Aktualne su zlepene a pre ucely projektu to nie je neprekonatelny problem, ale chcem to urobit spravne. Momentalne to vyzera tak, ze mam nejake DB modely do ktorych EF mapuje data z DB. Tie sa nasledne preklopia do Biz modelov ktore maju identicku strukturu, co je mozno zbytocne, ale do buducna sa pocita aj s nejakou logikou (no vlastne skor dufam, ze tomu neskor dam nejaky vyznam).
Co by som ale chcel docielit je, ze az sa teraz rozhodnem vymenit EF za Dapper, alebo inu DAL vrstvu, malo by to ist hladko a bezbolestne. Moja predstava je taka, ze vytvorim interface (zrejme viac), alebo nejaku abstraktnu classu ktora bude obsahovat metody pre pracu s DB (create, update, delete ... ). Nova DAL vrtsva bude mat nejaku Provider/Service/Facade class ktora bude dedit od tohto "interface" a tiez ju bude implementovat.
Jediny problem aktualne vidim v objektoch/modeloch/entitach. Co by vlastne DAL mala vracat, co by mala prijimat ako parametre atd. Povedzme, ze mam metodu
public List<nieco> GetProducts();
ide mi o to, ze by asi nemala vracat objekty ktore pouziva EF. Druha moznost je, ze by mohla rovno vracat nejake BizModely, ale tym padom by DAL musela referencovat BLL a nie som si isty, ze je to spravne. Ina moznost je, ze by som BIZ modely vlozil do samostatnej DLL a pouzival ich v DAL a BLL. Asi najspravnejsie je pouzit nejake rozhranie, cize nieco ako:
public List<IProduct> GetProducts();
definovane zase mozno idealne v samostatnej dll. Tu mi ale vadi, ze tie interface zase neviem napisat, pretoze konkretne Product ma vacsie mnozstvo properties a z toho by vznikali velke rozhrania a to asi tiez mozno nie je najlepsi pristup.
Ospravedlnujem sa, mozno sa pytam hlupo, ale niekto snad pochopi o co mi ide a trochu mi s tym pomoze. Dost by som to ocenil. Vdaka :)