我在一个大系统中有多个子系统。所以每个子系统都有自己的BAL和DAL实施。现在,BAL具有重要的逻辑,但DAL基本上具有相似的代码,因此我将它重构为一个通用的DAL类,该类现在用于所有子系统。事情是这样的:具有通用代码的多个类的重构实现(使用DI)
假设子系统名称为A和B
public class DalA
{
private IGenericDal genericDal;
public DalA(IGenericDal injectedGenericDal)
{
this.genericDal = injectedGenericDal;
}
public bool DoSomeDBWorkForA()
{
return genericDal.CommonDalMethod();
}
}
public class DalB
{
private IGenericDal genericDal;
public DalB(IGenericDal injectedGenericDal)
{
this.genericDal = injectedGenericDal;
}
public bool DoSomeDBWorkForB()
{
return genericDal.CommonDalMethod();
}
}
现在注入通用DAL的DI部分是从视功能单元测试点很重要,所以BAL(S)必须注入通用DAL对象。因此,现在BAL不必要地意识到通用DAL对象,仅仅是因为重构和DI需求,理想情况下它不应该是(特别是在重构的情况下)。
另外我的一位朋友指出,子系统A和B的DAL(s)没有做任何事情,所以我们应该摆脱它们并调用通用DAL本身,但在我看来,它降低了灵活性,因为明天的DAL A可能想要做一些日志记录或其他一些B甚至C可能不会订阅的特殊操作。
那么你们怎么看?在DI,关注点分离(即BAL的A只知道A的DAL而不是通用的DAL对象)和灵活性(对于所有子系统具有不同的DAL)完好无缺的情况下,任何人都有更好的重构实现。
我想到的方法之一是在A和B的DAL中有2个构造函数,所以从BAL我们可以调用而不注入通用DAL,并且从单元测试我可以注入通用DAL对象。
恕我直言,这是错误的,有一个系统(解决方案)的有系统的所有部件内的多个子系统。使用微服务是更好的主意,或将子系统更改为模块;)。 –
@ shA.t这是一个很好的建议,但在这种情况下,我不能承受由于微服务实现而导致的延迟增加;)那么在那种情况下,你会提出什么建议? –