Лучшие практики для интеграции сторонних модулей в ваше приложение

У нас есть несколько проектов, которые включают создание приложения, которое, возможно, на 50% состоит из пользовательских функций, но затем добавляет, скажем, вики, форум и другие компоненты, которые уже являются "колесами", которые мы не изобрели. хочу переписать с нуля.

Эти сторонние приложения обычно имеют свои собственные базы данных, темы и системы аутентификации. По моему опыту, заставить работать вещи, такие как единый вход или общая тема, или пометить / выполнить поиск по сущностям в нескольких подпрограммах. Каковы некоторые из лучших практик такого интеграционного проекта?

До сих пор наш подход заключался в том, чтобы тщательно выбирать компоненты, которые имеют четко определенный API, предпочтительно через HTTP (например, REST или SOAP), хотя это не всегда возможно (мы не нашли достойного форум, который так работает). Есть ли предложения, которые люди могут дать любому, кто пытается это сделать, так как я подозреваю, что многие из нас все чаще и чаще в наши дни?

4 ответа

Решение

Убедитесь, что интерфейс между вашим приложением и сторонним приложением или библиотекой таков, что вы можете легко заменить его на что-то другое на всякий случай. В некоторых случаях стороннее программное обеспечение может быть просто реализацией стандартного API (Java много делает с JDBC, JMS, JNDI, ...). В других случаях это означает оборачивание сторонней библиотеки в какой-то API, который вы придумали.

Конечно, бывают моменты, когда вы можете выбросить эту идею из окна и плотно интегрировать ее со сторонним программным обеспечением. Просто убедитесь, что вы ДЕЙСТВИТЕЛЬНО хотите привязать свое приложение к этой третьей стороне. Как только вы идете по этой дороге, очень трудно вернуться и передумать.

Если вы собираетесь использовать библиотеки с открытым исходным кодом, выбирайте библиотеки с хорошей лицензией. Я обнаружил трудный путь (при попытке OEM-приложения), что многие компании уклоняются от лицензий, таких как LGPL. Я не буду вдаваться в подробности того, почему, но они предпочитают лицензии в стиле Apache, BSD или MIT.

Выберите инструменты, которые были вокруг некоторое время. Проверьте сообщество и убедитесь, что оно активно. Посмотрите, что другие люди используют и использовать эти инструменты.

Выберите технологии, которые хорошо работают вместе. Я собрал приложение, которое использует ORM и веб-сервисы. Spring Framework + Apache CXF + JPA для ORM создали хороший технологический стек. Все инструменты, которые я использую, легко связываются вместе в Spring, что упрощает их совместное использование. Последнее, что вы хотели бы сделать, это выбрать инструменты, которые вы должны написать кучу кода, чтобы использовать их вместе.

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

Дональд Кнут сказал, что даже лучше, чем повторно используемый код - это модифицируемый код, поэтому, если нет API, вам следует искать приложение с открытым исходным кодом, которое написано хорошо и, следовательно, его можно настраивать.

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

Мой подход заключается в использовании стороннего кода для некоторых основных функций. Например, я использую Subsonic для доступа к данным, компоненты Devexpress для интерфейса пользователя и Peter Blum Data Entry Suite для ввода и проверки данных. Subsonic с открытым исходным кодом, элементы управления Devexpress Peter Blum имеют исходный код, доступный за дополнительную плату. Мне было бы невозможно получить функциональность этих элементов управления, если бы я попытался написать их сам.

Этот подход позволяет мне сосредоточиться на пользовательских функциях моего приложения, не беспокоясь о том, как я получу доступ к базе данных или как я создаю редактируемый древовидный список, который выглядит красиво. Конечно, у меня нет полностью настроенного и работающего форума, но я знаю, что буду использовать базу данных SQL для своего приложения, и мне не нужно будет пытаться заставить различные компоненты хранилища данных работать вместе. У меня нет вики, но я знаю, как использовать компоненты пользовательского интерфейса devexpress, и форматирование и проверка правильности ввода данных легко осуществить с помощью элементов управления Питера Блюма. Другими словами, изучите инструменты (и, конечно, тщательно их выбирайте), которые ускорят разработку всех ваших проектов, и вы сможете сосредоточиться на тех частях своего приложения, которые необходимо настроить.

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

Другие вопросы по тегам