工作单元模式

2024-01-29

我正在寻找有关工作单元模式的一些建议。

工作单元上的提交是多次调用还是仅调用一次,然后将对象留给垃圾回收?

注入工作单元 play 是一个好主意,还是在要求对象执行某些工作时我应该在方法调用中传递它?


实现工作单元模式的类型实例通常有一个需要控制其生命周期的所有者。方法如Commit, Open, Close, and Dispose通常是强烈的信号,表明应显式控制类型(或在适当的情况下放置在抽象后面)。

出于这个原因,最好not注入工作单元实例本身,但注入知道如何创建此类工作单元的类型:工厂。

在这种情况下,工作单元充当上下文,当其他对象需要在同一上下文中执行操作(例如保持操作原子性)时,您需要传递它。这可能看起来像这样:

public class MyCommand
{
    private readonly IUnitOfWorkFactory factory;

    public MyCommand(IUnitOfWorkFactory factory)
    {
        this.factory = factory;
    }

    public void Execute()
    {
        using (var context = this.factory.CreateNew())
        {
            this.DoSomeNiceThings(context);

            context.Commit();
        }
    }
}

许多 DI 框架为您提供了定义对象及其依赖项运行的上下文的可能性。这允许您注入工作单元本身并在其所有依赖项中注入相同的实例。这是一个非常有用的功能,但在这种特定情况下我不会这样做,因为代码的正确性取决于您配置工作单元范围的方式。这使得你的代码非常隐含,难以理解并且容易被破坏。 IMO 这样的功能在消费者不关心依赖性的情况下特别有用。因此,此功能对于性能优化、实施缓存策略等非常有用。

是对工作单元的提交 多次调用或仅调用一次 然后将物体留下 垃圾收集?

是否打电话Commit多次是一个有效的场景取决于您如何设计它。在我的生产应用程序中,我经常在事务中运行我的工作单元,这允许我向数据库提交操作(例如获取数据库生成的密钥),同时保持业务操作原子性。

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

工作单元模式 的相关文章

  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • 将标签文本的一部分设置为粗体

    有什么办法可以使一部分label text要大胆吗 label text asd string 想要string部分要加粗 有可能吗 这怎么办 下面的类说明了如何通过覆盖来做到这一点OnPaint in the LabelWinForms
  • 当用户打开文件时如何锁定对文件的访问?

    我正在编写一个 C NET 程序 该程序使用 XmlSerializer 对当前用户正在处理的项目与 XML 文件进行序列化和反序列化 这工作正常 但我试图找到一种方法来防止两个用户从网络驱动器打开同一个文件并让一个用户覆盖前一个用户的保存
  • 您会认为这是单例/单例模式吗?

    想象一下 在 Global asax cs 文件中 我有一个实例类作为私有字段 我们这样说 private MyClass myClass new MyClass 我在 Global 上有一个名为 GetMyClass 的静态方法 它获取当
  • 将变量作为参数传递与传递另一个函数的返回值时出现“无效过程调用”错误

    我收到错误 无效的过程调用或参数 AddRange 当传递一个变量到ArrayList AddRange https msdn microsoft com en US library zhfwys3c 28v vs 110 29 aspx
  • 序列包含多个元素

    我在通过 Linq 获取 RhsTruck 类型的列表并显示它们时遇到一些问题 RhsTruck 只有属性 品牌 型号 序列号 等 RhsCustomer 具有 CustomerName CustomerAddress 等属性 我不断收到错
  • .NET 内存不足故障排除

    在阅读了几篇有关 NET 技术中的内存的启发性文章后 Out of Memory 不是指物理内存 https learn microsoft com en us archive blogs ericlippert out of memory
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 如何使用 Entity Framework 4.1 Fluent API 映射 Enum?

    我在 EF 的工作表之间有些迷失了 就像自由世界的其他部分一样 我确实需要在我的 POCO 中使用枚举 像我交谈过的许多人一样 我非常喜欢使用代码映射枚举 只是因为 我只是不太喜欢图片 我的困境是 我在几乎每一篇文章中都得到了相互矛盾的信息
  • 在业务逻辑中使用反射是一种好的做法吗?

    我需要开发一个由两个主要部分组成的应用程序 具有特定业务类别的业务逻辑部分 例如书籍 图书馆 作者 一个通用部分 可以在数据网格中显示书籍 图书馆 将它们映射到数据库 通用部分使用反射从业务类中获取数据 而不需要在业务类中编写特定的数据网格
  • 在存储库模式中按 ID 进行过滤是否是不好的做法

    我正在使用 ASP NETMVC4 with 实体框架5 基本上每个控制器操作结果按登录用户的公司 ID 过滤数据库结果 我刚刚开始实现存储库模式来返回模型 而不是直接从控制器过滤 DbContext 将companyID传递到存储库中以过
  • 什么是 .NET 程序集?

    什么是 NET 程序集 我浏览了网络 但无法理解其定义 程序集是 net 应用程序的最小部署单元 它可以是一个dll or an exe 它主要有两种类型 私人集会 dll 或 exe 是一个应用程序的专有财产 一般存放在应用程序根文件夹中
  • 使用 Guice + Kotlin 绑定对象列表

    我正在 Kotlin 中使用以下控制器定义编写 JavaFX 应用程序 class MainController Inject private lateinit var componentDescriptors List
  • WPF 媒体格式

    WPF 是否内置对任何音频和视频格式的支持 我将使用 MediaPlayer 和 MediaElement 类来构建一个小型媒体播放器 目前 我不想处理 NET 没有本机支持的编解码器和格式 WPF 默认支持视频格式 WMV MPEG 和一
  • 将存储库接口作为参数传递给域类上的方法是否被认为是糟糕的设计?

    我们的领域模型现在非常贫乏 我们的实体大多是空壳 几乎纯粹是为了保存值和导航到集合而设计的 我们正在使用 EF 4 1 代码优先 ORM 到目前为止的设计是为了让我们的新手开发人员在早期迭代期间查询上下文时免受可怕的 LINQ to Ent
  • 任务和异步任务之间的区别

    C 提供了两种创建异步方法的方法 Task static Task
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下

随机推荐