0

我正在尝试实现一个简单的 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 entity) 将是无用的,因为我的实体已经被内部对象上下文跟踪。显然,如果我在 web 上下文中运行一切正常,因为 web 平台是无状态的。一个简单的技巧可以是在每次 BLL 操作后处理我的 objectContext,但我不确定是否要使用此解决方法。所以我正在寻找一个更漂亮的解决方案来管理所有案例。

IRepository 是否应该忽略有关 STE 的任何内容?BLL 是否应该始终配置自己的内部存储库和/或单元以模拟无状态环境?

4

1 回答 1

1

如果您在 WinForms 中开发,为什么要模拟无状态平台?关于 Repository 和 UnitOfWork 模式,不要将它们视为严格绑定到 EntityFramework 的东西。忘记 UI 层中的上下文。这些模式独立于所使用的 ORM,因此您可以轻松切换 DAL 并更有效地测试您的应用程序。

于 2013-04-04T18:58:07.377 回答