コード例 #1
0
            public async Task <CommandResult> Handle(
                Command request,
                CancellationToken cancellationToken)
            {
                Document doc = await store.GetAsync <Document>(
                    request.PurchaseOrderLineId.ToString());

                PurchaseOrderLine aggregate = new PurchaseOrderLine(doc);

                ReviewOutcome reviewResult = aggregate.Review();

                CommandResult result = CommandResult.Void;

                if (reviewResult is CancellationSuggested)
                {
                    result = result
                             .WithNotification(
                        new CancellationSuggestedEvent
                    {
                        PurchaseOrderLineId = request.PurchaseOrderLineId
                    });
                }

                return(result);
            }
コード例 #2
0
        public T Review(T item, ReviewOutcome outcome)
        {
            _revisionList.Remove(item);

            var nextReview = new T();

            if (outcome != ReviewOutcome.Incorrect)
            {
                nextReview.CorrectReviewStreak   = item.CorrectReviewStreak + 1;
                nextReview.PreviousCorrectReview = item.ReviewDate;
            }
            else
            {
                nextReview.CorrectReviewStreak   = 0;
                nextReview.PreviousCorrectReview = DateTime.MinValue;

                _revisionList.Add(nextReview);
            }

            nextReview.ReviewDate       = Clock.Now();
            nextReview.DifficultyRating = ReviewStrategy.AdjustDifficulty(item, outcome);
            nextReview.ReviewOutcome    = outcome;

            return(nextReview);
        }
コード例 #3
0
        public void reviewing_updates_ReviewOutcome(ReviewOutcome outcome)
        {
            var item = new ReviewItemBuilder().Due().Build();

            var session = new StudySession<ReviewItem>(new[] { item }) { Clock = _clock };
            var review = session.Review(item, outcome);

            Assert.That(review.ReviewOutcome, Is.EqualTo(outcome));
        }
コード例 #4
0
        public void correct_review_outcome_increments_CorrectReviewStreak(ReviewOutcome outcome)
        {
            var correctReviewStreak = 3;
            var item = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build();

            var session = new StudySession<ReviewItem>(new[] { item });
            var review = session.Review(item, outcome);

            Assert.That(review.CorrectReviewStreak, Is.EqualTo(correctReviewStreak + 1));
        }
コード例 #5
0
        public void correct_review_outcome_increments_CorrectReviewStreak(ReviewOutcome outcome)
        {
            var correctReviewStreak = 3;
            var item = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build();

            var session = new StudySession <ReviewItem>(new[] { item });
            var review  = session.Review(item, outcome);

            Assert.That(review.CorrectReviewStreak, Is.EqualTo(correctReviewStreak + 1));
        }
コード例 #6
0
        public void correct_review_outcome_sets_PreviousCorrectReview(ReviewOutcome outcome)
        {
            var correctReviewStreak = 3;
            var item = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build();
            var reviewDate = item.ReviewDate;

            var session = new StudySession<ReviewItem>(new[] { item });
            var review = session.Review(item, outcome);

            Assert.That(review.PreviousCorrectReview, Is.EqualTo(reviewDate));
        }
コード例 #7
0
        public void correct_review_outcome_sets_PreviousCorrectReview(ReviewOutcome outcome)
        {
            var correctReviewStreak = 3;
            var item       = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build();
            var reviewDate = item.ReviewDate;

            var session = new StudySession <ReviewItem>(new[] { item });
            var review  = session.Review(item, outcome);

            Assert.That(review.PreviousCorrectReview, Is.EqualTo(reviewDate));
        }
コード例 #8
0
        public void reviewing_updates_DifficultyRating_based_on_review_strategy(ReviewOutcome outcome)
        {
            var item = new ReviewItemBuilder().Due().WithDifficultyRating(DifficultyRating.MostDifficult).Build();

            var session = new StudySession <ReviewItem>(new[] { item })
            {
                ReviewStrategy = new SimpleReviewStrategy()
            };
            var review = session.Review(item, outcome);

            Assert.That(review.DifficultyRating, Is.EqualTo(DifficultyRating.Easiest));
        }
コード例 #9
0
        public void reviewing_updates_ReviewOutcome(ReviewOutcome outcome)
        {
            var item = new ReviewItemBuilder().Due().Build();

            var session = new StudySession <ReviewItem>(new[] { item })
            {
                Clock = _clock
            };
            var review = session.Review(item, outcome);

            Assert.That(review.ReviewOutcome, Is.EqualTo(outcome));
        }
コード例 #10
0
        public void correct_items_are_removed_from_review_queue(ReviewOutcome outcome)
        {
            var items = new ReviewItemListBuilder()
                        .WithDueItems(1)
                        .Build();
            var session = new StudySession <ReviewItem>(items);

            var item = session.First();

            session.Review(item, outcome);

            Assert.That(session.Count(), Is.EqualTo(0));
        }
コード例 #11
0
        public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome)
        {
            //EF':=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))
            //where:
            //EF' - new value of the E-Factor,
            //EF - old value of the E-Factor,
            //q - quality of the response in the 0-3 grade scale.
            //If EF is less than 1.3 then let EF be 1.3.

            var currentEasinessFactor = DifficultyRatingToEasinessFactor(item.DifficultyRating.Percentage);
            var newEasinessFactor = currentEasinessFactor + (0.1 - (3 - (int)outcome)*(0.08 + (3 - (int)outcome)*0.02));
            var newDifficultyRating = EasinessFactorToDifficultyRating(newEasinessFactor);

            if (newDifficultyRating > 100)
                newDifficultyRating = 100;
            if (newDifficultyRating < 0)
                newDifficultyRating = 0;

            return new DifficultyRating(newDifficultyRating);
        }
コード例 #12
0
        public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome)
        {
            //EF':=EF+(0.1-(5-q)*(0.08+(5-q)*0.02))
            //where:
            //EF' - new value of the E-Factor,
            //EF - old value of the E-Factor,
            //q - quality of the response in the 0-3 grade scale.
            //If EF is less than 1.3 then let EF be 1.3.

            var currentEasinessFactor = DifficultyRatingToEasinessFactor(item.DifficultyRating.Percentage);
            var newEasinessFactor     = currentEasinessFactor + (0.1 - (3 - (int)outcome) * (0.08 + (3 - (int)outcome) * 0.02));
            var newDifficultyRating   = EasinessFactorToDifficultyRating(newEasinessFactor);

            if (newDifficultyRating > 100)
            {
                newDifficultyRating = 100;
            }
            if (newDifficultyRating < 0)
            {
                newDifficultyRating = 0;
            }

            return(new DifficultyRating(newDifficultyRating));
        }
コード例 #13
0
        public void reviewing_updates_DifficultyRating_based_on_review_strategy(ReviewOutcome outcome)
        {
            var item = new ReviewItemBuilder().Due().WithDifficultyRating(DifficultyRating.MostDifficult).Build();

            var session = new StudySession<ReviewItem>(new[] { item }) { ReviewStrategy = new SimpleReviewStrategy() };
            var review = session.Review(item, outcome);

            Assert.That(review.DifficultyRating, Is.EqualTo(DifficultyRating.Easiest));
        }
コード例 #14
0
        public void correct_items_are_removed_from_review_queue(ReviewOutcome outcome)
        {
            var items = new ReviewItemListBuilder()
                            .WithDueItems(1)
                            .Build();
            var session = new StudySession<ReviewItem>(items);

            var item = session.First();
            session.Review(item, outcome);

            Assert.That(session.Count(), Is.EqualTo(0));
        }
コード例 #15
0
 public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome)
 {
     return DifficultyRating.Easiest;
 }
コード例 #16
0
 public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome)
 {
     return(DifficultyRating.Easiest);
 }