我有這樣這會被認爲是驗證邏輯的重複嗎?
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ContactNumber { get; set; }
public System.DateTime DateOfBirth { get; set; }
}
這些領域的所有樣本類中添加一個客戶數據庫之前是必需的。所以在服務/業務邏輯層我做了這4個屬性的驗證。我驗證FirstName和LastName不是空的,並且ContactNumber大於0,DateOfBirth大於1930(就像一個例子)。在aspx頁面中,我可以將客戶對象傳遞給服務/業務邏輯層以驗證和添加到數據庫,我對ContactNumber和DateOfBirth進行類型檢查。我使用簡單的函數,如IsNumeric和IsDate。
我知道驗證應該在服務層完成,以便如果其他應用程序需要使用此邏輯,將來可以避免重複。
在aspx頁面中進行類型檢查是否很常見,然後將該對象傳遞給執行所有其他驗證的服務層?我知道一種避免這種情況的方法是使用JavaScript。爲了爭論(從未真正發生過),客戶端關閉了他的javascript。我正在考慮的另一個選項是將客戶添加到數據庫的功能將所有參數作爲對象接受。這種方式可以避免在aspx頁面進行類型檢查,只需在服務層完成即可。但是如果有20個屬性作爲方法參數發送呢?
它可能並不清楚你有什麼樣的體系結構,但是在這種體系結構表示層(例如API)中的大多數時間都進行輸入驗證。更進一步,API會調用業務驗證的業務層 – DasBoot
我正在使用3層體系結構。數據,服務和視圖。所有業務驗證都發生在服務層。我唯一在視圖中驗證的是正確的類型被傳遞給業務層。爲了進一步添加,我不驗證視圖中的名字和姓氏。我只驗證聯繫號碼和出生日期是權利類型值。但是在服務層,我對所有4個字段進行了驗證。 – user3587180
你是什麼意思說視圖圖層。如果我理解正確,您的服務層不僅僅是封裝業務邏輯,還會與視圖交互並執行所有業務邏輯。您需要在服務和視圖之間建立一個圖層,負責從請求中獲取數據,進一步傳遞並在其完成後正確運行,或者返回視圖,消息到視圖或其他東西 – DasBoot