2013-03-19 61 views
0

我試圖將業務層添加到我的簡單Web應用程序。
EF對我來說類,如User產生的,Lang
asp.net中的實體框架和業務層

我現在的BL是這樣的:

public class BLuser 
    { 
     public static List<User> allUsers() 
     { 
      using (MyEntities ctx = new MyEntities()) 
      { 
       var users = from us in ctx.Users select us; 
       return users.ToList<User>(); 
      } 
     } 


     public static int getUsersLangId(int id) 
     { 
      using (MyEntities ctx = new MyEntities()) 
      { 
       var langid = (from us in ctx.Users where us.Id == id select us.Lang.Id).FirstOrDefault(); 
       return langid; 
      } 
     } 

     public static void changeUsersLangId(int userId, int langId) 
     { 
      using (MyEntities ctx = new MyEntities()) 
      { 
       var user = (from us in ctx.Users where us.Id == userId select us).FirstOrDefault(); 
       user.LangId = langId; 
       ctx.SaveChanges(); 
      } 
     } 

     public static void addNewUser(int userId) 
     { 
      User newUser = new User(); 
      newUser.Id = userId; 
      newUser.LangId = 0; 

      using (MyEntities ctx = new MyEntities()) 
      { 
       ctx.Users.Add(newUser); 
       ctx.SaveChanges(); 
      } 
     } 

    } 

然後在我後面的代碼我可以把它想:
BLuser.changeUsersLangId(1,1);

是它好方法(特別是靜態方法)?我覺得我可能會錯過一些東西,但在這種情況下,我不必關心靜態方法對BL對象的持久性。

有沒有關於此的一些有用的教程,我發現是相當複雜的文章不容易爲新手理解。
謝謝。

回答

1

我會注入你的數據訪問代碼到商業邏輯層。這樣,單元測試您的業務邏輯會容易得多。

看看Dependency Injection模式。

你的數據訪問代碼應該返回對象,看看Repository pattern

如果您有關於這些文章的具體問題,我確信SO用戶可以提供幫助。

一般來說,靜態方法從來不是一個好主意,因爲它們會導致難以進行單元測試的不靈活的代碼。