/// <summary>
        /// Initializes a new instance of the <see cref="ScrumTeam"/> class.
        /// </summary>
        /// <param name="scrumTeamData">Scrum Team serialization data.</param>
        /// <param name="dateTimeProvider">The date time provider to provide current time. If null is specified, then default date time provider is used.</param>
        /// <param name="guidProvider">The GUID provider to provide new GUID objects. If null is specified, then default GUID provider is used.</param>
        public ScrumTeam(Serialization.ScrumTeamData scrumTeamData, DateTimeProvider dateTimeProvider, GuidProvider guidProvider)
        {
            if (scrumTeamData == null)
            {
                throw new ArgumentNullException(nameof(scrumTeamData));
            }

            if (string.IsNullOrEmpty(scrumTeamData.Name))
            {
                throw new ArgumentException("Scrum Team name cannot be empty.", nameof(scrumTeamData));
            }

            DateTimeProvider     = dateTimeProvider ?? DateTimeProvider.Default;
            _guidProvider        = guidProvider ?? GuidProvider.Default;
            Name                 = scrumTeamData.Name;
            AvailableEstimations = scrumTeamData.AvailableEstimations.ToArray();
            State                = scrumTeamData.State;

            if (scrumTeamData.Members != null)
            {
                DeserializeMembers(scrumTeamData);
            }

            DeserializeEstimationResult(scrumTeamData);

            if (scrumTeamData.Members != null)
            {
                foreach (var memberData in scrumTeamData.Members)
                {
                    var member = FindMemberOrObserver(memberData.Name);
                    member.DeserializeMessages(memberData);
                }
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ScrumTeam"/> class.
        /// </summary>
        /// <param name="name">The team name.</param>
        /// <param name="availableEstimations">The collection of available estimation values.</param>
        /// <param name="dateTimeProvider">The date time provider to provide current time. If null is specified, then default date time provider is used.</param>
        /// <param name="guidProvider">The GUID provider to provide new GUID objects. If null is specified, then default GUID provider is used.</param>
        public ScrumTeam(string name, IEnumerable <Estimation> availableEstimations, DateTimeProvider dateTimeProvider, GuidProvider guidProvider)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            DateTimeProvider     = dateTimeProvider ?? DateTimeProvider.Default;
            _guidProvider        = guidProvider ?? GuidProvider.Default;
            Name                 = name;
            AvailableEstimations = availableEstimations ?? DeckProvider.Default.GetDefaultDeck();
        }