Критерии при использовании библиотек — использовать тип данных библиотеки VS создать свой собственный тип?

Я пишу игру, в которой используется множество библиотек с открытым исходным кодом, каждая библиотека имеет свой собственный тип для представления трехмерного вектора:

  • пуля (библиотека физического движка): Vector3.
  • великан-людоед (библиотека 3D-рендеринга): Ogre :: Vector3.
  • собственный (библиотека матричных манипуляций): Vector3D.

Даже эти библиотеки популярны и качественны, но я не хочу слишком сильно зависеть от них.

Таким образом, я решил создать свой собственный тип с именем Vect3, и создавать конвертеры между ними.

Это удовлетворяет моим требованиям очень хорошо, потому что моя игровая логика хочет манипулировать Vector 3D.

Это имеет смысл, особенно в области, которая Vect3 не имеет отношения к физике, рендерингу или матричным манипуляциям вообще.

проблема

Я кодирую модуль AI, который интенсивно используют собственный.
Для прототипа я использую Эйген :: MatrixXf много.
MatrixXf гораздо более сложная структура по сравнению с Vector3.

Я планирую создать свой собственный класс MyMatrix и рефакторинг AI для использования MyMatrix вместо Эйген :: MatrixXf.

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

Вопрос

Каковы критерии выбора одного из этих вариантов для типа, который уже существует в одной или нескольких внешних библиотеках?
A. Тип должен быть создан как новый класс.
B. Используйте тип библиотеки (и какой?).

Мои текущие критерии

  • (Сильный) Насколько тип относится к определенной библиотеке? Сильно связаны = B.

  • (Сильный) Насколько щедрым из лицензии библиотеки? Щедрый = B.

  • (Средний) Насколько сложный тип? Сложный = B.

  • (Слабая) Сколько мне нужно скорости? Конверсия стоит некоторого процессора.

1

Решение

Роберт С. Мартин сказал в своей книге «Чистый код»:
Это всегда хорошая практика, чтобы обернуть сторонний код.
Майк Финни цитирует Мартина в его Блог и суммировать это:

  • Сторонний код может развиваться

  • Интерфейс вашей обертки может быть сделан в точном соответствии с потребностями вашего приложения

в вашей ситуации я бы написал свои собственные классы, чтобы обернуть классы векторной и матричной библиотек.
Еще одним преимуществом является то, что ваш код зависит только от того, что ему действительно нужно.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]