问题标签 [proxy-classes]
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.
design-patterns - 向世界其他地方隐藏一些仅供内部类使用的方法
简短的问题
我有一个C++域模型。它有一些内部 API 使用的方法以及其他公共方法。我不想公开那些 API 方法。我正在考虑使用代理模式来隐藏这些方法。你认为这是个好主意吗?是否有一些设计模式可以实现这一目标?
长示例
假设在某个远程位置有一个机械臂,它可以由软件控制,但也可以由一些技术人员手动移动。它有一些传感器,可以让它知道它拿着哪种物体。在我的项目中,情况完全不同,但我只是以此为例。所以我有一个包含RoboticHeldObject抽象类的 RoboticArm 类。RoboticArm让您知道它持有哪个RoboticHeldObject,除了让您移动手臂。但是,您不能决定拾取和释放对象。这是由操作机器人的技术人员决定的。所以它会是这样的:
由于实现相当复杂,我使用了一个外部类,RobotService,它实际上执行了艰苦的工作。但是,它不是贫血域模型,因为它是RoboticArm实际使用RobotService(因此具有功能),而世界其他地方对RobotService 一无所知。
这里的问题是: releaseObject ()和holdObject()是此处仅由RobotService使用的 API 方法。仅当技术人员释放手臂握住的物体或放置新物体时, RobotService才会调用它们。因此,当RobotService处理某些网络事件时调用它们(请记住,手臂位于远程位置,因此事件是通过网络接收的)。例如:
我的方法
要隐藏这些方法,我会将 RoboticArm 重命名为RealRoboticArm并创建一个RoboticArm代理类:
由于RoboticArm是一个代理,RoboticArm::heldObject() 将调用 realArm->heldObject()、RoboticArm::moveUp() realArm->moveUp() 等等。
RobotService将有一个指向RealRoboticArm实例的指针,因此它可以调用 API 方法,例如 releaseObject() 。但是,应用程序的其他部分只能使用RoboticArm中的方法,因为它们没有指向RealRoboticArm的指针。因此releaseObject ()和holdObject()将对观众有效地隐藏起来。
问题
我不是 100% 确定这是代理模式还是适配器模式。你认为这是为这样一个系统建模的正确方法吗?有更好的模式吗?
c# - Web Service代理类实现接口
我正在寻找一种方法让为 Web 引用(不是 WCF)生成的代理类实现一个通用接口,以便在客户端应用程序中轻松地在 Web 服务访问和“直接”访问我们的业务层之间切换,例如:
CustomSerializableType
但是,生成的代理类中没有引用自定义类型(例如下面的示例中的)。相反,会生成新的相同类型,这使得代理类无法实现接口。
有什么方法可以让生成的代理类引用这些类型,还是我做错了?我是否应该考虑将 Web 服务转换为 WCF 服务?
细节
我们的解决方案包括以下四个项目:
- 业务库(包含业务逻辑,访问数据存储)
- 一个通用库(包含通用功能,包括
CustomSerializableType
) - Web 服务(充当远程客户端和业务层之间的代理)
- 一个窗口应用程序
我们的客户希望 Windows 应用程序能够以两种不同的模式运行:
- 本地模式,应用程序直接使用业务库来访问数据
- 远程模式,应用程序与 Web 服务通信以访问数据
为此,我们创建了一个接口 IBusiness,它位于公共库中,包含所有业务方法。
界面
业务层
网络服务
生成的代理类(为了便于阅读,省略了大量代码)
ruby-on-rails - 具有 ActiveRecord 模型的代理对象 - method_missing 有时不起作用
我一直在使用我的应用程序模型作为定义行为的其他对象的代理。
所以我在我的 BoxBehavior 对象上实现了所有方法,当我在一个盒子实例上调用一个方法时,它会将调用重定向到关联的 boxbehavior 对象。一切正常,除非我尝试在我的购买模型上创建一个钩子,它从它的盒子对象中获取总数并保存它:
当我尝试保存任何关联了盒子的购买对象时,我收到此错误:
而且我不知道下一步该做什么......当我直接在盒子类中实现总方法时,它工作正常......我能做些什么来解决这个问题?代理工作不正常吗?
visual-studio - 重用 WebService,但使用自定义端点
我正在使用一个具有端点的Web 服务http://api.domain_a.com/
,并且使用Visual Studio我可以轻松地生成一个代理类来轻松简单地使用该服务。
但是我想创建一种用户可以使用他们自己的服务(并访问他们自己的数据,而不是我自己的数据)的方式,并且我想知道是否有一种方法可以即时更改服务的基本 URL .
举个例子
我通过将 Web 引用添加到我的项目来生成代理类,但是现在,每个请求我都有一个用户名,我将获得用户设置(女巫包含他们的 URL),我怎么能(如果可能的话)告诉生成的代理是我使用域http://domain_b.com/api
而不是添加 Web 引用时使用的原始代理?
我需要手动调用服务吗?发送和接收 XML 数据?或者有一个“开关”可以用来指向新的 URL?
c# - WCF 代理类的派生接口
问题:
我有两个(或更多)非常相似的类:一个类的属性是另一个类的属性的子集。更具体地说,属性名称和语义是相等的,但不一定是它们的类型。但是,如果具有相同名称的属性的类型不同,则这些类型再次非常相似(在相同的意义上)。
我想为所有相似类集派生公共接口,以便我可以以相同的方式使用不同类的实例。
由于我的类有 100 多个属性,如果有可能,我想避免手动创建接口。
接口应该包含所有相似类的所有属性集的联合。(当读取特定对象不存在的属性时,null
应该返回。当设置了这样的未定义属性时,什么都不应该发生。)所以我猜接口不再合适,而是包装器类或不同的东西......
语境:
我正在使用 WCF 来使用 Web 服务 ( CreateSalesOrder )。服务的输入消息需要 XML 模式类型Request_SalesOrder的元素,该元素由其他 XSD 类型(如Request_Item、Request_ShipToLocation等)的子元素组成。
输出消息携带模式类型 Response_SalesOrder 的元素,该元素具有模式类型Response_Item、Response_ShipToLocation等的相似子元素以及一些附加元素,例如类型Response_PriceTotal的元素PriceTotal。
我想使用 ASP.Net MVC 构建一个使用 Web 服务的 UI。因此,我有一个视图呈现用于创建销售订单的表单。提交 Web 服务请求后,表单字段必须使用来自 Web 服务响应消息的值进行更新。
表单字段绑定到访问代理类属性的视图模型。提交表单时,视图模型必须更新代理类 A 的实例,而如果表单使用响应消息中的值呈现,视图模型将从代理类 B 的实例中读取。
java - 通过 RMI 调用接收代理作为参数时如何获取真实对象?
我有一个使用 RMI 进行通信的服务器和一个客户端,并且我有几个实现远程接口的类。
客户端接收代理没有问题,但是当我发送这个代理对象之一作为另一个 RMI 方法调用的参数时,服务器上的方法接收到代理的引用而不是“真实对象”的引用,它驻留在在同一个JVM中。
是否可以在服务器中接收真实对象实例作为参数(也就是说,通过让 JVM 自动处理转换)?接收本地对象的代理对我来说没有多大意义。
提前致谢!
groovy - 在groovy中使用私有构造函数将闭包映射转换为对象
我正在使用 groovy 为测试用例创建一些模拟类。我基本上是在创建所有方法都返回 null 的虚拟对象,以便我可以运行我的测试用例。
我正在使用以下语法:
所以在这里我试图用我的假工厂对象覆盖单例实例。问题是 MessageFactory 的构造函数恰好是一个私有方法。当我运行上面的代码时,这给了我一个非法访问异常。有没有我可以在 groovy 中创建代理并克服私有构造函数问题的方法?
java - 如何从动态代理中解开原始对象
展开动态代理以检索下面的原始对象的最佳方法是什么?已使用创建动态代理java.lang.reflect.Proxy.newProxyInstance()
谢谢你。
c# - `RealProxy.GetTransparentProxy()` 在什么情况下会返回 `null`?
http://msdn.microsoft.com/en-us/library/system.runtime.remoting.proxies.realproxy.gettransparentproxy%28v=VS.100%29.aspx上的文档并未指出GetTransparentProxy
将返回的场景null
,但是null
当我打电话给我时,我得到了回报。
什么情况下会导致这种行为?
c# - 首先关闭 EF 代码的 CTP5 的 ProxyCreationEnabled 有什么缺点
我的 WCF 服务可以从代码优先模型返回类的唯一方法是将 设置ProxyCreationEnable
为false
使用下面的代码。
这样做的负面后果是什么?一个好处是我至少可以将这些动态类型序列化,以便可以使用 WCF 通过网络发送它们。