我已经开始设计一个相当大的系统的部分,并且想知道什么是使用存储库的最佳方式。
哪种方法会更好:
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 :(得分:2)
实际上你的选择并不差或更好,但它们是不同的。
就我而言,由于DDD对我自己构建思路的方式很友好,所以我选择#2 。通常这种方法更好(这是我的观点),因为它有利于更好地分离关注点和更少耦合:您的POCO类与其存储库没有依赖关系,而活动记录模式具有转向的缺点你的课程对于它的用例非常具体(它们不太可重用)。
或者还有其他方法可以更优雅吗?
这是一个非常广泛的问题,我需要写一本书给你一个可能的答案。
顺便说一句,我相信你应该看一下unit of work pattern,这将使你的解决方案更加强大,因为你将能够实现与技术无关的域事务。