问题标签 [delegation]

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 投票
3 回答
3459 浏览

iphone - Objective-c 异步通信:目标/动作还是委托模式?

我正在处理一些异步通信情况(事件驱动的 XML 解析、NSURLConnection 响应处理等)。我将尝试简要解释我的问题:

在我当前的场景中,有一个服务提供者(可以与 xml 解析器对话或进行一些网络通信)和一个客户端,可以要求服务提供者异步执行它的一些任务。在这种情况下,当服务提供者完成其处理时,它必须将结果传回给客户端。

我正在尝试找到一种模式或经验法则来实现这种事情,我看到了 3 种可能的解决方案:

1.使用委托模式:客户端是服务提供者的委托,任务完成后会收到结果。

2. 使用目标/动作方法:客户端要求服务提供者执行一项任务并传递一个选择器,一旦完成任务,服务提供者必须调用该选择器。

3.使用通知

更新)在尝试解决方案#2(目标和行动)一段时间后,我得出的结论是,就我而言,最好使用委托方法(#1)。在我看来,以下是每个选项的优缺点:

委托方式:

  • 1 (+)选项 1 的好处是我们可以检查编译时错误,因为客户端必须实现服务提供者的委托协议。

  • 1 (-)这也是一个缺点,因为它导致客户端与服务提供者紧密耦合,因为它必须实现其委托协议。

  • 1 (+)它允许程序员轻松浏览代码并找到客户端的什么方法,服务提供者正在调用以传递其结果。

  • 1 (-)从客户端的角度来看,一旦有结果,服务提供者将调用什么方法并不容易。这仍然很容易,只需转到委托协议方法就可以了,但#2 方法更直接。

  • 1 (-)我们必须编写更多代码:定义委托协议并实现它。

  • 1 (-)此外,委托模式实际上应该用于委托行为。从语义上讲,这种情况不会是委托的确切情况。

行动/目标方法

  • 2 (+)选项 2 的好处是,在调用服务提供者方法时,还必须指定指定回调操作的 @selector,这样程序员就知道将调用哪个方法来处理结果。

  • 2 (-)与此相反,在浏览服务提供者代码时,很难找到客户端会回调哪个方法。程序员必须转到服务调用并查看正在传递的@selector。

  • 2 (+)这是一个更动态的解决方案,并且减少了部件之间的耦合。

  • 2 (-)也许是最重要的事情之一:它可能导致运行时错误和副作用,因为客户端可以将不存在的选择器传递给服务提供者。

  • 2 (-)使用简单和标准的方法 (#performSelector:withArgument:withArgument:) 服务提供者最多只能传递 2 个参数。

通知:

  • 我不会选择通知,因为我认为它们应该在需要更新多个对象时使用。另外,在这种情况下,我想直接告诉委托/目标对象在构建结果后要做什么。

结论:在这一点上,我会选择委托机制。这种方法提供了更高的安全性,并允许轻松浏览代码以跟踪向委托发送服务提供者操作的结果的后果。这个解决方案的消极方面是:它是一个更静态的解决方案,我们需要编写更多代码(与协议相关的东西),并且从语义上讲,我们并不是真正谈论委托,因为服务提供商不会委托任何东西.

我错过了什么吗?你推荐什么,为什么?

谢谢!

0 投票
5 回答
721 浏览

c++ - C++ 类委托构造函数问题

感谢您的阅读。委托类称为 Sensor。它需要在构造函数中设置一个引用,例如:

我有一个类 testFactory。如果我现在输入

class testFactor{ ...stuff... private: Sensor mySensor;}

我得到了所有的问题。它不能分配抽象对象。或者它不能声明变量,或者不知道变量的类型。

即使将传感器作为静态变量从标头中取出到 cpp 中也无济于事。

只有当我将传感器构造函数更改为无效/非构造函数时,我才不会遇到任何问题。

但是我必须在传感器中使用 setRed 函数,这可能会导致更多问题。

希望您能帮助我:声明一个变量并持有一个具有非 Void 构造函数的类

0 投票
4 回答
253 浏览

objective-c - 集中我的目标 C 应用程序的网络代码

我正在尝试集中我的应用程序的网络代码。基本上,在任何需要来自服务器的信息的地方,我都会创建我的类 ServerRequest 的对象 serverRequest 来获取信息。ServerRequest 完成后,需要将信息发送回调用对象。当然它应该异步工作——我不希望我的应用程序在等待时停止。

信息的返回是棘手的部分。看来我的选择是授权和通知。据我所知,他们都有自己的问题:

委托:我将自己作为 serverRequest 对象的委托。问题是,如果我在请求完成之前被释放,serverRequest 将发送一个已释放对象的消息,我的程序将崩溃。为了防止这种情况,我必须跟踪我的所有服务器请求(可能不止一个),并在我的 dealloc 方法中让它们都知道,这样我就不会再收到任何消息了。这一切都是可能的,但它确实看起来很痛苦。

通知:传递信息似乎需要做很多工作。我必须将自己添加为通知中心的观察者,然后在我解除分配时删除自己。此外,我必须将完成后发布哪种通知的信息传递给 ServerRequest。我的 ServerRequest 必须将接收到的数据推送到一个 NSDictionary 中,然后我在它通过后将其取回。

这两种方法都应该可以工作,但它们似乎都需要付出很多努力才能让 ServerRequest 唤醒调用代码并将其传递给一个对象。我认为通知更灵活一点,痛苦少一点,导致崩溃的可能性更小,但我对这两种方法都不满意。对于任何反馈,我们都表示感谢。谢谢。

0 投票
2 回答
15417 浏览

asp.net - ASP.Net Web 应用程序尝试使用模拟和委托连接到 SQL Server

我正在尝试在 Intranet ASP.Net Web 应用程序中使用模拟和委派,以便将经过身份验证的用户凭据传递到 SQL Server。

Web 服务器和 SQL 服务器是两台独立的机器,但在同一个域中,因此需要委托。

我做了以下事情:

  • 设置<authentication mode="Windows"/><identity impersonate="true"/>在我的网络应用程序的 web.config 中。
  • 启用了从 Web 服务器到 Active Directory 中 SQL Server 上的 MSSQLSvc 服务的约束委派。
  • 通过 IIS 在网站中仅启用 Windows 身份验证。

显然这应该都可以工作,但它没有(SQL Server 拒绝访问匿名用户 - “用户'NT AUTHORITY\ANONYMOUS LOGON' 登录失败”)。

在 IIS7 中,应用程序池设置为使用集成管道模式并使用 NetworkService 标识运行。该网站仅启用了 Windows 身份验证,扩展保护已关闭,内核模式身份验证已启用,并且 NTLM 是提供者。

我读过的所有网页似乎都表明我的设置应该可以工作。我错过了什么?

0 投票
3 回答
19010 浏览

composition - 组合与委托

在实现方面是否有任何区别,因为组合设计与委托不同。例如,下面的代码似乎在进行委托,因为用户不使用 b 就无法访问组合对象(即“a”)。因此,用户需要调用 b 类的接口,然后“b 类”调用“a 类”的适当接口使其委托。这有意义吗?

0 投票
1 回答
198 浏览

iphone - 如何调用委托对象?

我的协议:

我设计这个协议是为了处理我的 rootView 控制器中模态视图控制器的解除。我的 rootView 控制器采用了这个协议,声明如下:

我使用开箱即用的:

- 显示模态控制器......工作正常。但是,我对如何进一步执行此协议以处理控制器的解雇感到困惑。

显然,我通过使用规定的方法正确地实现了协议。我希望该方法在调用时关闭我的视图控制器。我还希望通过点击 modalViewController 中的后退按钮来调用它。

正如苹果文档所说,“在某些情况下,一个对象可能愿意将其行为通知其他对象,以便他们可以采取任何可能需要的附带措施。” 我的目标是让我的 ElecticalViewController 通知其父级(RootViewController)它应该被解雇。应该通过点击后退按钮来触发解雇。对象如何完成这个通知?

0 投票
3 回答
9532 浏览

openid - 将 OpenID 委托给 Google(不是 Google Apps)

是否可以使用我的个人网站/博客登录使用openid的网站,并委托给我的 Google 帐户?


好的,我在 SO 上搜索了这个问题,但没有好的答案。花了一些时间后,我想出了如何做到这一点。我将自己回答这个问题,以分享它。

0 投票
2 回答
2078 浏览

iphone - 直接调用 UITableViews 委托方法

我正在寻找一种直接调用编辑方法的方法。

我有我所有的逻辑来动画操纵单元格,在这个方法中从我的模型数组中删除等等。当用户滑动、添加或重新排列时会调用它,但我想手动/直接调用它,因为后台线程会更改我的模型。

我已经像这样构建了一个 NSIndexPath:

我只是不知道如何调用类似的东西:

我是否需要以另一种方式访问​​这种普通样式 UITableView 的方法?

谢谢:)

0 投票
1 回答
994 浏览

internet-explorer-8 - Mootools 1.2.4 委托在 IE8 中不起作用...?

所以我在表单旁边有一个列表框。当用户单击选择框中的选项时,我会请求相关数据,以 JSON 对象的形式返回,该对象会被放入表单元素中。保存表单后,请求通过并使用更新的数据重建列表框。由于它正在重建,我试图在列表框的父 div 上使用委托来获取 onchange 代码。我遇到的麻烦是 IE8(大震动)没有触发委托事件。

我有以下 HTML:

以及以下脚本:

(我取出了一些不相关的东西)。所以这一切都在 Firefox 中按预期工作,但 IE8 拒绝在 select 元素上触发委托的更改事件。如果我将更改功能直接附加到选择,那么它工作得很好。

我错过了什么吗?IE8 不喜欢 :relay 吗?

旁注:我对 mootools 和 javascripting 等很陌生,所以如果有什么可以在代码方面改进的东西,也请告诉我.. 谢谢!

0 投票
1 回答
1882 浏览

wcf - 在 2 台机器边界(3 台机器)上使用模拟时 WCF 失败

这些场景各自发挥作用。当我把它放在一起时,它就坏了。

我有一个使用 netTCP 的 WCF 服务,它使用模拟来获取呼叫者 ID(将在此级别使用基于角色的安全性)

最重要的是使用带有 TransportCredientialOnly 的 basicHTTP 的 WCF 服务,它也使用模拟

然后我有一个连接到 basicHttp 的客户端前端。

游戏的目的是从底部的 netTCP 服务返回客户端用户名 - 所以最后我可以在这里使用基于角色的安全性。

每个服务都在不同的机器上-当您在本地和远程运行客户端时,当您删除它们对其他服务的任何调用时,每个服务都可以工作。IE 问题仅在您跨越多个机器边界时才会出现。

即,当我将每个部分连接在一起时,设置会中断 - 但它们本身可以正常工作。

我还指定

方法中的 [OperationBehavior(Impersonation = ImpersonationOption.Required)] 和

将 IIS 设置为仅允许 Windows 身份验证(实际上我仍然启用了 ananymous,但禁用没有区别)

这种模拟在我在机器 A 上有一个 netTCP 服务的情况下工作得很好我收到以下错误:

例外是“套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或者是潜在的网络资源问题造成的。本地套接字超时为“00:10:00”,内部消息为“现有连接被远程主机强制关闭”

我开始认为这更像是一个网络问题而不是配置......但后来我抓住了稻草......

配置文件如下(从客户端到 netTCP 层)

客户端的服务(basicHttp 服务和 netTCP 服务的客户端)

最后是 netTCP 层的服务