我正在现有系统上实现存储库模式,主要是为了能够单独测试我的业务逻辑层。但我担心我有一层太多,建议将不胜感激。没有ORM,SQL Server用作数据库。
我有以下内容:
我发现我经常在Repository Concrete Implementation中创建一个方法,它返回一个简单的数据(例如Expiry Date - DateTime变量),然后将运行Repository Concrete的业务逻辑层方法放在一起实现方法并将其返回到表示层。
如果BLL没有添加任何其他逻辑,是否有一种情况可以直接调用Concrete Implementation方法?如果单元测试还有其他逻辑,那么只能使用BLL方法吗?
我正在使用依赖注入来管理Concrete Impementation。
感谢。
答案 0 :(得分:1)
听起来像是你误解了Repository模式的目的。我们的想法是创建一个类,允许您集中管理特定模型的所有存储/检索 - 使用它来返回像DateTime
这样的简单类型似乎是错误的方法。
您的存储库应该完全处理对象,因此您将拥有类似
的方法SomeClass GetSomeClass(...);
void AddSomeClass(...);
不
DateTime GetExpiryDate(...);
string GetName(...);
分层架构的目的是确保您不会将应用程序的各个部分耦合
在层之间进行通信时,通常认为使用 interfaces 而不是具体类是个好主意。一个接口定义了一个契约,然后你可以为你的各个层建模 - 这个想法是你隐藏了实现,因此如果你将来完全改变它,其他层就不会知道。
例如,如果您的BLL通过IRepository
接口与DAL通信,则BLL只能在该接口的范围内工作,它不知道DAL使用的是什么类型的存储机制 - 这是称为持久性无知。因此,如果将来你将DAL从MS SQL后端换成MySQL后端,这对你的BLL没有影响,因为层之间的契约(即IRepository
接口)没有改变。
答案 1 :(得分:0)