2013-04-26 96 views
1

我正在研究MVC3和實體框架4.1,我有業務層和數據訪問層。業務邏輯實現的最佳實踐

因爲我有很多的業務邏輯業務驗證我從業務層調用數據訪問層和做驗證B/C我需要驗證數據庫中的數據。

因此,爲了使我的交易,我經歷了很多條件,所有條件都在一種方法(數據庫驗證的B/C我的驗證代碼也在DAL)我儘可能多的重構代碼,但仍然是該方法看起來大約160線。

任何人都可以告訴我什麼是最好的方法應該是,所以我的代碼將易於管理和擴展。

謝謝

回答

1

我會推薦使用自定義驗證。

當你認爲你更喜歡可維護性來加速(通常是一個好主意)時:不應該直接從UI層訪問數據。你的業務層應該包含你所有的業務邏輯,驗證者應該調用你的業務層。注意用抽象的這些層,你是爲維護交易速度(非常值得如果你問我的貿易)

這裏是一個應該讓你從這裏開始了一個片段:Creating custom data annotation validation in MVC 3

public class EmployeeViewModel 
{ 

    [CustomValidation(typeof(EmployeeViewModel), "ValidateDuplicate")] 
    [Required(ErrorMessage = "Username is required")] 
    [DisplayName("Username")] 
    public string Username { get; set; } 

    public static ValidationResult ValidateDuplicate(string username) 
    { 
     bool isValid; 

     using(var db = new YourContextName) { 
     if(db.EmployeeViewModel.Where(e => e.Username.Equals(username)).Count() > 0) 
     { 
      isValid = false; 
     } else { 
      isValid = true; 
     } 
     } 

     if (isValid) 
     { 
     return ValidationResult.Success; 
     } 
     else 
     { 
     return new ValidationResult("Username already exists"); 
     } 

    } 
} 
+1

問題是代碼不是隻從控制器調用,它也從WCF服務調用,所以我不能按照你的建議。 – 2013-04-26 19:50:49

+0

等待迴應.... – 2013-04-29 20:36:10

+0

這可能有所幫助:http://forums.asp.net/t/2009500.aspx?Use+Validation+using+Data+Annotation+with+WCF – 2014-10-14 21:39:59