2017-01-05 99 views
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個數據庫計數和的「如果」語句)上一大堆控制器。我不想在每個控制器上爲每個動作都複製這個配置。此外,這項檢查可能容易改變,所以我想在一個地方更新它。

我最好如何去做這件事?我應該創建某種幫助類嗎?

謝謝

回答

1

你是在正確的軌道上。您希望根據您的需求儘可能多地分離責任,或者在應用程序中已經建立的分離級別。至少,我會創建一個訪問數據庫的類,另一個包含邏輯來做出「如果」決定。例如控制器 - >調用助手 - >調用DBAccessor

+0

我是(顯然是錯誤的)的印象,你只能從控制器類訪問數據庫?我正在使用實體框架,'助手'是正確的術語,所以我可以谷歌,看看有沒有關於這種事情的任何教程? – Gavin5511

+1

我會稍微閱讀一下N層架構來理解它背後的理論。爲了您現在的具體需求,保持簡單並使用「助手」或「實用程序」術語可能沒有問題。 –

+0

另外,訪問控制器之外的數據庫是完全可以接受的。例如,有些人更喜歡只從與Web應用程序項目完全不同的項目訪問數據庫。 –