Часы.Теперь недоступно на уровне домена abp.io

#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. https://volosoft.com/blog/Prefer-Singleton-Pattern-over-Static-Class
  2. https://docs.abp.io/en/abp/latest/Timing#datetime-normalization
  3. https://github.com/abpframework/abp#application-modules

Комментарии:

1. Спасибо тебе, @berkansasmaz. Однако ваше решение требует, чтобы я передал методу дополнительный, строго бесполезный параметр. Я сомневаюсь, правильнее ли для этого создать класс. EventsManager