问题标签 [proxy-object]

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 投票
6 回答
397 浏览

c++ - 是否允许在 std::string 的实现中进行这种优化?

我只是在考虑std::string::substr. 它返回一个新std::string对象,这对我来说似乎有点浪费。为什么不返回一个引用原始字符串内容并且可以隐式分配给 a 的对象std::string?一种对实际抄袭的懒惰评价。这样的类可能看起来像这样:

此类的公共接口将模仿 real 的所有只读操作std::string,因此使用将是无缝的。std::string然后可以有一个新的构造函数,它采用 astring_ref所以用户永远不会更聪明。当您尝试“存储”结果时,您最终会创建一个副本,因此引用指向数据然后对其进行修改没有真正的问题。

这个想法是这样的代码:

std::string总共构造的对象不超过 2个。对于执行大量字符串操作的代码,这似乎是一个有用的优化。当然,这不仅适用于std::string,还适用于任何可以返回其内容子集的类型。

据我所知,没有实现这样做。

我想问题的核心是:

给定一个可以根据需要隐式转换为 a 的类,std::string它是否符合库编写者将成员的原型更改为返回类型的标准?或者更一般地说,库编写者是否有余地在这些类型的情况下返回“代理对象”而不是常规对象作为优化?

我的直觉是这是不允许的,原型必须完全匹配。鉴于您不能仅对返回类型进行重载,那么库编写者将没有空间利用这些类型的情况。就像我说的,我认为答案是否定的,但我想我会问:-)。

0 投票
1 回答
291 浏览

cocoa - 使用代理对象观察对象

我是否应该能够在代理对象上设置观察者,更改代理对象指向的内容并且仍然能够观察真实对象的更改?

一个例子可以最好地解释这一点。考虑以下。

在标题中:

在初始化或从 NIB 方法唤醒中:

更改对象的其他一些方法:

这不会触发aNewWidget. 但是,如果我addObserver按如下方式在分配之后移动到,它会起作用:

我假设第一种情况不起作用是因为观察者正在观察代理对象引用的内存指针,并且由于在添加代理观察者时没有对象,所以没有什么可观察的。但是,如果我初始化一个小部件并观察它,然后分配代理对象aNewWidget,它仍然不会观察到更改,除非我在分配后添加观察者(当然需要在对象更改时删除观察者)。

另外,如果aNewWidget被破坏,在这种情况下会发生什么?因为观察者在代理上,这是否否定了在销毁对象之前移除观察者的需要?(我认为它没有)。

理想情况下,我希望能够在代理上设置观察者并交换我想要代理对象的任何小部件引用,而不必担心添加和删除观察者,除非MyController类消失,在这种情况下我可以处理在 dealloc 中移除观察者。

任何帮助/评论/建议表示赞赏。

0 投票
1 回答
4044 浏览

php - 用其他对象就地替换对象

假设我想构建一个使用延迟加载机制的数据库抽象层。

如果我要求层加载根对象,它会加载其外部表示并自行构建。

然后它以某种方式识别某些链接对象存在。由于预先加载所有内容可能成本很高,因此它为相关对象建立了代理。这样的代理应该能够被传递。

如果在这样的代理上调用第一条消息,它会加载其外部表示并构建自己。由于对代理的引用可能已被传递,因此创建的对象需要就地替换现有的代理对象。

我可以在 PHP 中用另一个对象就地替换一个对象吗?

0 投票
2 回答
1081 浏览

node.js - ES6 代理无法拦截数组索引

这是我的测试代码(使用node --harmony-proxies foo.js

为什么最后两行无法打印 5,为什么代理无法拦截看起来像整数的属性?它是一个实现错误还是它是如何指定的?是否有单独的方法来拦截数组索引,以便我可以实现自己的数组(例如稀疏数组)?

0 投票
1 回答
5272 浏览

java - 在现有 SOAP Web 服务上构建 REST 包装器

我的团队正在现有的基于 SOAP 的 Web 服务上开发 REST 服务包装器。我们并不完全了解 SOAP 服务的内部结构,只是可以访问 WSDL 文件。我们的 REST 服务包装器将只是一对一的映射。

我知道它实际上并不遵循 REST 哲学,尽管请允许我称它为 REST 服务。此 REST 服务将部署在 Tomcat 上,并且许多客户端将同时访问它。

当前的实现是,我们将为每个客户端创建一个代理对象(使用 SOAP WSDL 代理类)。此代理对象将用于调用 SOAP API。SOAP 需要在代理对象上绑定身份验证详细信息,因此我们在运行时将每个客户端的这些对象保存在内存中,同时进行第一次 REST 调用以建立会话。

保存的对象是在运行时使用 SessionID 标识符获取的。现在的问题是这些代理对象占用了很大的内存块,并且只支持少数 REST 客户端。(使用默认的 64 MB,只有 19 个 REST 客户端可以运行)。这是现在我们要改变方法的麻烦,需要您的建议。

请让我知道是否存在任何更好的解决方案。我们不希望数据库存储对象。

0 投票
1 回答
98 浏览

dart - 飞镖代理对象可以或不能分配给类型变量?

我有以下测试代码:

从我在api 站点上读到的关于代理的内容中,我认为可以将代理分配给任何东西而不会在运行时获得 TypeError,但这里不是这种情况。如果在不抛出 TypeErrors 的情况下无法将代理分配给任何东西,那么让代理基本上实现他们想要的任何东西有什么意义。在文档中它说将代理分配给任何变量类型都不是静态类型错误。

0 投票
1 回答
845 浏览

c# - 动态生成代理对象(以编程方式生成从给定对象派生的类并覆盖单个方法)

我想创建一个执行以下操作的方法:

  1. 将任意实例作为参数
  2. 生成一个包装器实例,以与传递的实例相同的方式提供所有属性和方法
  3. 用不同的实现覆盖一个方法
  4. 返回生成的实例

这与 ORM 创建的代理对象非常相似。它们通常不返回真实的模型类,而是行为相同的代理对象,除了延迟加载等。

那里有合适的东西吗?(我看到了 CodeDom,但也看到了我需要为方法实现发出的操作码......)

0 投票
1 回答
1057 浏览

c# - 如何在另一个会话中更新具有惰性属性的对象(代理对象)?

我试图在会话中获取具有惰性属性的对象,并尝试在另一个会话中更新它。但它没有这样做,并出现错误:SecUserProxy 没有持久性(实际类是 SecUser)

我正在使用 NHibernate 3.4。当我用谷歌搜索时,我知道它是一个已修复的错误。

我还看到了这篇文章,其中说如果您的代理对象实现了 INhibernateProxy,您可以使用 NHibernate 取消代理该对象。由于 NHibernate 不再支持可插入代理工厂(如 Castle、LinFu 等),它使用内部代理工厂,我假设内部代理工厂可能是 INhibernateProxy

所以我在新会话中执行了以下操作,我想将我的对象更新为:

期望获得相同的对象,但具有真实类型,即 SecUser,以便它可以更新而不会出现任何错误。但它仍然返回一个代理对象。

我无法理解发生了什么?

更新: 我刚刚意识到'secUserobj'不是INhibernateProxy。那么我怎样才能让它 INhibernateProxy 以便在另一个会话中更新我的对象呢?

0 投票
1 回答
66 浏览

c# - 在 C# 中使用代理将构造函数调用替换为工厂方法调用

我可能要疯了,但我发誓我已经看到了一个片段,它允许你的代码的使用者编写,而在幕后调用new Foo()类似的东西而不是构造函数。FooProxy.Create()我一直在寻找和寻找它,但现在我根本找不到它。我根本不打算使用它,因为它对我来说看起来像是一种反模式,但我想确保我没有做梦。

0 投票
2 回答
343 浏览

java - 如何在 Java 中实现对象代理或类代理?

我需要在我的项目中扩展一个 .class 文件,并且需要覆盖一个简单的方法。考虑我有一些.jar包中的A类。现在我想覆盖AI类的test()方法,使用创建A的子类B并覆盖它。现在在我的应用程序包(它是 .jar)中为 A 类创建对象。该对象调用 A 类的方法。但我想调用 B 类方法。

我的想法是在整个应用程序中代理对象创建。每当创建 A 类的 obj 时,我想要一些配置来创建 B 类的对象并移交给 A 类启动。

请有人帮我实现这种机制。