當我看到有關存儲庫模式它當然是一個總簡單的示例無關,與現實世界要求微軟的樣本 - 一如既往... -什麼樣的錯誤代碼應該存儲庫恢復到REST的Web API
存儲庫中添加/刪除/更新方法返回void - 什麼 -
另一方面當有人使用我的REST的Web API,我想提供的東西像
NotFound()
如果記錄的刪除沒有做任何
OK()
如果刪除成功
同爲Update方法。
你在真實世界的項目中使用什麼作爲存儲庫的返回類型,以便讓調用者知道發生了什麼?
當我看到有關存儲庫模式它當然是一個總簡單的示例無關,與現實世界要求微軟的樣本 - 一如既往... -什麼樣的錯誤代碼應該存儲庫恢復到REST的Web API
存儲庫中添加/刪除/更新方法返回void - 什麼 -
另一方面當有人使用我的REST的Web API,我想提供的東西像
NotFound()
如果記錄的刪除沒有做任何
OK()
如果刪除成功
同爲Update方法。
你在真實世界的項目中使用什麼作爲存儲庫的返回類型,以便讓調用者知道發生了什麼?
主要有兩種選擇:
DeletePerson
返回NotFound,但是如果在使用不同的存儲庫清理某些相關數據時沒有數據存在,那麼您希望使用不同的返回類型?)你應該怎麼做避免是讓Repository層返回某種面向HTTP的響應代碼。
你在真實世界的項目中使用什麼作爲存儲庫的返回類型,以便讓調用者知道發生了什麼?
「結果對象」。一個簡單的版本看起來是這樣的:
public class RepositoryActionResult
{
public int RecordsAffected { get; set; }
}
然後你可以設置從倉庫的方法和處理來自適當調用代碼的結果,而不使用異常的控制流。
根據您的要求,您可以根據需要將此課程設置爲複雜。
如果你問我,RecordsAffected在倉庫之外是沒用的。如果每更新一行3個表格,SaveChanges返回3。更新可能仍然是錯誤的。我已經有這樣的方式:int recordsAffected = context.SaveChanges()我不喜歡它計算表...在一個錯誤情況下返回插入實體或null。 – Elisabeth
我喜歡你的第一種方法,首先將NotFound視爲例外。因此,我將創建一個NotFoundException類並將其與NotFoundExceptionFilterAttribute連接:-)謝謝! – Elisabeth
@Elisa:在這種情況下,您可能需要考慮的另一件事是提供一種不引發異常的方法 - 也許是一個TryDelete()方法,該方法返回一個布爾值或者根本不會執行任何操作該項目不在那裏。你很可能會遇到你不在乎這件事是否已經被刪除的情況,並且我不建議在這些情況下抓住和吃掉例外。 – StriplingWarrior
順便說一句。在那裏沒有發生異常的情況下你會返回什麼?空虛嗎?對於創建,我必須返回實體 - 因爲新創建的Id - 但對於更新/刪除/附加/分離?最後兩個只是一個關係刪除實際上是一種HTTP補丁。 – Elisabeth