将存储库实例注入到类中

时间:2016-08-18 07:29:25

标签: c# .net design-patterns repository-pattern

我已经开始设计一个相当大的系统的部分,并且想知道什么是使用存储库的最佳方式。

哪种方法会更好:

        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    
}

或者还有其他方法可以更优雅吗?

1 个答案:

答案 0 :(得分:2)

实际上你的选择并不差或更好,但它们是不同的。

就我而言,由于DDD对我自己构建思路的方式很友好,所以我选择#2 。通常这种方法更好(这是我的观点),因为它有利于更好地分离关注点和更少耦合:您的POCO类与其存储库没有依赖关系,而活动记录模式具有转向的缺点你的课程对于它的用例非常具体(它们不太可重用)。

  

或者还有其他方法可以更优雅吗?

这是一个非常广泛的问题,我需要写一本书给你一个可能的答案。

顺便说一句,我相信你应该看一下unit of work pattern,这将使你的解决方案更加强大,因为你将能够实现与技术无关的域事务