Общее решение
Прежде чем принять решение о том, что использовать, я создам список критериев, которым должна соответствовать библиотека. Это может включать размер, простоту, точки интеграции, скорость, сложность проблемы, зависимости, внешние ограничения и лицензию. В зависимости от ситуации факторы, влияющие на принятие решения, будут различаться.
Как правило, я буду искать подходящую библиотеку, которая решит проблему, прежде чем писать собственную реализацию. Если мне придется писать свои собственные, я буду читать соответствующие алгоритмы и искать идеи в других реализациях (например, на другом языке).
Если после всех аспектов, описанных ниже, я не могу найти подходящую библиотеку или исходный код и произвел поиск (и спросил на подходящих форумах), тогда я разработаю свою собственную реализацию.
Сложность
Если задача относительно проста (например, класс MultiValueMap), то:
- Найдите существующую реализацию с открытым исходным кодом.
- Интегрировать код.
- Перепишите его или обрежьте, если оно чрезмерное.
Если задача сложная (например, гибкая объектно-ориентированная графическая библиотека), то:
- Найдите реализацию с открытым исходным кодом, которая компилируется (из коробки).
- Выполнить его "Привет, мир!" эквивалент.
- Выполните любые другие оценки, как требуется.
- Определите его пригодность на основе критериев проблемной области.
Скорость
Если библиотека работает слишком медленно, то:
- Профиль.
- Оптимизация.
- Внесите результаты в сообщество.
Если код слишком сложен для оптимизации, и скорость является фактором, обсудите это с сообществом и предоставьте детали профилирования. В противном случае ищите эквивалентную, но более быструю (возможно, менее функциональную) библиотеку.
API
Если API не прост, то:
- Напишите фасад и передайте его сообществу.
- Или найдите более простой API.
размер
Если скомпилированная библиотека слишком велика, то:
- Компилировать только необходимые исходные файлы.
- Или найдите меньшую библиотеку.
Bugs
Если библиотека не компилируется из коробки, ищите альтернативы.
* 1084 зависимости *
Если библиотека зависит от множества внешних библиотек, ищите альтернативы.
Документация
Если документации недостаточно (например, руководства пользователя, руководства по установке, примеры, комментарии к исходному коду), ищите альтернативы.
Ограничения по времени
Если есть достаточно времени, чтобы найти оптимальное решение, сделайте это. Часто не хватает времени писать с нуля. И обычно есть ряд похожих библиотек для оценки. Имейте в виду, что благодаря тщательной слабой связи вы всегда можете поменять одну библиотеку на другую. Сначала найдите, что работает, а если позже это станет бременем, замените его.
Среда разработки
Если библиотека связана с определенной средой разработки, ищите альтернативы.
Лицензия
Открытый исходный код .