问题标签 [proxy-pattern]

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 投票
0 回答
88 浏览

javascript - 如何使用代理应用陷阱?

为什么我的取款陷阱功能不起作用?

到目前为止一切顺利:checkingAccount 就像我预期的那样是个废话

这里我有一个问题。似乎正在执行的方法是 accountChecking.withdraw ,当它尝试更新基金时,会触发基金财产的陷阱。

0 投票
1 回答
99 浏览

spring-mvc - 数据传输对象 (DTO) 和代理对象有什么区别?

我只是看不出两者之间的区别。

0 投票
0 回答
317 浏览

haskell - 如何从 GADT 的类型族中的代理中提取类型信息?

我有以下片段:

一般的想法是,我正在尝试将其Foo用作我可以做的数据类型

并确保传递给的代理类型是类型族FooProxy的一部分IsEnum(我不能这样做FooProxy :: Enum e => Proxy e -> Foo,因为目前只支持等式约束)。

但是当我尝试编译它时,我得到了错误:

问题是当我想从我Foo的类型转换为具体类型时FromFoo,我想FooProxy评估为代理类型。所以我试图模式匹配Proxy以返回代理类型e,但它似乎IsEnum e ~ True再次检查约束。我认为只有在创建值时才会检查约束,但在模式匹配FooProxy时似乎会再次检查。

0 投票
1 回答
434 浏览

javascript - `Proxy` 将 `this[toString]` 与 `this[Symbol.toStringTag]` 混淆

#toString只有当我(尝试)通过missingMethod-like访问它时才会发生这种情况trap

我有一个工厂createIterface,它返回一个Proxy具有大量方法的对象。在这些方法中,我有#toString()#id()#id返回interface与调用者具有相同属性的 a 并且工作得很好;#toString应该将 my 转换interface为字符串,但它失败了。所有interface的方法——包括#id#toString——都在一个#Symbol.for("__methods")属性内。我这样做是为了调试目的:

抛出的错误表示它不能(隐式)将 Symbol 转换为 String(这是真的)。事情是,#toString不是一个符号。但是,有一个众所周知的 Symbol#toStringTag来定义Object#toString()行为。当我用其他方法实现它时,我#toString()被忽略并interface返回'[object Object]'

如果我对外部的方法进行编码,__methods则一切正常:

除了一些奇怪的浏览错误(我正在运行最新的 Chrome,在撰写本文时它是 v. 71.0.3578.98),我不知道为什么会发生这种情况或如何修复它。

有人可以帮忙吗?

0 投票
1 回答
166 浏览

javascript - Javascript 观察者或代理,所有更改都通过代理

我正在用 Javascript 编写数组的一个子类,以便更好地支持矩阵运算(我知道其他存在,这部分是为了让我重新自学线性代数),我想要的是有一些属性可以随时重置调整矩阵中的任何值。像行列式这样的一些计算是计算密集型的,我希望能够存储它们以避免重新计算,但是每当任何矩阵元素发生变化时,它们都需要重置为空。

从本质上讲,我想要的是已弃用的Array.observe()。而替换,代理,对于这件事来说似乎是很多开销。正如在使用未直接解决的代理对象检测 Javascript 数组中的更改的一些评论中所提到的,我不想只通过代理访问我的矩阵。我在迄今为止编写的代码中使用了很多方便的[i][j]索引。[mat[i], mat[j]] = [mat[j], mat[i]]

基本上,我想要任何类似mat[0][0] = 10mat.push([2,4,5])更新矩阵中的值的东西来设置mat._determinant = null。或任何等效的标记方法,需要在下次请求时重新计算。如果有人可以帮助我弄清楚实现,我并不反对使用代理,我只是希望这个 set-to-null-on-update 属性是我的类功能所固有的。

我真正想要的是一种重载基本方法(如[]la C#)的方法,因此执行更新的函数会在不更改语法的情况下触发它,但我已经放弃了在 JS 中没有它。

0 投票
3 回答
5542 浏览

kotlin - 如何在 Kotlin 常用代码中创建动态代理?

如果我在 JVM 上,我可以这样做:

运行它会打印Invoked method: put. 如何在 Kotlin通用项目中做这样的事情?

编辑:我不想在我的公共模块中使用 Java 中的任何东西。我知道常见的项目是如何运作的。相反,我感兴趣的是是否有基于 Kotlin 的解决方案。

编辑 2:我不想代理Map课程。我正在寻找类似ProxyJDK 中的东西,我可以用它来代理任何接口。对困惑感到抱歉。

0 投票
1 回答
103 浏览

c# - C# 监视闭源类和原语的值更改

我需要能够监控大量对象的变化。几乎在任何情况下,我都可以使用INotifyPropertyChanged并收工。然而,我的情况并没有那么简单。我的项目的目标是创建一个可以插入、监控和访问任何对象的模拟。

插入是通过使用 Fluent API 的反射完成的,该 API 指定要包含在模拟环境中的属性和字段。它看起来像这样:

然后将属性和字段包装在一个Variable类中并存储在一个Environment类中。

这会正确存储对我尝试包含的所有字段和属性的引用。但是,我希望能够监视所有这些更改,并且大多数包含的字段都是闭源类或原语,它们都没有实现 INotifyPropertyChanged 或无法派生。

我来自 JavaScript 背景,您可以通过创建一个可以覆盖属性 getter 和 setter 的对象代理来完成此操作,并且由于 JavaScript 是鸭子类型的,您可以用代理替换实际的对象实例。

有没有办法在 C# 中做同样的事情?我想 C# 的类型安全规则不允许这样的做法,尤其是对于原语。然而,据我所知,监视这些类的唯一方法是以某种方式拦截正在设置值的操作。

0 投票
2 回答
5577 浏览

javascript - Javascript 代理和传播语法,结合 console.log

所以,我在玩 Proxy 对象,在尝试了解它们如何与扩展语法和解构混合时,我偶然发现了这种奇怪的行为:

上述脚本输出(在节点 v10.15.1 上):

这是来自控制台日志的意外输出:

为什么 console.log(test); 输出显示对象的属性都是未定义的?如果在调试某些东西时发生,这可能会引起一些严重的头痛。

它是节点本身的错误还是console.log的实现中的错误?

0 投票
0 回答
480 浏览

c# - .NET DispatchProxy 如何工作/实现?

我正在寻找一种在 .NET (Core) 中实现类 Proxy 的方法,并发现框架中实际上有一个名为 DispatchProxy ( source code ) 的实现。当我查看源代码时,它实际上是在DispatchProxyGenerator实现的。

我有兴趣知道它是如何实现的。但是,由于我的知识有限,我在这里陷入了僵局。我无法真正理解它是如何工作的。有人可以启发我吗?

我对代码的最佳猜测是它尝试在运行时创建类型成员使用System.Reflection并发出一些 IL 代码,是否正确?假设我想创建一个非常简单的 DispatchProxy 实现,我可以简单地使用类似的东西DynamicObject并返回一个委托吗?

0 投票
1 回答
380 浏览

android - ContextWrapper 的目的是什么(拥有 Context 的代理)?

根据 Android 文档,ContextWrapper是一个“[p]roxying 实现,Context它简单地将所有调用委托给另一个Context. 可以子类化以修改行为而不更改原始Context.”

我对代理模式没有太多经验。它在这里如何使用以及用于什么目的?换句话说,为什么它的间接子类(例如ActivityService)不直接子类化呢?