Как правильно отделить классы от фреймворков (разделение на уровне исходного кода)

Я работаю над игровым проектом, используя платформу Microsoft XNA, хотя этот вопрос является общим, который включает разделение классов / систем.

Допустим, я иметь класс (упрощенный для соответствия этому примеру), как показано здесь:

public class GameCell
{   
        public Color Color { get; set; }
}

Я хотел бы повторно использовать как можно больше кода между несколькими платформами, использующими C #.

Проблема прямого обращения к структуре Color состоит в том, что этот тип определен в сборках XNA, что создает сильную связь (или зависимость) между моим кодом и XNA.

Другая структура, которую я буду использовать, может иметь (а может и не иметь) свой собственный объект Color с собственным набором свойств и API.

Я хотел бы, чтобы тот же исходный файл «знал» для автоматического использования XNA или другой реализации фреймворка.

Я знаю другие типы методов развязки, такие как IoC, но это будет означать, что я буду подключать разные версии системы / класса вместо того, чтобы повторно использовать один и тот же класс в разных контекстах.

Возможно ли это вообще? как бы вы предложили сохранить такую ​​систему переносимой?

Я видел несколько случаев (при разработке на родном C ++), когда вы определяли набор классов, отражающих классы, которые использует ваш фреймворк (например, здесь - определить цвет снова), и поэтому можно "повторно сопоставить" это позже, чтобы использовать другие классы при необходимости.

Другой вариант - использовать #IFDEF для игры с операторами using в заголовке класса (переключение с XNA на другие платформы). Какая альтернатива в этом случае лучшая?

5
задан lysergic-acid 2 December 2011 в 20:41
поделиться