public static VotingStrategy CreateStrategy(VotingType votingType, VotingModel model)
 {
     switch (votingType)
     {
         case VotingType.Open:
             return new OpenVotingStrategy(model.Contest, model.Photo, model.UserId);
         case VotingType.Closed:
             return new ClosedVotingStrategy(model.Contest, model.Photo, model.UserId);
         default:
             throw new ArgumentException();
     }
 }
        private void FillVoters(Contest contest, ICollection<string> votersIds, VotingType votingType)
        {
            if (votersIds == null || votingType == VotingType.Open)
            {
                contest.Voters.Clear();
            }
            else
            {
                var voters = contest.Voters.ToList();

                foreach (var voterId in votersIds)
                {
                    if (contest.Voters.All(v => v.Id != voterId))
                    {
                        var voter = this.ContestsData.Users.Find(voterId);
                        contest.Voters.Add(voter);
                    }
                }

                foreach (var voter in voters)
                {
                    if (!votersIds.Contains(voter.Id))
                    {
                        contest.Voters.Remove(voter);
                    }
                }
            }
        }