我们有一个类的事件(它不同的名字,但我只是做抽象):可以/应该域对象负责将自己转换为另一种类型?
public class Event
{
public string Name { get; set; }
public string Description { get; set; }
public EventType EventType { get; set; }
}
我们需要建立与此对象的消息类的实例,但根据事件类型,我们使用不同的建设者:
switch (event.EventType)
{
case EventType.First:
message = FirstMessageBuilder.Build(event);
break;
case EventType.Second:
message = SecondMessageBuilder.Build(event);
break;
}
你认为这是可以接受的,还是应该采取以下措施:
做一个抽象类:
public class Event
{
public string Name { get; set; }
public string Description { get; set; }
public abstract Message BuildMessage();
}
然后派生出两个类:class FirstMessage
和class SecondMessage
并使域对象负责构建消息。
我希望它不是太抽象。底线是我们需要将一个班级转换为另一个班级。一个简单的映射器不会这样做,因为存在XML内容的属性等(由于遗留应用程序正在进行事件)。只要接受我们在这里要做的事情。
真正的问题是:域对象是否可以为这样的转换负责,或者你会不会推荐它?我会避免丑陋的switch语句,但在其他地方增加复杂性。