Edg*_*oks 10 c# masstransit event-bus
MassTransit声明我们应该使用接口来进行消息合同:
强烈建议根据多年来不同开发人员经验水平的经验,使用接口进行消息合同.MassTransit将为消息创建动态接口实现,确保消息合同与消费者的清晰分离.
来源:文档»使用MassTransit» 创建消息合同
使用POCO DTO而不是接口有什么缺点,在使用MassTransit进行消息传递的上下文中,接口与类之间的明显优势是什么?
另一方面,NServiceBus适用于POCO,确保不使用域对象等内部类是有意义的,见下文.
创建消息时,应遵循以下准则:
- 消息应该是简单的POCO对象.
- 消息应尽可能小.
- 消息应满足单一责任原则.
- 用于其他目的的类(例如域对象,数据访问对象和UI绑定对象)不应用作消息.
虽然与 MassTransit 没有直接关系,但我想说原因是封装。使用 setter 创建一个简单的 POCO,但将其传递到仅承诺 getter 的接口后面,将数据封装在 DTO 中。
public class Program
{
static void Main(string[] args)
{
User user = new User()
{
Username = "user99"
};
Account account = new Account(user);
}
}
public interface IUser
{
string Username { get; }
}
public class User : IUser
{
public string Username { get; set; }
}
public class Account
{
private IUser user;
//Currently used in main
public Account(User user)
{
user.Username = ""; //This is allowed
this.user = user;
}
//But consider this ctor
public Account(IUser user)
{
//user.Username = ""; //Not allowed
this.user = user;
}
...
}
Run Code Online (Sandbox Code Playgroud)