Сейчас подход выглядит примерно так (псевдокод):
Код: Выделить всё
public class DungeonRunner
{
public ICombatEngine CombatEngine;
public ITreasureEngine TreasureEngine;
public ITrapEngine TrapEngine;
//ctor injections etc. etc.
public void RunDungeon(List dungeonEvents)
{
foreach(var event in dungeonEvents)
{
// my issue starts here
switch(event)
{
case event is CombatEvent:
CombatEngine.Run(event as CombatEvent);
case event is TreasureEvent:
TreasureEngine.Run(event as TreasureEvent);
//etc etc
}
}
}
}
В идеале я бы хотел, чтобы что-то выглядело немного вот так:
Код: Выделить всё
public void RunDungeon(List dungeonEvents)
{
foreach(var event in dungeonEvents)
{
event.Run();
}
}
Чтобы сделать это в приведенном выше примере, сами события должны иметь зависимость от соответствующего движка, что определенно неправильно.< /p>
Может ли кто-нибудь предложить лучший подход? Нам действительно не нужен бесконечно расширяющийся оператор switch.
Подробнее здесь: https://stackoverflow.com/questions/789 ... ependencie
Мобильная версия