我正在尝试实现如下组合的简单3层应用程序:
1 - DAL(它是一个UnitOfWork和IRepository,带有POCO的实体(实体框架T4))
2 - BLL(参考DAL)
3 - UI(参考BLL)
我阅读了很多文章,所以我决定实现一个经典的UnitOfWork-Repository模式,这些模式库不知道任何自我跟踪实体:
public interface IRepository<T>
{
void Attach(T entity)
{
...
}
问题: 如果我的组件将在winForm上下文中运行,则某些UI控件可能会处理某些实体属性,因此将Repository作为Edit(T实体)的进一步调用方法将是无用的sice我的实体已被内部对象上下文跟踪。显然,如果我在web上下文中运行一切正常,因为Web平台是无状态的。 一个简单的技巧可能是在每次BLL操作后配置我的objectContext,但我不确定是否要使用此解决方法。 所以我正在寻找一个更漂亮的解决方案来管理所有案例。
IRepository是否应该忽略STE的任何内容? BLL是否应该部署自己的内部存储库和/或单元以模拟无状态环境?
答案 0 :(得分:1)
如果你在WinForms中开发,为什么要模拟无状态平台?关于Repository和UnitOfWork模式,不要将它们视为严格绑定到EntityFramework的东西。忘记UI层中的Context。这些模式与使用的ORM无关,因此您可以轻松切换DAL并更有效地测试应用程序。