gpt4 book ai didi

class - 什么是无状态类?

转载 作者:行者123 更新时间:2023-12-05 08:24:26 25 4
gpt4 key购买 nike

我想知道无状态类的缺点是什么(如果有的话)?有没有人见过一个真实世界的应用程序,其中某些用例强制创建无状态类(请不要问候世界)?我认为无状态类意味着没有任何字段的类。

最佳答案

这是一个真实世界的例子: Writing plugins for Microsoft Dynamics CRM .

在该文档中,您会看到一条说明:“插件的 Execute 方法应编写为无状态的”。基本上,无状态类意味着不应该有全局变量(除了一些特殊情况,除非有人问,否则我不会讨论)。

CRM 强制插件开发人员这样做的原因是因为 CRM 试图通过缓存和重用插件类的实例来提高性能。CRM 执行其插件的方式大致如下:

主线程:

YourCustomPlugin yourCustomPluginCached = new YourCustomPlugin();

然后:线程 1:

yourCustomPluginCached.Execute(context1);

和线程 2:

yourCustomPluginCached.Execute(context2);

一些开发人员做错的是他们会创建一个全局变量来存储上下文,他们将其设置为 Execute() 方法中的第一行。这样他们就不必在所有方法之间传递它。但这实际上是一个巨大的错误。因为如果他们这样做,并且在上面的场景中,如果 thread2 中的执行在 thread1 的执行完成之前开始。这意味着 thread1 中的 context1 将被 context2 覆盖。现在该插件将产生一些意想不到的结果。在 99% 的情况下,即使以这种方式开发不正确,也没有问题,或者没有明显的问题。但在 1% 的情况下,它会导致出现问题,并且开发人员很难找出问题所在,并且在测试/调试时可能永远不会发生。所以它可能会长期不固定。

关于class - 什么是无状态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com