Это нормально в мире DI? - PullRequest
0 голосов
/ 12 мая 2010

Я реализовал Unity DI в моем проекте, но у меня, как мне кажется, простой вопрос.

Мой DataContext:

public partial class AuctionDataContext : DataContext {
  public Table<AuctionItem> AuctionItems;

  ...
 }

Некоторый код для вставки AuctionItem в базу данных. Обратите внимание, как я приведу интерфейс к фактическому типу. Это для того, чтобы все правильно работало с DataContext.

 public void Insert(IAuctionItem item) {
  _dataStore.DataContext.AuctionItems.InsertOnSubmit((AuctionItem)item);
  _dataStore.DataContext.SubmitChanges();
 }

Ни AuctionItem, ни тип DataContext никогда не подвергаются клиентскому коду, а доступны только внутри уровня базы данных. Я думаю, мой вопрос, это хорошая архитектура?

1 Ответ

1 голос
/ 13 мая 2010

Ваша архитектура в порядке, но все архитектуры контекстуальны, так как один шаблон может быть идеальным в одной ситуации, но ужасным в другой.

По шаблону всегда разумно абстрагировать ваш репозиторий / DAO от механизма персистентности, и, как я вижу, вы это сделали. Я предлагаю вам другой интерфейс вокруг вашей реализации, который даст вам гибкость для изменения реализации.

 public interface IRepository<T>{
    void Insert(T item);
 }

 public class AuctionItem : IRepository<IAuctionItem> {

   public void Insert(IAuctionItem item) {
      _dataStore.DataContext.AuctionItems.InsertOnSubmit((AuctionItem)item);
      _dataStore.DataContext.SubmitChanges();
   }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...