2016-08-18 2 views
0

Я начал разрабатывать детали довольно большой системы и задавался вопросом, каким будет лучший способ использования репозиториев.Инъекция экземпляра хранилища в класс

Какой метод будет лучше:

 static void Main(string[] args) 
     { 
      var dataRepository = new DataRepository(); 
      var classA = new ClassA(dataRepository); 
      classA.Save(); 
     } 

     public interface IDataRepository 
     { 
      void Save(ClassA myInstance); 
     } 

     public class DataRepository : IDataRepository 
     { 
      public void Save(ClassA myInstance) 
      { 
       //Do some stuff 
      } 
     } 

     public class ClassA 
     { 
      private IDataRepository _dataRepository; 
      public ClassA(IDataRepository dataRepository) 
      { 
       _dataRepository = dataRepository; 
      } 

      public void Save() 
      { 
       _dataRepository.Save(this); 
      } 
     } 

Или я должен делать:

static void Main(string[] args) 
{ 
    var dataRepository = new DataRepository(); 
    var classB = new ClassB(); 
    dataRepository.Save(classB); 
} 

public interface IDataRepository 
{ 
    void Save(ClassB myInstance); 
} 

public class DataRepository : IDataRepository 
{ 
    public void Save(ClassB myInstance) 
    { 
     //Do some stuff 
    } 
} 

public class ClassB 
{ 
    //some stuff  
} 

Или есть другой способ, которым я мог бы это более элегантно?

+0

Если вы хотите чистоты, тогда вы создаете класс UOW и передаете в него репозиторий. Какую орму вы планируете использовать? –

+0

Это, наверное, будет Dapper – Draco

+1

Все, что я сказал бы, это только ввести что-то, когда есть настоящая потребность в нем –

ответ

2

На самом деле ваши выборы не хуже или лучше, но они разные.

В моем случае, так как DDD дружит с моим собственным способом структурирования моего ума, я иду с # 2. Обычно этот подход лучше (это моя точка зрения), потому что он способствует лучшему разделению проблем и уменьшению связи: ваши классы POCO не имеют зависимости от своих репозиториев, а активная форма записи имеет недостаток в том, чтобы превратить ваши классы очень специфичными для его использование (они менее пригодны для повторного использования).

Или есть ли другой способ, я мог бы это более элегантно?

Это очень широкий вопрос, мне нужно будет написать книгу, чтобы дать вам возможный и точный ответ на нее.

Кстати, я считаю, что вы должны смотреть на unit of work pattern, что позволит расширить возможности вашего решения еще больше, так как вы будете иметь возможность реализовать технологии агностик операций домена.