2009-06-11 14 views
0

Ich habe eine Business-Logik-Layer-Klasse, die Zugriffsmethoden für jede Tabelle in einer Datenbank enthält. Da es jetzt einige Tabellen gibt, möchte ich es neu strukturieren, um die Methoden nach Entitäten zu gruppieren (für leichteren Zugriff beim Codieren). Also, von hier:Eine Klasse in Unterklassen aufteilen

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

dazu:

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

ich die Klasse möchte nicht statisch, wenn möglich zu bleiben, mit allen Klassen ‚teilweise‘ zu (um mich zu erlauben hinzufügen zusätzliche Methoden zur generierten Hauptklasse). Was sind meine Möglichkeiten, dies zu erreichen? Hier ist das aktuelle Layout:

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.. 
    } 
} 

Ist das machbar?

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.. 
    } 
} 

Danke.

Antwort

1

Ja, das ist machbar. Tatsächlich habe ich so etwas umgesetzt.

Natürlich, nachdem ich das getan habe, habe ich von Linq zu SQL gehört und wir begannen stattdessen, das zu verwenden ... also sollten Sie das als eine weitere Option überprüfen.

+0

Diese BLL ist ein Wrapper für Linq-to-SQL :) Es entkoppelt alle Linq Datenkontext Entitäten in statusfreie Poco-Klassen. – Nick

2

Neben der Verwendung von partial sieht Ihr Layout gut aus. Ich glaube nicht, partial wird den Trick für Sie tun, soweit die Klassen erweiterbar, wie partial Klassen müssen alle in der gleichen Baugruppe befinden.

Eine bessere Lösung wäre wahrscheinlich extension methods erstellen.

Verwandte Themen