0

В моем приложении у меня есть чек, который проверяет COUNT из группы таблиц базы данных. Если каждый из этих COUNTS превышает определенный порог, он устанавливает свойство как активное. Вот пример контроллера, когда пользователь добавляет информацию номераКак сделать этот код многоразовым?

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Create([Bind(Include = "ID,RoomTypeID,Description")] Room room, int propertyId) 
    { 
     if (ModelState.IsValid) 
     { 
      room.ID = Guid.NewGuid(); 
      room.DateCreated = DateTime.Now; 
      room.PropertyID = propertyId; 
      db.Rooms.Add(room); 
      await db.SaveChangesAsync(); 
      var roomCount = db.Rooms.Where(r => r.PropertyID == propertyId).Count(); 
      var rateCount = db.Rates.Where(r => r.PropertyID == propertyId).Count(); 
      var imageCount = db.PropertyImage.Where(r => r.PropertyID == propertyId).Count(); 
      if(roomCount >= 3 && rateCount >= 3 && imageCount >= 3) 
      { 
       //Set Property as ACTIVE 
      } 
      return RedirectToAction("Index"); 
     } 

Проблема у меня есть, это то, что я хочу, чтобы запустить эту проверку (на 3 базы данных счётчиков и «если» заявление) на целую кучу контроллеры. Я не хочу дублировать эту конфигурацию на каждом контроллере для каждого действия. Кроме того, эта проверка может быть подвержена изменениям, поэтому я хотел бы обновить ее только в одном месте.

Как мне лучше всего это сделать? Должен ли я создавать какой-то вспомогательный класс?

Thanks

ответ

1

Вы на правильном пути. Вы хотите отделить эту ответственность столько, сколько сможете, исходя из ваших потребностей или уровней разделения, уже установленных в вашем приложении. Как минимум, я бы создал один класс, который обращается к БД, а другой, который содержит логику для принятия решения «если». Например, Controller -> calls Helper -> вызывает DBAccessor

+0

Я был под (очевидно неправильным) впечатлением, что вы можете получить доступ к базе данных только из класса контроллера? Я использую Entity Framework, так что «Помогите» правильной терминологии, поэтому я могу google и посмотреть, есть ли какие-либо учебники по этому поводу? – Gavin5511

+1

Я бы немного почитал в архитектуре N-Tier, чтобы понять теорию, лежащую в ее основе. Для ваших конкретных потребностей прямо сейчас, сохраняя его просто и использование терминов «Помощник» или «Утилита», вероятно, прекрасны. –

+0

Также вполне приемлемо получить доступ к базе данных вне контроллеров. Например, некоторые люди предпочитают доступ к базе данных только из другого проекта, нежели проект веб-приложения. –