我希望有一个单独的[ {
"_id": "59b631cd709fef7c4caf5dee",
"name": "ddfdd",
"home": {
"a1": "f",
"a2": "cc",
"a3": "ccc",
"a4": "gfr"
},
"about": {
"a5": "fgfffgf",
"a6": "fgfg",
"a7": "werr"
},contact:{
a8:"hfjdfh"
a9:"hyyd"
}
},{
"_id": "4546565756756",
"name": "dde",
"home": {
"a1": "ff",
"a2": "cfrc",
"a3": "ccdec",
"a4": "gfetr"
},
"about": {
"a5": "feeeffgf",
"a6": "tyu",
"a7": "ert"
},contact:{
a8:"frt"
a9:"rty"
}
},.....]
和CommandBus
以及EventBus
和ICommandHandler<TCommand>
,以便IEventHandler<TCommand>
类看起来像:
OrderEventHandler
一种可能的解决方案是在public class OrderEventHandler :
IEventHandler<OrderPlaced>,
IEventHandler<OrderRegistrantAssigned>,
IEventHandler<OrderTotalsCalculated>,
IEventHandler<OrderConfirmed>,
IEventHandler<OrderExpired>,
IEventHandler<SeatAssignmentsCreated>,
IEventHandler<SeatAssigned>,
IEventHandler<SeatAssignmentUpdated>,
IEventHandler<SeatUnassigned>
{
public void Handle(OrderPlaced @event){...}
.
.
.
}
基础架构和我的Masstransit
之间提供一个采用者(如CQRS
,它只公开我通常需要的上下文详细信息。)
但是因为我是ConsumerToHandlerAdopter<T>
的新手,所以我无法理解我以后可能需要处理的问题。
所以我的问题是: 一般来说,包装Masstransit是否值得我处理自己的基础设施?
答案 0 :(得分:2)
我们使用MassTransit广泛实现CRQS,但仅用于命令处理。
多次讨论不使用消息传递基础结构来同步写入和读取模型的原因。主要原因是您有机会坚持更改并且不发布事件,因为这些是两个不同的基础架构。除非您使用类似DTC的东西,否则您将无法保证模型之间的一致性。
此外,在这一点上,我们也更愿意远离“上帝处理者”类。 MassTransit特别擅长通过将每个消费者分成一个单独的类来实施SRP(单一责任原则)。
对于基于事件的一般集成(反应事件处理),我们也使用MassTransit。
您还可以拥有实现多个消息界面的事件,这样您就可以进行更全面的事件处理:
public interface CustomerRegistered
{
string FullName { get; }
}
public interface OrderPlaced
{
string Reference { get; }
List<OrderLine> Lines { get; }
}
public class NewCustomerOrderedStuff : CustomerRegistered, OrderPlaced
{
...
}
public class CustomerRegisteredConsumer : IConsumer<CustomerRegistered>
public class OrderPlacedConsumer : IConsumer<OrderPlaced>
每个消费者都会有不同的关注,并且可以生活在一个独立的有限环境(服务)中。