public async Task <bool> ShouldMakeSnapShot(AggregateRoot aggregate)
        {
            if (!IsSnapshotable(aggregate.GetType()))
            {
                return(false);
            }

            var i = aggregate.Version;

            for (var j = 0; j < aggregate.GetUncommittedChanges().Length; j++)
            {
                if (++i % _snapshotInterval == 0 && i != 0)
                {
                    return(true);
                }

                if (i >= _snapshotInterval && !await _snapshotStore.ExistsAsync(aggregate.Id).ConfigureAwait(false))
                {
                    return(true);
                }
            }

            return(false);
        }