根据MassTransit的创建者,具有基于类的继承不被视为一种好习惯-https://masstransittemp.readthedocs.io/en/latest/overview/inheritance.html
老实说,我不明白为什么。这是我简化的现实生活场景:想象一下,我有一个正在处理保单的保险微服务。我事先知道,所有与政策相关的事件都会有一些必填字段,例如:id,product等。
public class InsurancePolicyEvent
{
Guid EventId { get; set;}
Guid PolicyId { get; set; }
InsuranceProduct Product { get; set;}
}
为什么我不能在这里简单地利用继承,而不在继承的事件中重复自己,就像这样:
public class PolicyTerminated : InsurancePolicyEvent
{
...
}
public class PolicyIssued : InsurancePolicyEvent
{
...
}
答案 0 :(得分:2)
为了阐明我的立场,MassTransit建议使用接口而不是类,并且对上面显示的基本类型非常满意,尤其是在将字段强制为事件类型的情况下。
Interface-based inheritance is OK, don't be afraid, but don't go nuts.
在此之后,是的,不鼓励基于类的继承-主要是因为开发人员经常对此做不好的事情。现在,您上面显示的内容很好,我认为它没有问题。
但是,一旦您的InsuranceProduct
类开始发展,并且对基类虚拟方法分派行为的某些期望就开始渗入模型,这就是通往不良时期的途径。可能不是您,可能是经验不足的开发人员,他们接受了OO类设计的培训,并且弄明白了,为什么不对呢?
所以,请小心点:)