public Contact Add(Contact contact)
        {
            //Validate input
            if (contact == null)
            {
                throw new ArgumentNullException(nameof(contact));
            }


            ObjectValidator.Validate(contact);

            //contact names must be unique
            var existing = FindByName(contact.Name);

            if (existing != null)
            {
                throw new Exception("Contact must be unique.");
            }

            return(AddCore(contact));
        }
        public Contact Update(int id, Contact contact)
        {
            //Validate
            if (id <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(id), "Id must be > 0.");
            }
            if (contact == null)
            {
                throw new ArgumentNullException(nameof(contact));
            }


            ObjectValidator.Validate(contact);

            var sameName = FindByName(contact.Name);

            if (sameName != null && sameName.Id != id)
            {
                throw new Exception("Contact info must be unique.");
            }

            return(UpdateCore(id, contact));
        }