对于那些熟悉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(不使用)
没有循环参考!
我听说过某个地方@web我将能够找到使用GUI组件的Mediator的好C++示例.但是,我试图找到只有GoF样本或来自巫术和类似的东西,这对我没有帮助.
那么......你知道在哪里可以找到提到的GUI样本吗?
很抱歉这个问题,但这对其他人也很有用.
我试图在swing应用程序中应用MVC模式.但是我面临两个主要问题,因为你有嵌套的面板层次结构,例如父 - >孩子 - >大孩子 - >大孩子.
问题1:当您有这样的层次结构时,如何在控制器和视图之间传输数据?如果我将数据从父母传递给孩子,那么就会有很多重复,如果我改变一个孩子,所有父母都需要改变.我不希望视图直接从数据库访问数据,我希望数据只通过控制器传输到视图.
问题2:如何在这种层次结构中将事件从视图传播到控制器?我正在考虑使用PropertyChangeListener.如果控制器必须采取任何操作,则将查看firePropertyChange事件.控制器将监听这些事件并执行某些操作.但是,如果我为层次结构执行此操作,那么将会出现代码重复.
我有三个可能有用的想法:
请参考下图了解第3个想法的图片.如果是第二个,调解员将进入中心.
如果有人以更好的方式实施此类问题,请评估并告知我们.

正如它在DBLookup Mediator的文档中所说的那样,它只返回查询的第一行,如果忽略则返回其他结果.
我想知道是否有一种"最好的方法"来运行一个返回多个记录然后处理它们的查询(SELECT*FROM X).现在有一天我们正在实现实现axis2服务,但是有另一种方法使用wso2 esb提供的调解器的组合来完成该要求吗?
提前致谢.
圣地亚哥.
我做了一些谷歌搜索,是的,我知道有关这两者之间的差异的问题之前已经在stackoverflow和整个网络上被问过.但我主要找到措辞有问题的答案,这可能令人困惑.
我的问题是,如果有人在这里可以为我提供两个中介和观察者模式的视觉示例,可以清楚地展示两者之间的差异.在Javascript中.谢谢!
我正在使用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定义一个接口将是一项额外的工作,但也许值得.
我有一个关于我想在我的应用程序中实现的中介模式的问题(使用C#).在我的代码中实现模式时,我遇到了循环依赖.类的结构如下:
Mediator和Colleague组件/类在不同的程序集中,并且作为中介模式需要两个组件(类)相互使用.在引用彼此时出现问题.
请考虑以下代码:
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和同事在不同的命名空间和程序集中,如何解决循环依赖?
这不是一个问题,而是一个答案.我是wso2 ESB的新手,并希望在POC中实现拆分/收集EIP的测试运行.我按照我找到的示例,立即得到了一个返回单个响应的工作配置.然而,要获得所有回复,需要花费相当多的时间才能弄明白.大多数给定的样本似乎产生了相同的意外结果.我希望如果遇到同样的问题,这些行对你有帮助.
我使用soapUI示例服务(搜索操作)作为服务后端.我发送了一个组合消息,搜索两个项目到代理服务器(参见下面的artefact)迭代中介器拆分消息并将其转发到调用soapUI模型的端点.该总调解人等待所有响应,并试图把它变成一个结果消息.
虽然拆分器工作正常,但聚合器只返回一个结果元素而不是预期的元素列表.所有日志显示一切正常,几个请求被发送到相应的端点,但仍然只有最终响应返回的最终响应.
在将代理的日志级别设置为TRACE之后,我意识到聚合器工作得很好,只是它创建了一个不符合SOAP的消息.所有聚集的元素都直接添加到肥皂体下面.所以问题是如何在body和result标签之间添加一个根元素.我首先尝试了XSLT,但它也只能读取正文的第一个子元素.最后,我发现了一些深埋提示使用的充实调解员(或相当的一系列),并且没有的伎俩.以下列表说明了大多数示例中未找到的配置部分(如下所示).
<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) 当使用 Mediatr 模式时,我发现向 API 控制器返回有意义的错误非常具有挑战性。我们以该OrdersController.CancelOrder方法为例(src)。
在此示例中,它们“仅”返回Ok()和BadRequest()。在这种情况下,他们将如何返回“此订单 ID 不存在”(404) 或“此订单已发货”(400) (...) 等错误。
我们可以引入一个新类,称为Result保存返回值(如果有)和潜在的错误消息。在这种情况下,您的所有命令、查询都应返回Result<YourModel>. 我们还可以直接在控制器内添加代码。我无法确定这两种解决方案都有优点和缺点。
你对此有何看法?
谢谢塞布
我正在使用 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) mediator ×10
c# ×2
mediatr ×2
wso2 ×2
.net-core ×1
aggregate ×1
asp.net ×1
asp.net-core ×1
c++ ×1
covariance ×1
delphi ×1
esb ×1
java ×1
javascript ×1
mvvm-light ×1
swing ×1
wpf ×1
wso2esb ×1