Я пишу игру, в которой используется множество библиотек с открытым исходным кодом, каждая библиотека имеет свой собственный тип для представления трехмерного вектора:
Даже эти библиотеки популярны и качественны, но я не хочу слишком сильно зависеть от них.
Таким образом, я решил создать свой собственный тип с именем Vect3, и создавать конвертеры между ними.
Это удовлетворяет моим требованиям очень хорошо, потому что моя игровая логика хочет манипулировать Vector 3D.
Это имеет смысл, особенно в области, которая Vect3 не имеет отношения к физике, рендерингу или матричным манипуляциям вообще.
Я кодирую модуль AI, который интенсивно используют собственный.
Для прототипа я использую Эйген :: MatrixXf много.
MatrixXf гораздо более сложная структура по сравнению с Vector3.
Я планирую создать свой собственный класс MyMatrix и рефакторинг AI для использования MyMatrix вместо Эйген :: MatrixXf.
Я сомневаюсь, что это хорошее решение.
Другими словами, должен ли я создать свой собственный тип данных для всего, что я вижу и хочу использовать?
Каковы критерии выбора одного из этих вариантов для типа, который уже существует в одной или нескольких внешних библиотеках?
A. Тип должен быть создан как новый класс.
B. Используйте тип библиотеки (и какой?).
(Сильный) Насколько тип относится к определенной библиотеке? Сильно связаны = B.
(Сильный) Насколько щедрым из лицензии библиотеки? Щедрый = B.
(Средний) Насколько сложный тип? Сложный = B.
(Слабая) Сколько мне нужно скорости? Конверсия стоит некоторого процессора.
Роберт С. Мартин сказал в своей книге «Чистый код»:
Это всегда хорошая практика, чтобы обернуть сторонний код.
Майк Финни цитирует Мартина в его Блог и суммировать это:
Сторонний код может развиваться
Интерфейс вашей обертки может быть сделан в точном соответствии с потребностями вашего приложения
в вашей ситуации я бы написал свои собственные классы, чтобы обернуть классы векторной и матричной библиотек.
Еще одним преимуществом является то, что ваш код зависит только от того, что ему действительно нужно.
Других решений пока нет …