ä»æã®ããã€ãã®ã€ãã³ãã®ã«ã¬ã³ããŒã衚瀺ããå¿ èŠããããšæ³åããŠãã ããã ããã¯ããªãè€éãªèšèšã§ãã ã«ã¬ã³ããŒã«ã¯ãçŸåšã®æãšå¹Žã®ååã®èŠåºããææ¥ã®ååã®è¡ããããŠå®éã«ã¯ææ¥èªäœïŒå7æ¥éã®6è¡ïŒãå«ãŸããŠããå¿ èŠããããŸããããŒã¿ããŒã¹ããã ãŸããé±æ«ãšç¥æ¥ã¯ç¹å¥ãªæ¹æ³ã§ããŒã¯ããå¿ èŠããããšããŸãã ã€ãŸããæçµçã«ã¯æ¬¡ã®ããã«ãªããŸãã

çè«ã®ããã
ããããããã¹ãŠã®éçºè ã¯MVCã®èšèšãã¿ãŒã³ãšãã¢ããªã±ãŒã·ã§ã³ã3ã€ã®éšåïŒã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ãŒïŒã«åå²ãããšããæŠå¿µã«ç²ŸéããŠããŸãã
ã¢ãã«ã¯ãåãªãããŒã¿ïŒãµããžã§ã¯ããšãªã¢ã®ãªããžã§ã¯ããå€ãã®å Žåã¢ãã«ãšåŒã°ããŸãïŒãããã³ããããåŠçããããã€ãã®ããžãã¯ã«é¢é£ããããŒã¿ãšããŠç解ã§ããŸãã ïŒããŒã¿ã®ä¿åã¯ãç¬ç«ããç¬ç«ããã¬ã€ã€ãŒã«åé¢ããå¿ èŠããããŸããïŒã€ãŸããçæ³çã«ã¯ãããŒã¿ã®è¡šç€ºæ¹æ³ãšä¿åæ¹æ³ã«é¢ä¿ãªããååšãæ©èœããã¢ãã«ãçšæããŸãã
ããšãã°ããªã³ã©ã€ã³ã·ã§ããã³ã°ãæ€èšããŸãã å€ãã®å Žåããã®ãããªãããžã§ã¯ãã§ã¯ãããã³ããšã³ãã¯æ©èœå šäœã®ããäžéšããå æããããã®å€§éšåã¯æ³šæäŒèšã顧客ãšã®å¯Ÿè©±ãå庫äŒèšãåæãAPIãªã©ã®ããŸããŸãªç®¡çãµãã·ã¹ãã ã«éäžããŠããŸãã æããã«ãåäžã®äžè¬çãªã¢ãã«ã®ã³ã³ããã¹ãã§ã®ãã®ãããªãµãã·ã¹ãã ïŒå¶ç¶ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ãšããŠç°¡åã«å®è¡ã§ããïŒã®æ©èœã¯éåžžã«éèŠã§ãã ç¹å®ã®ããžã·ã§ã³ã®å€ã®èšç®ïŒçŸåšã®ããã¢ãŒã·ã§ã³ãå²åŒãèæ ®ã«å ¥ããïŒã泚æã®åèšé¡ãªã©ã®æ©èœã®å®è£ ã¯ããããžã§ã¯ãå šäœã§åãã§ãªããã°ãªããŸããã
å žåçãªãªã³ã©ã€ã³ã¹ãã¢ã®ã¡ã€ã³ããŒãžã玹ä»ããŸãããã ããããã«ããŽãªã®ãªã¹ããããã€ãã®äººæ°è£œåããã¥ãŒã¹ãªã©ã®å Žæãããã§ãããã ã€ãŸããããã§1ã€ã®ã¢ãã«ãªããžã§ã¯ãã®è¡šçŸã転éããã ãã§ã¯ååã§ã¯ãããŸããã ãã ãããã®ãããªè¡šçŸã衚瀺ããããã«å¿ èŠãªãªããžã§ã¯ãã®ã»ããã圢æããã«ã¯ãç¹å®ã®ããžãã¯ãå¿ èŠã«ãªããŸãã ã¯ãããããã®ãªããžã§ã¯ãã®ã»ããã¯ç°ãªãè¡šçŸã§é¡äŒŒããŠããå¯èœæ§ãããããããã®ãããªããžãã¯ãã³ã³ãããŒã©ãŒã«çŽæ¥é 眮ããã®ã¯ééã£ãŠããŸãã ïŒäžæ£ãªã³ãŒãã®2ã€ã®æãäžè¬çãªåé¡ã¯ãéè€ãšé·ãèãããªãã¡ãœããã§ããïŒãããããã®ããžãã¯ã¯ç¹å®ã®è¡šçŸãåç §ãããããã¢ãã«ã®äžéšã«ããããšã¯ã§ããŸããã ããã¯ãçš®ã®ã¢ãã«ãå©ãã«ãªãå Žæã§ãã
å®éããã¥ãŒã¢ãã«ïŒãã¬ãŒã³ããŒã·ã§ã³ã¢ãã«ãšåŒã¶æ¹ãæ£ããã§ãããïŒã¯ãç¹å®ã®ãã¥ãŒïŒãŸãã¯è€æ°ã®ãã¥ãŒïŒã«å¿ èŠãªãã¹ãŠã®ããŒã¿ã®ã»ãããã«ãã»ã«åããŸãã ãã¥ãŒãä»ã®ãã¥ãŒã§æ§æã§ããããã«ããã¥ãŒã¢ãã«ã¯ä»ã®ãã¥ãŒã¢ãã«ã§æ§æã§ããŸãã ãªã³ã©ã€ã³ã¹ãã¢ã®ã¡ã€ã³ããŒãžã®å Žåããã®ããŒãžã®å€èŠ³ã®ã¢ãã«ãå®çŸ©ã§ããŸããããã«ã¯ãã«ããŽãªã補åããã¥ãŒã¹ã®ã¿ã€ãã®ã¢ãã«ã»ãããå«ãŸããŸãã åæ§ã«ã補åã®ã¿ã€ãã®ã¢ãã«ã¯ãåçãã³ã¡ã³ããªã©ã®ã¿ã€ãã®ã¢ãã«ã§æ§æãããå ŽåããããŸãã ãããã®ãã¹ãŠã®ãã¥ãŒã¢ãã«ïŒããããããã¥ãŒããŒãžã¢ãã«ãé€ãïŒãåå©çšã§ããããšã¯æ³šç®ã«å€ããŸãã ãã ããããã¯ããããã®ãªããžã§ã¯ãã®ã°ã©ãå šäœã圢æããããžãã¯ãæã€å¿ èŠæ§ã®åé¡ã解決ãããã®ã§ã¯ãããŸãããããã¯ãäžèšã§èª¬æããããã«ãçŽæ¥ã³ã³ãããŒã©ã§ãããããæªãèãã§ãã
察å¿ããã¿ã€ãã®çš®ã¢ãã«ã®ãªããžã§ã¯ããçæããã¯ã©ã¹ã®äžŠåéå±€ã§ãããã¥ãŒã¢ãã«ãã«ããŒã¯ããã¥ãŒã¢ãã«ãåæåããããã®ã³ãŒããåé¢ããã³åå©çšããã®ã«çæ³çã§ãã 芪皮ã¢ãã«ã®ãã«ããŒã¯ãåçš®ã¢ãã«ã®ãã«ããŒã䜿çšããŠãå¿ èŠãªãã¹ãŠã®éå±€ãæ§ç¯ãããã§ãŒã³ã«æ²¿ã£ãŠäžããäžã«äºãã«åŒã³åºããŸãã åæåãã³ã³ãããŒã©ãŒããåãåã£ãå€ãèšå®ããã ãã®åé¡ã§ããåçŽãªãã¥ãŒã¢ãã«ã®å Žåããã«ããŒã®äœ¿çšã¯äžèŠã§é¢åã§ã-ãã®å Žåãéåžžã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§ååã§ãã
ããã§ãç·Žç¿ã«ç§»ãæã ãšæããŸãã
ç·Žç¿ãã
ç°¡åãªäŸãšããŠãã€ãã³ãã®ã«ã¬ã³ããŒã«æ»ããŸãããã ãŸããASP.NET MVCã«ç©ºã®Webã¢ããªã±ãŒã·ã§ã³ãæºåããŸãïŒASP.NET Coreã䜿çšããŠãæ°ãããã©ãããã©ãŒã ã®æ©èœãåæã«ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ããŸããããã®äŸã®ã³ã³ããã¹ãã§ã¯é¢ä¿ãããŸããïŒã å¯äžã®Calendarã¢ã¯ã·ã§ã³ãå«ãå¯äžã®DefaultControllerã³ã³ãããŒã©ãŒã«è¿œå ããŸã-ã«ã¬ã³ããŒã®è¡šç€ºãæ åœããŸãã 察å¿ãããã¥ãŒãè¿œå ããŸãïŒãããŸã§ã®ãšããã³ã³ãã³ãã¯ãããŸããïŒã ããã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšã空çœã®ããŒãžã衚瀺ãããŸãã ïŒèšäºã®æåŸã«ãGitHubã«æçš¿ãããå®æãããã¹ããããžã§ã¯ããžã®ãªã³ã¯ããããŸããïŒ
äžã§èŠãããã«ãå¿ èŠãªãã¹ãŠã®ããŒã¿ããã¥ãŒã«è»¢éããã«ã¯ãé©åãªãã¥ãŒã¢ãã«ãå¿ èŠã§ãã CalendarViewModelãšåŒã³ãŸãããã ïŒãããžã§ã¯ãã®ViewModelsãã©ã«ããŒã«ãã¥ãŒã¢ãã«ãé 眮ããŠãViewsãã©ã«ããŒã®æ§é ãç¹°ãè¿ãã®ã¯éåžžã«äŸ¿å©ã§ããåŸã§é©åãªã¹ã¯ãªãŒã³ã·ã§ãããæäŸããŸããïŒDateTimeåã®æãããªDateããããã£ãããã«è¿œå ããŸãã çŸåšã®æãšå¹Žã衚瀺ããããã«å¿ èŠã§ãã ããã«ããã次ã®ãããªã¯ã©ã¹ãçæãããŸãã
public class CalendarViewModel { public DateTime Date { get; set; } }
次ã«ããã¥ãŒã¢ãã«ã®ãã«ããŒãè¿œå ããŸãïŒå®éã«ã¯å¿ èŠãããŸããããåŸã§è¡šç€ºãããŸã-äºåã«è¡ããŸãïŒã
public class CalendarViewModelBuilder { public CalendarViewModel Build() { return new CalendarViewModel() { Date = DateTime.Now }; } }
ã芧ã®ãšããããã«ããŒã®Buildã¡ãœããã¯ãã©ã¡ãŒã¿ãŒãåãå ¥ãããCalendarViewModelã¯ã©ã¹ã®æ°ãããªããžã§ã¯ãïŒå®æãããã¥ãŒã¢ãã«ïŒãè¿ããŸãã
次ã«ãCalendarViewModelã¯ã©ã¹ãCalendarãã¥ãŒã®ãã¥ãŒã¢ãã«ãšããŠæå®ãããã®ãã¥ãŒã¢ãã«ããæãšå¹Žã®è¡šç€ºãè¿œå ããŸãã
@model AspNetCoreViewModels.ViewModels.Default.Calendar.CalendarViewModel <div class="calendar"> <div class="header"> @Model.Date.ToString("MMMM yyyy") </div> </div>
次ã«ãCalendarViewModelBuilderãã«ããŒã䜿çšããŠããã¥ãŒã¢ãã«ããã¥ãŒã«æž¡ããŸãã ã³ã³ãããŒã©ãŒã¯æ¬¡ã®åœ¢åŒã«ããå¿ èŠããããŸãã
public class DefaultController : Controller { public ActionResult Calendar() { return this.View(new CalendarViewModelBuilder().Build()); } }
ããã§ãã¢ããªã±ãŒã·ã§ã³ãåã³èµ·åã§ããŸããä»åã¯ããã§ã«äœãã衚瀺ãããŠããŸãïŒã¹ã¿ã€ã«ãå°ãå€æŽãããããå°æ¥ã®ã«ã¬ã³ããŒã«ã¯æ¢ã«ããã€ãã®ãã¶ã€ã³ããããŸãïŒã

次ã«ãææ¥ã®ååãå«ãè¡ãåºåããŸãã ããã¯éçãªæ å ±ã§ãããã©ãã§ãåå¥ã«äœ¿çšãããããšã¯ãªããããé©åãªããŒã¯ã¢ããããã¥ãŒã«çŽæ¥è¿œå ããã ãã§ãã 次ã®ããã«ãªããŸãã
@model AspNetCoreViewModels.ViewModels.Default.Calendar.CalendarViewModel <div class="calendar"> <div class="header"> @Model.Date.ToString("MMMM yyyy") </div> <table cellpadding="0" cellspacing="0"> <tr> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> <th></th> </tr> </table> </div>
ãã©ãŠã¶ã§ã¯ã次ã®ããã«ãªããŸãã

ä»ãæãèå³æ·±ãã®ã¿ãŒã³ãæ¥ãŸãã-æ¥ã®è¡šç€ºã ãããè¡ãã«ã¯ã_Dayã®åå¥ã®éšåãã¥ãŒãšããã®ããã®DayViewModelãã©ãŒã ã®ã¢ãã«ãè¿œå ããŸãã ïŒãããžã§ã¯ãã®å°æ¥ã§ã¯ãã«ã¬ã³ããŒã«é¢ä¿ãªããäºå®ãããã€ãã³ããå«ãæ¥ã衚瀺ããããšãã§ããŸããããšãã°ãä»æ¥ã®ã€ãã³ãã®å¥ã®ãããã¯ãšããŠãããã念é ã«çœ®ããŠãã ãããïŒ
ä»ã®ãšãããDateTimeåã®Dateããããã£ãDayViewModelã¯ã©ã¹ã«è¿œå ããboolåã®3ã€ã®ããããã£-IsNotCurrentMonthãIsWeekendOrHolidayãIsTodayãè¿œå ããŸãã
public class DayViewModel { public DateTime Date { get; set; } public bool IsNotCurrentMonth { get; set; } public bool IsWeekendOrHoliday { get; set; } public bool IsToday { get; set; } }
ä»åã®ãã«ããŒã®Buildã¡ãœããã¯ããã©ã¡ãŒã¿ãŒã1ã€åããŸã-æ¥ä»ïŒ
public class DayViewModelBuilder { public DayViewModel Build(DateTime date) { return new DayViewModel() { Date = date, IsNotCurrentMonth = date.Month != DateTime.Now.Month, IsWeekendOrHoliday = date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday, IsToday = date.Date == DateTime.Now.Date }; } }
ã芧ã®ãšããããã«ããŒã¯ãã¥ãŒã¢ãã«ã®ãã¹ãŠã®ããããã£ãåæåããŸãã IsNotCurrentMonthãã©ã°ã¯ãæ¥ãçŸåšã®æã®å€ã«ãããã©ããïŒã°ã¬ãŒã§åŒ·èª¿è¡šç€ºã§ããããã«ããããïŒã決å®ããŸãã IsWeekendOrHolidayã®ã»ããã¯ããã®æ¥ãé±æ«ãŸãã¯äŒæ¥ã§ãããIsToday-ä»æ¥ã§ããããšãæå³ããŸãïŒãããã£ãŠããã®ãããªæ¥ãèµ€ãŸãã¯ç·ã§åŒ·èª¿è¡šç€ºããŸãïŒã
éšåçãª_Dayãã¥ãŒã¯æ¬¡ã®ããã«ãªããŸãïŒãã®éšåçãªãã¥ãŒãã«ã¬ã³ããŒãšã¯å¥ã«äœ¿çšã§ããããã«ãããã§ã¯tdã¿ã°ãç¹ã«äœ¿çšããŠããŸããïŒã
<div class="day @(this.Model.IsNotCurrentMonth ? "not-current-month" : null) @(this.Model.IsWeekendOrHoliday ? "weekend-or-holiday" : null) @(this.Model.IsToday ? "today" : null)"> <div class="date"> @Model.Date.Day.ToString("00") </div> </div>
察å¿ããCSSã¯ã©ã¹ã¯ãIsNotCurrentMonthãIsWeekendOrHolidayãããã³IsTodayããããã£ã®å€ã«å¿ããŠèšå®ãããŸãã
ã«ã¬ã³ããŒãã¥ãŒã¢ãã«ã«æ¥è¡šç€ºã¢ãã«ã®ã»ãããè¿œå ããã«ã¬ã³ããŒãã¥ãŒã¢ãã«ãã«ããŒã§ãã®ã»ãããåæåããããšã¯æ®ããŸãã
ã©ã®ããžãã¯ããã¥ãŒã¢ãã«ãã«ããŒã«æãããå®è£ ãããã©ã®ããžãã¯ããã¥ãŒã«çŽæ¥ããããèããå Žåãç°¡åãªãã¹ãã®çµæããé²ããå¿ èŠããããŸãããã¥ãŒã眮ãæããå¿ èŠãããå Žåããã®ããžãã¯ãå床è€è£œããå¿ èŠããããŸããïŒ ãã®å Žåããã¥ãŒã¢ãã«ãã«ããŒã«ããžãã¯ãé 眮ããå¿ èŠããããŸãã ããã§ãªãå Žåã¯ããã¥ãŒã§çŽæ¥ïŒããã¯ãã³ãŒããããŸãã«ãå ·äœçã§ãããç¹å®ã®è¡šç€ºæ¹æ³ã«ã®ã¿é©çšãããããšãæå³ããŸãïŒã ããžãã¯ãæ¬åœã«èšå€§ãªãã®ãæå³ããå Žåãããããæè¯ã®è§£æ±ºçã¯ãç¹å®ã®è¡šçŸã®è¿œå ã®ãã¥ãŒã¢ãã«ãäœæãããã®ããžãã¯ããã®ãã«ããŒã®Buildã¡ãœããã«è»¢éããããšã§ãã ãã®å Žåãæ¥ã42èŠçŽ ã®é åïŒå7æ¥éã®6è¡ïŒãšããŠè¡šãããšãã§ããŸããããã®å Žåãã«ã¬ã³ããŒãã¥ãŒã§ã¯ããã®é åãæååã«åå²ããããžãã¯ãå¿ èŠã§ãã ãããã£ãŠãé åãããã«2次å ã«ããæ¹ãé©åãªå ŽåããããŸãïŒå°æ¥ãè¡šãšã¯äœããã®æ¹æ³ã§æ¥ã衚瀺ããå¿ èŠããããšä»®å®ããªãéãïŒã
public class CalendarViewModel { public DateTime Date { get; set; } public DayViewModel[,] Days { get; set; } }
ãã®ãã¥ãŒã¢ãã«ã®ãã«ããŒã®Buildã¡ãœããã¯ãã»ãŒæ¬¡ã®ããžãã¯ã§è£å®ã§ããããã«ãªããŸããã
DayViewModel[,] days = new DayViewModel[6,7]; DateTime date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); int offset = (int)date.DayOfWeek; if (offset == 0) offset = 7; offset--; date = date.AddDays(offset * -1); for (int i = 0; i != 6; i++) { for (int j = 0; j != 7; j++) { days[i, j] = new DayViewModelBuilder().Build(date); date = date.AddDays(1); } }
ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããäœãèµ·ãã£ããã確èªããŸã

ã»ãŒå®äºã ããã§ã¯ãã€ãã³ãã«å¯ŸåŠããŸãããã ãŸããã¢ãã«ã«Eventã¯ã©ã¹ãè¿œå ããå¿ èŠããããŸãã
public class Event { public int Id { get; set; } public DateTime Date { get; set; } public string Name { get; set; } }
次ã«ãããã€ãã®åœã®ããŒã¿ã¢ã¯ã»ã¹ã¬ã€ã€ãŒãè¿œå ããŸããå®éã«ã¯ãæå®ãããæ¥ä»ã«å¯ŸããŠäºåã«å®çŸ©ããããªããžã§ã¯ããè¿ãã ãã§ãã ããã«ã€ããŠã¯è©³ãã説æããŸãããããã®å®è£ ïŒäœæ¥åäœãšãªããžããªãã³ãã¬ãŒããæãåçŽãªåœ¢åŒã§äœ¿çš+çµã¿èŸŒã¿ã®ASP.NET Core DIã䜿çšïŒã¯ãã¹ããããžã§ã¯ãã§èŠãããšãã§ããŸãã
EventViewModelãã¥ãŒã®ã¢ãã«ããã®ãã«ããŒãããã³_Eventã®éšåãã¥ãŒãããã«è¿œå ããŸãã
EventViewModelã¯ã©ã¹ïŒ
public class EventViewModel { public DateTime Date { get; set; } public string Name { get; set; } }
EventViewModelBuilderã¯ã©ã¹ã®ãã«ãã¡ãœããïŒ
public EventViewModel Build(Event @event) { return new EventViewModel() { Date = @event.Date, Name = @event.Name }; }
ã芧ã®ãšããããã®å Žåããã¥ãŒã¢ãã«ã®ããããã£ã»ããã¯ã¢ãã«ããããã£ã®ã»ãããšã»ãŒåãã§ãããããããã¯ã©ã¹ã®åããããã£ãå¥ã®ã¯ã©ã¹ã®ããããã£ã«æåã§æ圱ããªãããã«ããã«ã¯ã AutoMapperãªã©ã䜿çšããå¿ èŠããããŸãã
_Eventã®éšåãã¥ãŒïŒ
@model AspNetCoreViewModels.ViewModels.Shared.EventViewModel <div class="event"> @Model.Date.ToString("HH:mm")<br /> @Model.Name </div>
æããã«ããããã¯ãã¹ãŠãæ¥ãã«ã¬ã³ããŒã«é¢ä¿ãªãåå©çšã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãå®äºããã«ã¯ãIEnumerableåã®Eventsããããã£ãDayViewModelã¯ã©ã¹ã«è¿œå ããæ¥ãã¥ãŒã¢ãã«ã®ãã«ããŒã§åæåããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãäœæ¥åäœãã³ãã¬ãŒãã®å®è£ ã§è¡šãããããŒã¿ã¢ã¯ã»ã¹ã¬ã€ã€ãŒã«ã¢ã¯ã»ã¹ã§ããããã«ããæ¥ãã¥ãŒã¢ãã«ãã«ããŒãå¿ èŠã§ãã ãã§ã«å€§ããªèšäºãæ¡å€§ããªãããã«ãããã§ã¯è©³çŽ°ã«è§ŠããŸããã èŠããã«ãã³ã³ãããŒã©ãŒãžã®åäžã®èŠæ±å ã®ããŒã¿ã¢ã¯ã»ã¹å±€ãžã®ãã¹ãŠã®ã¢ã¯ã»ã¹ã¯ãäœæ¥åäœã®ã¯ã©ã¹ã®åäžã€ã³ã¹ã¿ã³ã¹ã®ã³ã³ããã¹ãã§çºçããå¿ èŠããããŸãã ã€ãŸãããã®ãããªã€ã³ã¹ã¿ã³ã¹ã¯ãã³ã³ãããŒã©ãŒãªããžã§ã¯ããäœæããããšãã«ïŒããšãã°ãDIã䜿çšããŠïŒäœæããããã§ãŒã³å ã®ãã¹ãŠã®ãã¥ãŒã¢ãã«ãã«ããŒã«è»¢éãããå¿ èŠããããŸãã ããã§ãå¥ã®æœè±¡ã¯ã©ã¹ViewModelBuilderBaseãè¿œå ããŸããããã®ã³ã³ã¹ãã©ã¯ã¿ã¯ãã³ã³ã¹ãã©ã¯ã¿ãIStorageåã®ã¹ãã¬ãŒãžåŒæ°ã1ã€åãåãããã¹ãŠã®åå«ãã¢ã¯ã»ã¹ã§ããããã«ä¿è·ãããå€æ°ã«æ ŒçŽããŸãã Eventsããããã£ãåæåããããšã§ãDayViewModelBuilderã¯ã©ã¹ã®Buildã¡ãœãããè£è¶³ã§ããããã«ãªããŸããã
Events = this.Storage.EventRepository.FilteredByDate(date).Select( e => new EventViewModelBuilder(this.Storage).Build(e) )
ã芧ã®ãšãããEventRepositoryãªããžããªã«ç®ãåããFilteredByDateã¡ãœããã䜿çšããŠç¹å®ã®æ¥ä»ã®ãã¹ãŠã®ã€ãã³ããéžæããŠãããLINQ Selectã¡ãœãããšEventViewModelBuilderãã«ããŒã䜿çšããŠãåã€ãã³ãã¢ãã«ãªããžã§ã¯ããEventViewModelã¢ãã«ã®ãªããžã§ã¯ãã«æ圱ããŸãã
ã€ãã³ãã®åºåãéšåçãª_Dayãã¥ãŒã«è¿œå ãããšãã¢ããªã±ãŒã·ã§ã³ã®æºåãæŽãããããèµ·åããããšã§æåã®ã¹ã¯ãªãŒã³ã·ã§ããã«è¡šç€ºãããŠãããã®ãååŸã§ããŸãã
<div class="events"> @foreach (var @event in this.Model.Events) { @Html.Partial("_Event", @event) } </div>
以äžã§ãã ãããžã§ã¯ãã®æçµæ§é ïŒ

ãããã«
ãã®ãããžã§ã¯ããGitHubã«æçš¿ããŠãã©ã€ãã§èŠèŽã§ããããã«ããŸããã ç¹°ãè¿ããŸãããASP.NET Coreã«å®è£ ãããŠããŸãã ããã§ã¯ãå®è¡ã«å¿ èŠãªãã¹ãŠãèŠã€ããããšãã§ããŸãã
ãã®ã¢ãããŒãã®æ¬è³ªã説æãããããå®è£ ããç°¡åãªæ¹æ³ã瀺ãããšãã§ãããšæããŸãã ãã¥ãŒã¢ãã«ã䜿çšããŠãã©ãŒã ã衚瀺ããããšã«ã€ããŠã¯äœãèšåããŸããã§ããããããã¯ããã»ã©äžè¬çãªäœ¿çšäŸã§ã¯ãããŸããã èå³æ·±ãå Žåã¯ã次ã®èšäºã§èª¬æã§ããŸãã ãããããããŒã¿ããŒã¹ãã䜿çšããŠããããããã®äŸã¯ããŸãã«ãæ··ä¹±ããŠããããã«èŠããŸãããããã®åŽé¢ã«ã€ããŠã¯ç¢ºãã«è§ŠããããšæããŸãã äžè¬çã«ãããªãã®æ³šæã«æè¬ããŸãããããŠãç§ã¯æ¹å€ãèããŠããããã§ãïŒ