У нас есть класс Event (на самом деле он называется по-разному, но я просто делаю абстракцию):
public class Event
{
public string Name { get; set; }
public string Description { get; set; }
public EventType EventType { get; set; }
}
Нам нужно создать экземпляр класса Message с этим объектом, но в зависимости от EventType мы используем другой компоновщик:
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, но добавил бы сложность где-нибудь еще.