Project Silk ã¨ã EFMVC ã¨ã Maintainable MVC Series ãèªãã§ãã¨ãã©ããã¢ãã«ãé常ã«åããã§ãããã ãããµã³ãã«ã³ã¼ãã§ãããã㪠EF ã® DB Model ãç´æ¥ View ã«æµãè¾¼ããããªä½ãæ¹ã¯ä½¿ããã¦ããªãããã§ããã
ããã¦ã仿 MVVM Framework ã® Livet ä½è ã§ MVVM ãã¿ã¼ã³ã®ãããã§ãã·ã§ãã«ã§ããå°¾ä¸ããã ASP.NET MVC ãå¦ãã§ããã¨ã®æ å ±ãå ¥ã£ã¦ãã¾ããã
ããã http://t.co/6BVBUCSh MVCï¼
— å°¾ä¸ é
å (@ugaya40) 2011, 12æ 29
èªåã¨ãã¦ãã¢ãã«ã®ä½ãæ¹ã§æ©ãã§ãé¨åãããã®ã§ããããæ©ã«ã¡ãã£ã¨ã¾ã¨ãã¦ã¿ãããã¨æãã¾ãããå¹´æ«ã«æ¼ã¾ã§å¯ã¦ã²ã¼ã 䏿§ã¨ã人éã¨ãã¦ãã¡ãããã®ã§ã
ã¨ãããã ASP.NET MVC ã® M,V,C ã«ã¤ãã¦å³ãä½ãã¾ãããç¢å°ã®åãã«é¢ãã¦ã¯ SmartArt ã®ä½¿ãæ¹ãããããããªãã£ãã®ã§ããããç¹ãããã¾ãã
ããããªã¨ããã§ä½åãè¨ã£ã¦ãã¨ã¯æãã¾ãããASP.NET MVC ã§ã¯ M ã®ãµãã¼ãã¯ããã¾ãããSystem.Web.Mvc ã«å«ã¾ãã¦ããã®ã¯ Controller 㨠View å¨ãã ãã§ãã
ã¨ãããã¨ã¯ã¢ãã«é¨å㯠Entity Framework ã§ã NHibernate ã§ãèªç±ã«é¸æãã¦ããã¨ããã¹ã¿ã³ã¹ã§ããå®éã®ã¨ãã㯠.NET Framework 4 ã«å«ã¾ãã¦ãã LINQ to SQL ã NuGet ãªã©ã§åä½é å¸ããã¦ãã Entity Framework 4.1 ã«ãªããã¨æãã¾ãããåºæ¬çã«ã¯ä¸¡æ¹ã¨ã ORM ãªã®ã§ã¢ãã«ã®éè¦ãªé¨åã¯èªåã§ä½ãå¿ è¦ãåºã¦ããããã§ãã
MSDN ãã¬ã¸ã³ã® ドメイン モデル パターンを使用する ã«åºã¦ããå³ãåãããããããããã¾ããã
ã¾ãã¯ç¾ç¶ã® ASP.NET MVC ã§ãã使ããã¦ããæ§é 㨠EFMVC, Project Silk ã®æ§é ã«é¢ãã¦ã¾ã¨ãã¦ã¿ã¾ãããèªåã®çè§£ãééã£ã¦ããã¨ããã¯ããããã»ã»ã»ã
ã¹ãã£ãã©ã¼ã«ãã£ã³ã°ã®å ´å
ASP.NET MVC 3 Tools Update ã®ã¹ãã£ãã©ã¼ã«ãã£ã³ã°ã§ã¯ãã³ã³ããã¼ã©ã®ã¡ã³ãã¨ã㦠DbContext ãæã¤ãããªã³ã¼ããçæããã¾ããã¢ãã«ã¯é常ã«èãã§ãããDB Entities ã View ã«æ¸¡ãå½¢ã«ãªãã®ã§ãçµåãã¡ãã£ã¨å¼·ãããæãã§ãã
ã¢ã¯ã·ã§ã³ã«ç´æ¥ LINQ ã§ãã¼ã¿ãåå¾ããã³ã¼ããæ¸ããããã¾ãã®ã§ããã¹ã¿ããªãã£ãèããã¨é常ã«ãããããªãã§ããå°è¦æ¨¡ã®ãµã¼ãã¹ãªããã®ç¨åº¦ã§ãããããããã¾ãããâ¦ã
ãªãã¸ããªãã¿ã¼ã³ã®å ´å
æè¿ã®ãµã³ãã«ã³ã¼ãã§ã¯ãªãã¸ããªãã¿ã¼ã³ãé©ç¨ãã¦ãããã®ãå¤ãã§ããç§ãæ¸ãã ASP.NET MVC 3 開発入門 - インデックス - しばやん雑記 ã§ããªãã¸ããªãã¿ã¼ã³ã使ã£ã¦å®è£ ãã¦ãã¾ãã
å°ãã ãã¢ãã«ã¯åããªãã¾ããããå®éã®ã¨ãã㯠DbContext 㨠LINQ ã§ã®ã¯ã¨ãªãé è½ããã¦ããã ãã§ãã
DbContext ãç´æ¥æããã«ãã³ã³ããã¼ã©ã®ã³ã³ã¹ãã©ã¯ã¿ã§ãªãã¸ããªã®ã¤ã³ã¹ã¿ã³ã¹ãåãåãã®ãä¸è¬çã§ãããµã³ãã«ã³ã¼ãã¨ãã¦ã¯ä»¥ä¸ã®è¨äºãåç §ãã¦ãã ããã
ASP.NET MVC 3 開発入門 (4) - リポジトリパターンを適用する - しばやん雑記
ASP.NET MVC 3 開発入門 (6) - コントローラの実装 - しばやん雑記
EFMVC ã®å ´å
ãªãã¸ããªãã¿ã¼ã³ãåç´ã«é©ç¨ããå ´åããããã¡ã¤ã³ã¢ãã«ãå¢ããåã ãã¢ãã«ã¯åããªã£ã¦ãã¾ããç¹å¾´çãªã®ã¯ Command Query Responsibility Segregation (CQRS) ããã¡ã¤ã³ã¢ãã«ã«ä½¿ã£ã¦ãããã¨ã§ãã*1
CQRS ã«ã¤ãã¦ã¯ MSDN ãã¬ã¸ã³ã«è¨äºãããã¾ããMSDN マガジン: Windows Azure 開発 - Windows Azure での CQRS
ã¢ã¯ã·ã§ã³ã§ã¯ Command ã使 -> CommandBus ã§ã³ãã³ãå®è¡ã¨ããå¦çãè¡ã£ã¦ãã¾ããå°ãã³ã¼ããå¼ç¨ãã¦ã¿ã¾ãã
var command = new CreateOrUpdateCategoryCommand(form.CategoryId, form.Name, form.Description); IEnumerable<ValidationResult> errors = commandBus.Validate(command); ModelState.AddModelErrors(errors); if (ModelState.IsValid) { var result = commandBus.Submit(command); if (result.Success) return RedirectToAction("Index"); }
ã³ãã³ããçµç±ãããã¨ã§ãã¢ãã«å¨ããçµæ§ç¶ºéºã§ãããã¡ãªã¿ã« CommandBus 㯠Dependency Injection ã使ã£ã¦ãã³ã³ã¹ãã©ã¯ã¿ã§åãåãããã«ãªã£ã¦ã¾ãã
CommandBus ã§ã¯ Submit ãããã³ãã³ãã«å¯¾å¿ãã Handler ã DI ã§åå¾ãã¦å®è¡ãã¾ãã
Project Silk ã®å ´å
Project Silk ã EFMVC ã®ããã«ãã¡ã¤ã³ã¢ãã«ãããããã¢ãã«ã¯åããªã£ã¦ãã¾ãããCommands ã¯æ¡ç¨ãã¦ãã¾ããã
EFMVC ã¨åæ§ã« Project Silk ã§ãå ¨ä½çã« Dependency Injection ã使ã£ã¦ãã¾ããã¢ã¯ã·ã§ã³ã§ã¯ Using ã¡ã½ããã使ããHandlers ã®ã¤ã³ã¹ã¿ã³ã¹ãåå¾ãã¦å¼ã³åºãå½¢ã«ãªã£ã¦ãã¾ãã
var vehicles = Using<GetVehicleListForUser>() .Execute(CurrentUserId); AddYearMakeModelSelectListsToViewBag(); var vm = new VehicleAddViewModel { User = CurrentUser, Vehicle = new VehicleFormModel(), VehiclesList = new VehicleListViewModel(vehicles) { IsCollapsed = true }, }; vm.VehiclesList.IsCollapsed = true; return View(vm);
Project Silk ã® Handlers 㯠EFMVC ã® Commands / Handlers ãåããããã®ã¨æã£ã¦ããã£ã¦åé¡ãªãã¨æãã¾ãããã£ã¡ã®æ¹ãã·ã³ãã«ãªä½ãã§ããã
åºæ¬çã« EFMVC 㨠Project Silk ã§ã¯ãã¸ãã¹ãã¸ãã¯ãå ¨åã§ãã¡ã¤ã³ã¢ãã«ã«å ¥ããããã«ãã¦ãã¾ããã¾ããã¡ã¤ã³ã¢ãã«ãªã®ã§å½ç¶ãªã®ã§ãããã¢ã¯ã·ã§ã³ã§ã®å¦çã¯æå°éã¨ãªã£ã¦ããã®ã§ãã¢ãã«ã¨ã¯éã«èããªã£ã¦ãã¾ãã
ãã®ããã«ã¢ãã«é¨åã®ä½ãæ¹ã«é¢ãã¦ã¯ãããããªèãæ¹ããããå®éã¯ã±ã¼ã¹ãã¤ã±ã¼ã¹ã§ä½¿ã£ã¦ããã°ããã¨æãã®ã§ãããä¸è¬çãªãµã³ãã«ã³ã¼ãã§ã¯é å¼µã£ã¦ãªãã¸ããªãã¿ã¼ã³ã¨ããç¶æ³ã§ããããã¡ãã£ã¨ãã¡ã¤ã³ã¢ãã«ã®ãã¨ãèãã¦ããããã§ãã
ã¾ãã¯èªåãåå¼·ã¨ããã»ã»ã»ãä»ãåå¼·ä¸ã»ã»ã»ã
*1:CQRS ã ã¨æãã¾ããå¤åâ¦ã