我有一個ASP.Net應用程序,它有很多關於是否可以將對象提交到數據庫的業務規則。應用程序設計 - 驗證和效率
在基本層面上,一個人是衝刺的一部分,它是項目的一部分。
的基本規則是:
的人被分配到一個衝刺,但也許不是百米衝刺的整個持續時間(其中有一個開始和結束日期)。因此,當他們分配人員時,他的開始日期和結束日期必須介於衝刺的開始日期和結束日期之間(包括)。
一個項目可以有許多衝刺,但沒有一個可以在項目開始/結束日期之外。
我的解決方案有一個UI項目,服務層,業務層和數據訪問層。
我正在驗證中,但我不確定在應用程序的什麼級別,應該發生calidation。我不相信這是在用戶界面,因爲那時我需要在我的ASP.Net項目上重複驗證規則...也許我的WinForms前端...
我認爲它應該在業務邏輯中,因爲它有商業規則。所以,我打算創建一個名爲「Validations」的類,並且對於存儲到數據庫的每個業務對象,我在我的Validations中有一個名爲「IsObjectOK」的方法,接受要驗證的對象類型,並返回錯誤列表。
所以:
public List<String> IsObjectOK(SprintDto source)
{
// Do validations, and return list of errors, or NULL if none
}
隨後的驗證規則的例子可能是:
var Project = BusinessLayer.GetProject(source.ProjectId);
// check if Start/End dates fall between Project.Start and Project.End dates
如果有問題,將其添加到錯誤列表。
這似乎是一個好方法。我在尋找處理驗證方法的確認信息,以及任何提示和技巧?我不應該擔心數據庫命中嗎?我的意思是,對於衝刺來說,可能會有大約6或7個「規則」需要驗證,所有這些規則都可能從不同的表格中獲取數據。所以,這是7個數據庫查詢(加上連接開銷),一次保存。 (SQL Server 2012)。我認爲這不是一個擔心,因爲它全部都歸功於業務層和數據層。
該技術取決於你在做CI,單例還是命令模式(CQRS),你在使用ORM嗎?但是,它應該在業務層上,而對數據庫的調用肯定會在大批量應用上表現不佳。 – Fendy