Организация DAL на .NET + EF
От: Lonely Dog Россия  
Дата: 14.06.13 18:20
Оценка:
Добрый день!

Возник вопрос, как лучше организовать DAL (Data access layer). Речь идет не о бизнес-логике, а именно об уровне доступа к данным.
Пусть у нас есть следующие объекты:
1. Компьютер. У него есть ID, имя и список пользователей.
2. Пользователь. У него есть ID и имя.

Рассматриваю 2 варианта:
interface IDB : IDisposable
{
  public IComputersCollection Computers {get;}
  void Commit();
}

interface IComputersCollection 
{
  IComputer Create();
  void Add(IComputer);
  void Remove(Guid);
  IComputer Get(Guid);
  IEnumerable<IComputer> GetAll();
}

interface IComputer
{
  Guid Id {get;}
  string Name {get;set;}
  IUsersCollection Users {get;}
]

interface IUsersCollection
{
  IUser Create();
  void Add(IUser);
  void Remove(Guid);
  IUserGet(Guid);
  IEnumerable<IUser> GetAll();
}

interface IUser
{
  Guid Id {get;}
  string Name {get;set;}
  IComputer Computer { get;}
}

Т.е., в этом случае DAL повторяет не структуру базы, а структуру предметной области.

2. 
interface IDB : IDisposable
{
  public IComputersCollection Computers {get;}
  public IUsersCollection Users {get;}
  public IUserToComputerCollection UsersToComputers {get;}
  void Commit();
}

interface IComputersCollection 
{
  IComputer Create();
  void Add(IComputer);
  void Remove(Guid);
  IComputer Get(Guid);
  IEnumerable<IComputer> GetAll();
}

interface IComputer
{
  Guid Id {get;}
  string Name {get;set;}
]

interface IUsersCollection
{
  IUser Create();
  void Add(IUser);
  void Remove(Guid);
  IUserGet(Guid);
  IEnumerable<IUser> GetAll();
}

interface IUser
{
  Guid Id {get;}
  string Name {get;set;}
}


interface IUserToComputerCollection 
{
  IUserToComputer Create();
  void Add(IUserToComputer );
  void Remove(Guid);
  IUserToComputer Get(Guid);
  IEnumerable<IUserToComputer > GetAll();
}

interface IUserToComputer
{
  Guid Id {get;}
  Guid UserId {get;set;}
  Guid ComputerId {get;set;}
}


Т.е. в этом случае DAL повторяет структуру базы.

Естественно, поверх DAL будет бизнес логика. И она будет предоставлять интерфейсы из варианта 1. Но вот как организовать DAL?

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.