标签: mediator

在Delphi中实现Mediator模式而不获取循环引用

对于那些熟悉Mediator模式的人......

我想在Delphi中实现Mediator模式,但是Delphi编译器无法处理所需的循环引用.

查看"设计模式"中的原始GOF图,Mediator具有对每个同事的引用,但许多同事对象都有对Mediator的引用.

这在大多数语言中都不是问题,但是我的Delphi编译器给了我'F2047循环单元引用...'

请问这种方法,使用接口,有什么用处?(似乎很复杂)

我正在使用Delphi 2010

[ 解决方案摘要 ]

只是总结一下接受的答案:在允许循环引用的语言中,您可以省略抽象Mediator类(如第278页的GoF"实现"部分中所述).在没有抽象Mediator类的情况下,在Delphi中实现Mediator的唯一方法是将所有类放在一个Unit中.

否则,除了具体的子类之外,还需要一个额外的抽象Mediator基类.

您对三个单元的使用条款如下所示:

ConcreteColleage1使用Mediator
ConcreteMediator使用Mediator,ConcreateColleague1
Mediator(不使用)

没有循环参考!

delphi mediator

8
推荐指数
2
解决办法
930
查看次数

Mediator C++ GUI示例

我听说过某个地方@web我将能够找到使用GUI组件的Mediator的好C++示例.但是,我试图找到只有GoF样本或来自巫术和类似的东西,这对我没有帮助.

那么......你知道在哪里可以找到提到的GUI样本吗?

很抱歉这个问题,但这对其他人也很有用.

c++ design-patterns mediator

7
推荐指数
1
解决办法
1456
查看次数

Swing MVC - 事件传播和数据共享

我试图在swing应用程序中应用MVC模式.但是我面临两个主要问题,因为你有嵌套的面板层次结构,例如父 - >孩子 - >大孩子 - >大孩子.

问题1:当您有这样的层次结构时,如何在控制器和视图之间传输数据?如果我将数据从父母传递给孩子,那么就会有很多重复,如果我改变一个孩子,所有父母都需要改变.我不希望视图直接从数据库访问数据,我希望数据只通过控制器传输到视图.

问题2:如何在这种层次结构中将事件从视图传播到控制器?我正在考虑使用PropertyChangeListener.如果控制器必须采取任何操作,则将查看firePropertyChange事件.控制器将监听这些事件并执行某些操作.但是,如果我为层次结构执行此操作,那么将会出现代码重复.

我有三个可能有用的想法:

  1. 为每个面板使用控制器,但这样我最终会得到很多控制器.
  2. 使用Mediator设计模式,提供视图和控制器之间的通信.
  3. 使用将从视图中侦听所有属性更改事件的Central Reciever&Notifier,并通知感兴趣的控制器.但这只会解决我的第二个问题:

请参考下图了解第3个想法的图片.如果是第二个,调解员将进入中心.

如果有人以更好的方式实施此类问题,请评估并告知我们.

在此输入图像描述

java model-view-controller swing mediator observer-pattern

7
推荐指数
1
解决办法
571
查看次数

WSO2 ESB DBLookup介体查询多行

正如它在DBLookup Mediator的文档中所说的那样,它只返回查询的第一行,如果忽略则返回其他结果.

我想知道是否有一种"最好的方法"来运行一个返回多个记录然后处理它们的查询(SELECT*FROM X).现在有一天我们正在实现实现axis2服务,但是有另一种方法使用wso2 esb提供的调解器的组合来完成该要求吗?

提前致谢.

圣地亚哥.

wso2 mediator wso2esb

7
推荐指数
1
解决办法
2638
查看次数

观察者模式与中介模式

我做了一些谷歌搜索,是的,我知道有关这两者之间的差异的问题之前已经在stackoverflow和整个网络上被问过.但我主要找到措辞有问题的答案,这可能令人困惑.

我的问题是,如果有人在这里可以为我提供两个中介和观察者模式的视觉示例,可以清楚地展示两者之间的差异.在Javascript中.谢谢!

javascript mediator observer-pattern

7
推荐指数
1
解决办法
1842
查看次数

MVVM:Model和ViewModels之间的通信

我正在使用MVVM模式开发WPF应用程序.我正在使用MVVM Light库,我也尝试使用依赖注入器(我正在考虑Ninject和Unity).

我已经阅读了很多博客文章,我对让我的课程相互沟通的"正确"方式感到很困惑.特别是,我不知道何时使用依赖注入以及何时依赖于介体模式.

让我们考虑一个例子.我有一个ViewModel,我们称之为DataViewModel,以及提供某种数据的Data类.如何在它们之间进行通信更好:

A.使用IData接口向DataViewModel注入依赖项?这样,Data就不必依赖Messenger,但如果Data发生变化,它必须提供一个事件,而ViewModel必须订阅它.

B.依靠中介模式(在MVVM Light中实现为Messenger)并在Model和ViewModel之间发送消息?这样就根本不需要使用依赖注入,因为整个通信将基于消息.

此外,我的ViewModel是否应该在其他ViewModel上注入依赖项,或者仅仅依靠Messenger更好?如果是第一个,是否有必要为每个ViewModel定义一个单独的接口?我认为为每个VM定义一个接口将是一项额外的工作,但也许值得.

wpf dependency-injection mediator mvvm-light

6
推荐指数
1
解决办法
4116
查看次数

使用c#在中介模式中的循环依赖

我有一个关于我想在我的应用程序中实现的中介模式的问题(使用C#).在我的代码中实现模式时,我遇到了循环依赖.类的结构如下:

MediatorColleague组件/类在不同的程序集中,并且作为中介模式需要两个组件(类)相互使用.在引用彼此时出现问题.

请考虑以下代码:

namespace Mediator
{
   public abstract class IMediator
   {
      public IColleague colleague{get;set;}
      void Register();
      void Send();           
   }
   public class MediatorA:IMediator
   {        
     void Register(){//code here}
     void Send(){//code here}       
   }
 }
Run Code Online (Sandbox Code Playgroud)
namespace Colleague
{

    public abstract class IColleague
    {
        IMediator mediator;
        void Send();
        void Recieve();       

    }
    public class ColleagueA:IColleague
    {

        void Send(){//code here}
        void Recieve(){//code here}       

    }
}
Run Code Online (Sandbox Code Playgroud)

由于Mediater和同事在不同的命名空间和程序集中,如何解决循环依赖?

c# design-patterns mediator

6
推荐指数
1
解决办法
819
查看次数

wso2 ESB:分割/聚集模式 - 单一响应

不是一个问题,而是一个答案.我是wso2 ESB的新手,并希望在POC中实现拆分/收集EIP的测试运行.我按照我找到的示例,立即得到了一个返回单个响应的工作配置.然而,要获得所有回复,需要花费相当多的时间才能弄明白.大多数给定的样本似乎产生了相同的意外结果.我希望如果遇到同样的问题,这些行对你有帮助.

建立

我使用soapUI示例服务(搜索操作)作为服务后端.我发送了一个组合消息,搜索两个项目到代理服务器(参见下面的artefact)迭代中介器拆分消息并将其转发到调用soapUI模型的端点.该总调解人等待所有响应,并试图把它变成一个结果消息.

问题

虽然拆分器工作正常,但聚合器返回一个结果元素而不是预期的元素列表.所有日志显示一切正常,几个请求被发送到相应的端点,但仍然只有最终响应返回的最终响应.

在将代理的日志级别设置为TRACE之后,我意识到聚合器工作得很好,只是它创建了一个不符合SOAP的消息.所有聚集的元素直接添加到肥皂体下面.所以问题是如何在body和result标签之间添加一个根元素.我首先尝试了XSLT,但它也只能读取正文的第一个子元素.最后,我发现了一些深埋提示使用充实调解员(或相当的一系列),并且没有的伎俩.以下列表说明了大多数示例中未找到的配置部分(如下所示).

  1. 首先使用Enrich将所有相关项目捕获到属性中
  2. 忘记当前消息 - 用仅包含新有效负载根元素的主体重写完整的包络
  3. 将存储在属性中的元素附加到新的有效负载根目录.
  4. 如果需要,将soap标头捕获到属性中并将其附加到新的msg中(不在下面的配置中)

文物

演示请求

<body>
   <sam:multisearch xmlns:sam="http://www.example.org/sample/">
      <sam:search>
         <sessionid>123</sessionid>
         <searchstring>Item 1</searchstring>
      </sam:search>
      <sam:search>
         <sessionid>123</sessionid>
         <searchstring>Item 2</searchstring>
      </sam:search>
   </sam:multisearch>
</body>
Run Code Online (Sandbox Code Playgroud)

配置

<proxy xmlns="http://ws.apache.org/ns/synapse" name="test.multisearch" transports="https,http" statistics="enable" trace="enable" startOnLoad="true">
   <target>
      <inSequence>
         <iterate xmlns:sam="http://www.example.org/sample/" expression="//sam:multisearch/sam:search">
            <target>
               <sequence>
                  <send>
                     <endpoint key="soapUI_Mockup"/>
                  </send>
               </sequence>
            </target>
         </iterate>
      </inSequence> …
Run Code Online (Sandbox Code Playgroud)

esb aggregate wso2 mediator

6
推荐指数
1
解决办法
3304
查看次数

使用 CQRS 模式返回 API 中有意义的错误

当使用 Mediatr 模式时,我发现向 API 控制器返回有意义的错误非常具有挑战性。我们以该OrdersController.CancelOrder方法为例(src)。

在此示例中,它们“仅”返回Ok()BadRequest()。在这种情况下,他们将如何返回“此订单 ID 不存在”(404) 或“此订单已发货”(400) (...) 等错误。

我们可以引入一个新类,称为Result保存返回值(如果有)和潜在的错误消息。在这种情况下,您的所有命令、查询都应返回Result<YourModel>. 我们还可以直接在控制器内添加代码。我无法确定这两种解决方案都有优点和缺点。

你对此有何看法?

谢谢塞布

asp.net mediator .net-core mediatr asp.net-core

6
推荐指数
1
解决办法
4952
查看次数

具有通用处理程序和查询的 Mediatr

我正在使用 Mediatr 开发 ASP.NET Core 2.2 Web API 应用程序。

我有一个看起来像这样的处理程序 -

public class MyQueryHandler<T> : IRequestHanlder<MyQuery<T>, IQueryable<T>>
{
   public Task<IQueryable<T>> Handle(MyQuery<T> myquery, CancellationToken cancellationToken)
   {
       //perform query

       IQueryable<T> models = someDatabaseQuery.ProjectTo<T>();
   }       
}
Run Code Online (Sandbox Code Playgroud)

这是查询 -

public class MyQuery<T> : IRequest<IQueryable<T>>
{
   //some properties
}
Run Code Online (Sandbox Code Playgroud)

当我尝试提出这样的请求时 -

var result = await _mediator.Send(new MyQuery<SomeModel> {/* set the properties on the query */})
Run Code Online (Sandbox Code Playgroud)

我得到一个例外 -

An unhandled exception occurred while processing the request.

InvalidOperationException: Handler was not found for request of type MediatR.IRequestHandler`2[MyQuery`1[SomeModel],System.Linq.IQueryable`1[SomeModel]]. …
Run Code Online (Sandbox Code Playgroud)

c# covariance contravariance mediator mediatr

6
推荐指数
1
解决办法
2万
查看次数