Рубрики
Без рубрики

Мой опыт написания и публикации Моей Первой библиотеки Java

Более года назад друг познакомил меня с концепцией железнодорожного программирования (ROP). I… С пометкой java, functional, dev journal.

Более года назад друг познакомил меня с концепцией Железнодорожного программирования (ROP). Мне понравилась идея и беглость , которая с ней связана, но это был стиль, рожденный из функционального программирования – то, что не полностью используется в Java, несмотря на введение лямбд и потоков в Java 8 .

Хотя для этого уже существовало несколько существующих библиотек Java, я подумал, что было бы неплохо написать одну самому, поскольку это была хорошая возможность для меня:

  • понять, что такое ROP
  • практикуйте TDD
  • узнайте, как опубликовать библиотеку Java в общедоступном репозитории пакетов (например, Sonatype Nexus).
  • попробуйте использовать действия GitHub для настройки конвейера и автоматической публикации библиотеки в репозитории пакетов

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

Ger vG/тюрьма

Программирование, ориентированное на железную дорогу, с использованием Java

Если вам интересно, вы можете получить снимок здесь .

Я планирую написать статью о том, что такое тюрьма, что она может делать и что, по моему мнению, является ее недостатками (хотя я думаю, что то, что я сделал, не является настоящим ROP). Но это не то, о чем идет речь в этом посте. А пока вот некоторые мысли и основные моменты из этого путешествия:

  • Присвоение имен (все еще) сложно
  • Я отстой в GitHub
  • Я не думаю, что по-настоящему понимал Монады
  • Спок великолепен, но он не соответствовал моим потребностям
  • Варианты лицензирования с открытым исходным кодом
  • Погружаю пальцы ног в действия GitHub
  • Создание и утверждение моего собственного PR
  • Публикация библиотеки

Присвоение имен (все еще) сложно

Как бы банально это ни звучало, но на самом деле нет ничего сложного. Я обдумывал это название почти неделю, прежде чем остановился на Jail, поскольку большинство Java-вещей либо начинаются, либо заканчиваются на “J”. Только после создания репозитория я понял, что это похоже на название Japan Rail. Но, эй, он уже создан, и я не хочу тратить еще одну неделю на то, чтобы придумать название.

Я отстой в GitHub

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

Посмотрите на этот календарь взносов. Так впечатляюще/так

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

Я не думаю, что по-настоящему понимал Монады

И на данный момент я не думаю, что кто-то это делает.

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

Ближе всего я подошел к пониманию этого с помощью этого объяснения .

Поэтому я попытался объяснить это своими словами другу, потому что “лучший способ учиться – это учить”, верно? Но я не мог ответить на его вопросы, так что, возможно, я действительно не получил монады в конце концов.

Как нормальный человек, я сдался. Я могу вернуться к этому позже, если у меня когда-нибудь снова появится мотивация, но сейчас я думаю, что узнал достаточно, чтобы продолжать. Затем я переключил свое внимание на то, как я могу сделать API достаточно интуитивно понятным для использования, конечно, с помощью тестов.

Спок великолепен, но он не соответствовал моим потребностям

Вы, вероятно, слышали о фреймворке тестирования под названием Spock , который написан на Заводной . Это здорово и я люблю использовать его каждый день для работы. Поэтому я изначально написал все свои тесты, используя его.

Но я понял, что наличие динамически типизированного языка не очень помогает мне в разработке API (не очень строгие дженерики Java тоже не помогают). Я также хотел знать, каково это – использовать API, которые я создал. Поэтому, чтобы не попасть впросак, я решил вместо этого переписать тесты с помощью JUnit.

Другая причина заключается в том, что я хотел, чтобы мои тесты служили документацией или компиляцией примеров. Я написал эту библиотеку с учетом Java-разработчиков, и наличие тестов в Groovy – это своего рода шаг в другом направлении. Одним из немногих отличий является Groovy closures, где синтаксис для лямбда-выражений использует фигурные скобки вместо круглых скобок.

{ closureParameters ->  statements }

Хотя это может быть не так важно для опытного разработчика, я больше не хотел добавлять никакой дополнительной когнитивной нагрузки на читателей. Написание тестов на Java сделало “примеры” более понятными и последовательными.

Варианты лицензирования с открытым исходным кодом

Почему, черт возьми, их так много? К счастью, GitHub создал https://choosealicense.com/ чтобы помочь таким нубам, как я, выбрать подходящую лицензию.

Маловероятно, что люди все равно будут этим пользоваться. Но на всякий случай я хотел дать им понять, что мне все равно, что они хотят с этим делать и я не несу ответственности за тот хаос, который они вызвали.

Погружаю пальцы ног в действия GitHub

Я впервые настраиваю свой собственный CI, и на самом деле это было проще, чем печатать весь этот пост в блоге. GitHub уже предоставил несколько шаблонов рабочих процессов, чтобы вы могли начать, так что на самом деле это всего лишь вопрос нажатия кнопки мыши. С ним также довольно легко играть, так как это просто YAML (как и большинство вещей DevOps).

Создание и утверждение моего собственного PR

Я не думаю, что мне нужно это объяснять. Это лучшая часть этого проекта

Публикация библиотеки

Это самая захватывающая, но в то же время разочаровывающая часть проекта. Мне удалось только опубликовать снимок , но я не смог подписать его должным образом. После нескольких сбоев в моем CI я решил пропустить подписание и просто опубликовать снимок. Я не хотел публиковать неподписанный пакет но мне было слишком лень продолжать. Я чувствовал, что уже сделал то, что должен был сделать, так что для меня это уже достаточное достижение.

Да, я ленивый. Я знаю.

Заключительные мысли

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

Тем не менее, это все еще приятное напоминание для меня, чтобы всегда практиковать основы и иногда исследовать, что еще я могу делать, кроме тех, которым я учусь на работе. Я думаю, что позаимствую некоторые принципы из ROP и применю их к нашему коду.

Дальнейшее Чтение

В случае, если вам интересно и вы хотите попробовать это или почитать самостоятельно, вот некоторые ресурсы, которые помогут вам начать:

Оригинал: “https://dev.to/gervg/my-experiences-in-writing-and-publishing-my-first-java-library-11hc”