1 回答

TA貢獻1834條經驗 獲得超8個贊
我將假設您使用的是 Web Api,但同樣的原則也適用于 MVC 應用程序。我通常有一個映射器層,它接受一個域對象并將其映射到視圖模型或 dto。這樣,您可以在任何時候想要返回相同的視圖模型時重用映射器。因此,如果您對視圖模型進行更改,它都位于一個地方。
請參閱下面的代碼以回答問題 1。
問題 2:為什么您的 mircoservice 關心客戶想要的日期。如果您發回 utc 日期,那么如果客戶想要它的格式,那么由他們來格式化。
//Fake view model
public class CalendarEventViewModel
{
public int EventId { get; set; }
public string Title { get; set; }
public DateTime? StartDateTimeUtc { get; set; }
public DateTime? EndDateTimeUtc { get; set; }
public string Summary { get; set; }
public bool IsApproved { get; set; }
public string TimeZoneId { get; set; }
}
public interface IMapper<in TIn, out TOut>
{
TOut Map(TIn model);
}
public class CalendarEventViewModelMapper : IMapper<CalendarEvent, CalendarEventViewModel>
{
public CalendarEventViewModel Map(CalendarEvent model)
{
return new CalendarEventViewModel
{
EndDateTimeUtc = model.EndDateTimeUtc,
EventId = model.EventId,
IsApproved = model.IsApproved,
StartDateTimeUtc = model.StartDateTimeUtc,
Summary = model.Summary,
TimeZoneId = model.TimeZoneId,
Title = model.Title
};
}
}
[Route("api/Values")]
public class ValuesController
{
public ValuesController( IMapper<CalendarEvent, CalendarEventViewModel> calendarMapper)
{
_calendarMapper = calendarMapper;
}
// GET api/values/5
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var calendarEvent = GetMyCalendarEventFromDB(id);
return this.Ok(_calendarMapper.Map(calendarEvent));
}
private CalendarEvent GetMyCalendarEventFromDB(int id)
{
return new CalendarEvent("yyyy-dd-MM")
{
EndDateTimeUtc = DateTime.UtcNow.AddHours(3),
EventId = id,
IsApproved = true,
StartDateTimeUtc = DateTime.UtcNow.AddHours(2),
Summary = "My magical Event",
TimeZoneId = "UTC",
Title = "Magical Event"
};
}
}
}
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報