Я спрашиваю это потому, что после долгого времени поиска я не нашел хороший ответ на это еще ...ASP.NET комплекс проверка в бизнесе/уровне услуг
Вот что я хочу:
Пример. У меня есть модель домена «JobPosting», которую пользователь должен иметь возможность изменять состояние для публикации, если оно все еще является черновиком. Перед публикацией я должен не только проверять свойства модели, я также должен проверять множество различных требований относительно учетной записи пользователя, зарегистрированной компании и т. Д. Вся эта логика проверки помещается в сервисный уровень. До сих пор так хорошо ...
Это как мой уровень услуг выглядит следующим образом:
public IValidationResult ValidatePublish(JobPosting jobPosting){
...
}
public void Publish(JobPosting jobPosting){
jobPosting.State = JobPostingState.Published;
...
}
Любой мой контроллер:
public ActionResult Publish(PublishViewModel model){
...
var validationResult = _jobService.ValidatePublish(jobPosting);
if(validationResult.Success){
_jobService.Publish(jobPosting);
...
}
...
}
И вот теперь мои вопросы:
Я хочу чтобы иметь возможность вызывать ValidatePublish с контроллера, чтобы отображать ошибки проверки в представлении. Однако я никогда не смогу опубликовать задание, когда проверка не удалась. Так, чтобы мой код более надежным я добавил вторую проверку достоверности в моей Publish методы в сервисном слое:
public void Publish(JobPosting jobPosting){
if(ValidatePublish(jobPosting).Success){
jobPosting.State = JobPostingState.Published;
...
}
}
, но у меня не такое хорошее чувства, с этим подходом, потому что теперь я называю проверку дважды, когда проверка ОК в течение каждого запроса публикации контроллера.
Что вы думаете. Второй вызов? Есть ли лучший подход? Я прошу, потому что все мое приложение выглядит так, и если я когда-нибудь забуду приглашение на проверку в контроллере, я могу закончить состояние недопустимой модели домена в базе данных. Вот почему я добавил вторую проверку валидации в каждом сервисном методе.
Заранее благодарим за это!
«Я вызываю проверку дважды», где вы вызываете проверку во второй раз? –
Первый вызов в контроллере: var validationResult = _jobService.ValidatePublish (jobPosting); Второе время в методе обслуживания if (ValidatePublish (jobPosting) .Success) { – Simon
, то почему вы снова проверяете метод? Вы можете просто публиковать прямо. –