2009-06-11 70 views
0

我有一個業務邏輯層類,它包含數據庫中每個表的訪問方法。由於現在有相當多的表格,我想重新構造它以按實體對方法進行分組(以便在編碼時更容易訪問)。所以,從這個:將一個類拆分成子類

BLL.Database MyDB = new BLL.Database(); 
BLL.Entity.User MyUser = Database.UserGetById(42); 

這樣:

BLL.Database MyDB = new BLL.Database(); 
BLL.Entity.User MyUser = Database.User.GetById(42); 

我想這個類保持非靜態如果可能的話,所有的類「部分」太(允許我補充主要生成的類的其他方法)。我有什麼選擇來實現這一目標?以下是目前的佈局:

namespace BLL 
{ 
    public partial class Database 
    { 
     // private members.. 
     // constructor 

     #region User 
     public IQueryable<BLL.Entity.User> UserGetAll() 
     { 
      // ... 
     } 

     public BLL.Entity.User UserGetById(int UserId) 
     { 
      // ... 
     } 

     public void UserSave(ref BLL.Entity.User user) 
     { 
      // ... 
     } 

     public void UserDelete(int userId) 
     { 
      // ... 
     } 
     #endregion 

     // More sets of methods for other entities in database here.. 
    } 
} 

這是否可行?

namespace BLL 
{ 
    public partial class Database 
    { 
     private _User; 
     public User 
     { 
      if (_User == null) 
      { 
       _User = new User(); 
      } 
      return _User; 
     } 

     // Other data access classes here.. 
    } 

    public partial class User 
    { 
     public IQueryable<BLL.Entity.User> GetAll() 
     { 
      // ... 
     } 

     // GetById, Save & Delete methods here.. 
    } 
} 

謝謝。

回答

1

是的,那是可行的。事實上,我實現了很多類似的東西。

當然,在這樣做後,我聽說Linq to SQL,我們開始使用它,所以你可能想檢查出另一個選項。

+0

此BLL是Linq-to-SQL的包裝器:)它將所有Linq數據上下文實體分離爲無狀態的poco類。 – Nick 2009-06-11 14:17:35

2

除了使用partial,您的佈局看起來不錯。我不認爲partial將爲你做訣竅,只要這些類可以擴展,因爲partial類必須全部駐留在同一個程序集中。

更好的解決方案可能會創建extension methods