#abp
Вопрос:
Переход от шаблона aspnet.к abp.io Я узнал, что часы больше не являются статическим объектом. Это услуга (IClock).
Мой вопрос: как я могу использовать его функции на уровне домена, используя модель DDD? Например: у меня есть класс, описывающий события (вдохновленный этим abp.io статья):
public class Event : FullAuditedAggregateRoot<Guid> {
public string Title { get; set; }
public string Description { get; set; }
public bool IsFree { get; set; }
public DateTime StartTime { get; set; }
public DateTime BookingTime { get; set; }
public ICollection<EventAttendee> Attendees { get; set; }
public void AddAttendee(Guid attendeeId) {
if (Clock.Now < BookingTime) { <== here!
throw new BusinessException(
"Error.EventClosed",
$"You cannot book this event before {BookingTime}.");
}
// ...
var attendee = new EventAttendee { UserId = attendeeId };
_attendees.Add(attendee);
}
public Event() {
Attendees = new List<EventAttendee>();
}
}
Здесь я хотел бы использовать часы.Теперь (доступно как статический объект в шаблоне aspnet.), но не в abp.io где это доступно только как услуга.
Ответ №1:
Мне это тоже часто нужно. Я решаю проблему, IClock
используя параметр, как в приведенном ниже примере, чтобы в полной мере использовать IClock
его .
public void AddAttendee(Guid attendeeId, IClock clock)
{
if (clock.Now < BookingTime) {
throw new BusinessException(
"Error.EventClosed",
$"You cannot book this event before {BookingTime}.");
}
// ...
var attendee = new EventAttendee { UserId = attendeeId };
_attendees.Add(attendee);
}
Затем я передаю это как аргумент, где я это называю.
Я думаю, что, вероятно, расширяемость является основной причиной того, что она не статична, как в aspnetboilerplate.
Это использование имеет смысл для меня, я надеюсь, что оно будет полезно для вас.
Рекомендации:
Комментарии:
1. Спасибо тебе, @berkansasmaz. Однако ваше решение требует, чтобы я передал методу дополнительный, строго бесполезный параметр. Я сомневаюсь, правильнее ли для этого создать класс.
EventsManager