public virtual IEnumerable <ValidationResult> Execute(ICreateVehicleCommand vehicle) { bool isYearSet = vehicle.Year.HasValue; bool isMakeSet = !string.IsNullOrEmpty(vehicle.MakeName); bool isModelSet = !string.IsNullOrEmpty(vehicle.ModelName); bool isYearValid = true; bool isMakeValid = true; bool isModelValid = true; // Make requires a year if ((!isYearSet) && isMakeSet) { yield return(new ValidationResult("MakeName", Resources.VehicleMissingYearForMake)); isMakeValid = false; } // Model requires a year and make if (isModelSet) { if (!isYearSet) { yield return(new ValidationResult("ModelName", Resources.VehicleMissingYearForModel)); isModelValid = false; } else if (!isMakeSet) { yield return(new ValidationResult("ModelName", Resources.VehicleMissingMakeForModel)); isModelValid = false; } } // Validate Year value (if not already invalid) if (isYearValid) { isYearValid = ((!isYearSet) || _manufacturerRepository.IsValidYear(vehicle.Year.Value)); if (!isYearValid) { yield return(new ValidationResult("Year", Resources.VehicleYearInvalid)); } } // Validate Make value (if not already invalid) if (isMakeValid) { isMakeValid = ((!isMakeSet) || (isYearSet && _manufacturerRepository.IsValidMake(vehicle.Year.Value, vehicle.MakeName))); if (!isMakeValid) { yield return(new ValidationResult("MakeName", Resources.VehicleMakeInvalid)); } } // Validate Model value (if not already invalid) if (isModelValid) { isModelValid = ((!isModelSet) || (isYearSet && isMakeSet && _manufacturerRepository.IsValidModel(vehicle.Year.Value, vehicle.MakeName, vehicle.ModelName))); if (!isModelValid) { yield return(new ValidationResult("ModelName", Resources.VehicleModelInvalid)); } } }