问题标签 [unit-of-work]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
8195 浏览

wpf - 在 MVVM WPF 中使用工作单元设计模式/NHibernate 会话

我想我陷入了分析的瘫痪。请帮忙!

我目前有一个项目

在我的案例中,工作单元实现一次支持一个 NHibernate 会话。我当时认为这是有道理的;它从 ViewModel 中隐藏了 NHibernate 会话的内部工作。

现在,根据 Oren Eini (Ayende) 的说法:http: //msdn.microsoft.com/en-us/magazine/ee819139.aspx

他说服观众当与演示者/视图模型关联的视图被释放时,NHibernate 会话应该被创建/释放。他提出了为什么您不希望每个 Windows 应用程序一个会话,也不希望每个事务创建/处置一个会话的问题。不幸的是,这带来了一个问题,因为我的 UI 很容易在一个应用程序中出现 10 多个视图/视图模型。他正在使用 MVP 策略进行演示,但他的建议是否可以转化为 MVVM?

这是否意味着我应该放弃工作单元并让 viewmodel 直接创建 NHibernate 会话?WPF 应用程序一次应该只有一个工作会话吗?如果这是真的,我应该什么时候创建/处置 NHibernate 会话?

而且我还没有考虑过 NHibernate 无状态会话如何适应这一切!我的大脑要爆炸了。请帮忙!

更新:

我在 Rhino Tools 中找到了 Ayende 的工作单元实现。我发现他的实现和我做的有很大的不同。他绝对支持多个会话。经过进一步研究,我认为最好执行以下操作:

  • 废弃我对工作单元的实施
  • 辞职以直接从视图模型中使用 NHibernate 的 ISession 和 IStatelessSession 对象。虽然在我看来它并不理想,但我已经在 Unit of Work 上花费了太多时间,而且它并没有达到现在的效果。必须在某个时候应用 KISS 和 YAGNI。Ayende 的文章和其他一些人指出直接使用这些是可以的,我至少可以感到安慰。
  • 如果我真的不想暴露 ISession,我总是可以使用 Castle.ActiveRecord,但我认为这没有必要。
  • 我可以重用会话工厂代码,所以工作单元的实现并不是完全浪费。
  • 重构我的存储库以允许注入 StatelessSession 和 Session,并在可用时使用无状态:否则使用常规会话。

毕竟,我可以应用每个视图模型打开一个会话/无状态会话的策略,当视图被处置时,让视图模型刷新/处置会话/无状态会话。

听起来像是个计划?

0 投票
0 回答
366 浏览

unit-of-work - 工作单元模式和持久性

我一直在阅读有关工作单元模式的信息,但我对 UoW 实际保存数据的方式感到困惑。

当我们提交更改时,UoW 应该遍历已添加、已更新和已删除对象的列表,并以某种方式找到负责添加、更新、删除特定类型对象的类。

我找不到展示这种技术的例子。

对此的任何建议将不胜感激。

莫什

0 投票
1 回答
2572 浏览

entity-framework - Entity Framework 4“工作单元”模式是通用存储库的方式吗?

我正在研究为我正在处理的新 ASP.NET MVC 项目创建一个 Entity Framework 4 通用存储库。我一直在看各种教程,它们似乎都使用了工作单元模式......

从我一直在阅读的内容来看,EF 已经在 ObjectContext 中使用它,而您只是将其扩展为您自己的工作单元。

来源:http://dotnet.dzone.com/news/using-unit-work-pattern-entity?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+zones%2Fdotnet+(.NET+Zone)

为什么要努力做到这一点?这是使用通用存储库的首选方式吗?

非常感谢,科汉。

0 投票
3 回答
578 浏览

asp.net-mvc - NHibernateUnitOfWork + ASP.Net MVC

我是第一次使用 DDD,所以我是初学者!所以,让我们认为它非常简单:D 我使用 asp.net mvc 2、ddd 和 nhibernate 开发了一个应用程序。我在一个类库中有一个域模型,在另一个类库中有一个存储库,还有一个 asp.net mvc 2 应用程序。我的 Repository 基类,我有一个注入和依赖的构造(我的唯一 ISessionFactory 对象在 global.asax 中启动),代码是:

在我拥有特定的存储库之后,如下所示:

此代码中没有对事务的控制,并且工作正常,但是,我想在我的 asp.net mvc 控制器中制作一些东西来控制这个存储库,一些简单的东西,如下所示:

我听说过 NHibernateUnitOfWork,但我不知道 :(,如何配置 NHibernateUnitOfWork 以使用我的存储库?我应该更改我的简单存储库吗?欢迎提出建议!

所以,谢谢有人读到这里!如果能帮到我,不胜感激!

PS:对不起我的英语!

再见 =D

0 投票
2 回答
998 浏览

c# - NHibernate 和其他 ORM 中的“工作单元”概念是什么意思?

NHibernate 和其他 ORM 中的“工作单元”概念是什么意思?

0 投票
3 回答
2454 浏览

domain-driven-design - 在处理多个数据存储时如何实现存储库模式和工作单元?

我有一个独特的情况,我正在构建一个基于 DDD 的系统,该系统需要同时访问 Active Directory 和 SQL 数据库作为持久性。最初这不是问题,因为我们的设计是在我们有一个看起来像这样的工作单元的地方设置的:

我们的存储库看起来像这样:

在这个设置中,我们的加载和保存将处理两个数据存储之间的映射,因为我们自己编写了它。工作单元将处理事务并包含存储库将用于持久性的 Linq To SQL 数据上下文。活动目录部分由基础设施中实现的域服务处理,并由每个 Save() 方法中的存储库使用。Save() 负责与数据上下文交互以执行所有数据库操作。

现在我们正在尝试使其适应实体框架并利用 POCO。理想情况下,我们不需要 Save() 方法,因为对象上下文正在跟踪域对象,我们只需要在工作单元上添加 Save() 方法以让对象上下文保存更改,以及一种方法用上下文注册新对象。新提议的设计看起来更像这样:

这解决了实体框架的数据访问问题,但没有解决我们的活动目录集成的问题。以前,它在存储库的 Save() 方法中,但现在它没有家了。工作单元只知道实体框架数据上下文。这个逻辑应该去哪里?我认为这种设计只有在您只有一个使用实体框架的数据存储时才有效。任何想法如何最好地解决这个问题?我应该把这个逻辑放在哪里?

0 投票
1 回答
1086 浏览

java - 工作单元模式的验证策略

当我使用工作单元模式(使用 JPA)时,我从存储库中获取一个实体,对其进行修改并将工作单元的 和 处的修改隐式保存到数据库中。

现在我想知道如何使用工作单元模式执行验证。如果我将更改(来自用户输入)应用于域对象并在此之后进行验证,那么即使验证失败,该对象的值也会更改。有什么方法可以避免将具有非法状态的对象写入数据库?回滚工作单元?

OOP 的目标之一是对象监视自己的状态,以便它们永远不会接受非法值。对于这种方法,我必须抛出异常,它与上面的 bean 验证(和 spring 验证)方法相反。但也许它更简单更好。

你会使用什么验证策略(在领域驱动设计中)?

0 投票
2 回答
400 浏览

php - 是否可以在 PHP 中实现分离接口?

我最近问了一个关于解决工作单元数据映射器类之间依赖关系的问题:依赖注入和工作单元模式- (由 Gabor de Mooij 回答 - thx)

在 PoEAA 中,Martin Fowler 建议使用分离接口来管理这些依赖关系。我的问题很简单——实际上是否可以在 PHP 中实现这种模式,或者它是否特定于 Java 接口?我到处搜索,很难在 PoEAA 之外的任何地方找到对这种模式的引用。

0 投票
3 回答
2574 浏览

nhibernate - 如何从 Nhibernate 会话中获取已更改(脏)实体的列表?

在刷新所有更改的实体之前,我需要编写一些业务逻辑绑定。我尝试过的解决方案之一是 IPreUpdateEventListener。但是这个事件监听器已经将对象非规范化为键值。在非规范化之前甚至在刷新之前我都需要一些东西。

所以问题是如何获取已更改(干)实体的列表。

0 投票
2 回答
585 浏览

nhibernate - NHibernate ISession 并在我的工作单元中自动刷新/提交事务

我创建了一个 IDbContext 对象,该对象提供给我的 IRepository 实现。DbContext 为我的业务逻辑提供了一种根据需要创建、提交和回滚事务和提交的方法。它还传输我的 NHibernate ISession,因此我的 IRepository 的 NHibernate 实现可以访问它。

我在 Web 应用程序中使用此设置,其中每个请求创建一个 DbContext 并由所有存储库共享。在请求结束时,我处理了 ISession。

根据您对标准 NHibernate 实践的经验或知识,当我正在处理并即将关闭会话时,是否可以让我的 DbContext 刷新并自动提交任何未完成的事务(前提是没有错误)?