Zdravím, řeším jak rozvrhnout architekturu ASP.NET MVC aplikace a nějak se nemůžu dopátrat správného konce: 1.) ASP.NET MVC projekt má závislost pouze na jednom jediném projektu (říkejme mu třeba BusinessLayer), který skrz nějaké repository vrací do UI modely, které jsou 1:1 ke konkrétní stránce. Nic víc. 2.) BusinessLayer je projekt, který pracuje s daty, provádí nad nimi potřebné operace a vrací do UI naplněný model. Sám si tahá data z poslední vrstvy, které říkám DataLayer. 3.) DataLayer je vrstva nejnižší úrovně, který je vlastně EF Code First. Co se nemůžu rozhodnout, tak jak vyřešit získávání dat z DataLayer (nejnižší vrstvy) v rámci BusinessLayer. Vidím dvě možnosti: A) v DataLayer mám generický context, který vystavuje Linq rozhraní, skrz které se mohu dotazovat do databáze přímo v BusinessLayer, kde se dotážu pro data, poskládám si je a vrátím model do UI. B) v DataLayer mám generický context, který ale nevystavím. Místo toho jej pro každou entitu podědím a do BusinessLayer vystavím pouze tyto repository, ve kterých budu mít přichystány už konkrétní metody typu: GetOrdersForLastMonth(). Řekl bych, že metoda B je výrazně čistší, ale znamená více práce a ve výsledku to vede k tomu, že pro každou entitu musím vytvářet (a registrovat v IoC) vlastní repository, ve kterém jsou dvě tři metody. Díky za Váš pohled na věc.
|