2016-11-29 62 views
0

我在設計我的服務層並在控制器中使用它們的最佳方法方面遇到問題。這是我的擔心。使用服務層關注Asp.net核心問題

目前我使用這個刪除類別

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult Delete(List<Guid> ids) 
    { 
     if(ids == null || ids.Count == 0) 
      return RedirectToAction("List"); 

     _categoryService.DeleteCategories(_categoryService.GetCategoryByIds(ids)); 
     _categoryService.SaveChanges(); 

     return RedirectToAction("List"); 
    } 

我關心的是,我應該只是通過ID來DeleteCategories然後調用DeleteCategoriesGetCategoryByIds。如果我想只刪除1個類別,是它更好地添加其他方法一樣DeleteCategory然後在控制器檢查ID的長度,如果是隻有1個,使用DeleteCategory相反,

回答

3

我關注我應該只是傳遞ID到DeleteCategories然後調用DeleteCategories中的GetCategoryByIds。

只需將ID傳遞給DeleteCategories方法即可。我甚至不打擾GetCategoryByIds裏面。如果您打算刪除所有類別信息,則無需查詢數據庫中的所有其他類別信息。

,如果我想只刪除1個類別,是它更好地添加其他方法一樣DeleteCategory然後在控制器檢查ID的長度,如果是隻有1個,使用DeleteCategory代替

我不打擾創建另一種方法。你可以傳遞一個包含一個值的列表。沒有什麼DeleteCategory方法可以做,你不能用DeleteCategories做。

+0

嗨,我不明白你的意思_如果你只是想刪除它,就不需要查詢數據庫中的所有其他類別信息。我正在使用實體框架,我怎麼能通過不查詢數據庫刪除實體來刪除? – markoverflow

+1

@markoverflow作爲一般規則,如果不需要,最好避免查詢數據庫。只有主鍵需要做刪除。在[這個SO問題]中有幾個例子(http://stackoverflow.com/questions/2471433/how-to-delete-an-object-by-id-with-entity-framework)如何做到這一點。 –

0

這一切都取決於你的業務邏輯

如果用戶選擇多個類別,並同時將它們刪除的選項,那麼它很有意義的刪除方法接受ID的列表並刪除它們所有,如果用戶只能刪除一個類別,那麼它應該是DeleteById(int categoryId)

至於調用GetCategoryByIds,仍然取決於你的邏輯,如果你有某種授權,那麼你必須首先檢索類別,確保用戶有權刪除提供的類別,如果一切正常,繼續。

有關您的代碼的說明,您的服務應具有封裝在內部的數據操作邏輯,您不應該公開SaveChanges方法並將控制權交給控制器調用它,或者至少實現Unit of Work模式if你需要實現某種交易。