Я написал книгу, предварительный релиз, о создании веб-приложений с нуля.
Я прочитал много книг по программированию, но, часто, после прочтения у меня оставался только один вопрос — Как мне применить эти знания на практике?
Предположим, вы разработчик системы автоматизации, портала или интернет-магазина.
Добавление новой функциональности осложняется наслоениями кода. Запуск тестов занимает полчаса, а релиз — час. Идея о переходе на новую версию фреймворка вызывает нервные подергивания. Вы узнаёте, что PostgreSQL имеет поддержку массивов, jsonb, полнотекстового поиска и lateral join, но ORM не позволяет использовать их в полную силу. Вы прочитали про TDD, но как писать в таком стиле, когда аналитик описывает сценарии, а фреймворк требует создания модели, контроллера и представления?
Как применить SOLID, если сущности наследуют от ORM?
Как избавиться от боли?
Постепенно, по мере изучения Clojure, и, наконец после прочтения Clean Architecture, я понял, как без боли написать приложение, где на первом месте стоит предметная область, а не фреймворк, где я принимаю решения, а не создатели фреймворков навязывают свои.
В какой-то степени книгу можно рассматривать как практический самоучитель по Clojure,
так что знание этого языка не требуется.
Книга, как минимум, научит читать Clojure код.
Мы разберем основополагающие моменты, а именно: полиморфизм и управление состоянием.
В качестве практики реализуем монаду Either.
Во второй главе я познакомлю с базовыми идеями дизайна:
- Объектно ориентированным проектированием
- Принципами SOLID
- Clean Architecture
- Domain Driven Design
- Dependency Injection
- Приемами для работы с БД
В последующих главах я опишу, как создать приложение на этих принципах.
Мы начнем с бизнес-логики, реализуем сценарии использования, отложим принятие технических решений с помощью абстракций.
Реализуем доставку приложения пользователю с помощью web-технологий.
Разберем работу с формами, валидацией.
Рассмотрим реализацию абстракции хранилища на основе паттернов Data Maper, Identity Map и Unit of Work.
Я старался делать акценты на действительно важных вещах, а не перепечатывать документацию.
При чтении придется искать и изучать дополнительный материал, для этого я даю ссылки.
Книга содержит практические упражнения. Доступен проект, на основе которого она написана.
Важно понимать, что это предварительный релиз.
Наверняка есть проблемы с изложением, и мне важно как можно раньше собрать обратную связь.
На текущий момент у книги отсутствует сайт, нет pdf и epub.
Присылайте свои комментарии на m.kuzmin+afs@darkleaf.ru
Комментарии (14)
leahch
16.10.2018 11:24О! Как раз последний месяц смотрю на clojure (после С, java, python и кучи всего). Вот было бы очень интересно затронуть тему инструментария. Мне, как старому хрену, удобен eclipse, на котором сижу уже лет 20. Но посмотрев последние обзоры вижу emacs и IDEA в фаворитах. Первый хорош, но что-то на него пока не тянет обратно, второй не хочется по идеологическим соображениям. И собственно, пока только это и останавливает начать пользовать clojure по-взрослому.
Так что был бы безмерно признателен за обзор или главку, как на нем взлетать, и на чём. Если emacs или что-то другое, так и написать «лучше ничего нет, ставьте и не пудрите мозги, все знакомые команды настоятельно советуют начинать с ХХХ». Думаю, такая глава была бы очень полезна и начинающим, вроде меня, и совсем начинающим.mkuzmin Автор
16.10.2018 11:30В книге есть параграф про окружение.
Например, там описан отдельный repl, не встраиваемый в редактор, и плагин для расстановки скобок и выравнивания кода.
По поводу emacs — без нормальной клавиатуры, вроде kinesis, с ним очень сложно.
Надеюсь, это поможет.
leahch
16.10.2018 16:29REPL — это хорошо, я не про него. Что нужно (возможно я и ошибаюсь) современному программисту? (телевизор!)
1) Какой(ие)-то редактор(ы), которым пользуется большинство разработчиков
2) В нем же — поддержка git/mercurial
3) Важное для меня — автокомплит, про рефакторинг наверное в плане clojure говорить не стоит, хотя я же ламер, могу и не знать
4) Навигация по проекту, инструменты отладки, пусть даже такие, как в Go
5) Инструменты мониторинга — типа, а сколько у нас тута потоков, а к чему они, ресурсы там всякие… Да-да, наверное это как-то через JMX делается, или как-то иначе? (подозреваю)
6) Ну и как нам теперь всю эту написанную хрень развернуть удаленно…
7) Что там с производительностью, можно ли как-то мерить?
8) И не последнее — вот не все любят тесты, но иногда их нужно. Что там взамен (x)unit и mock?
Я понимаю, что большинство из этих вопросов к самому языку не относятся. Но… Взять любой стартинггайд по node.js, python, Go… И мы увидим все вот это…
Про clojure читаю уже как месяц, язык — супер! И люди на нем работают, и интенсивно. Вот и хотелось бы знать тот workflow (а лучше и пару альтернатив), с которого принято начинать. Я же вот прямо с явы вваливаюсь, мне и шашечки, и ехать. И да, 10-15 лет уже прошли — пора. :-)
mkuzmin Автор
16.10.2018 16:451) emacs + sider или idea + cursive, я пользуюсь первым. Кто-то пишет в ms vs code, там есть какие-то плагины.
2) На любителя, кто-то просто git использует в терминале. Для emacs есть magit.
3) Автокомлит в редакторе делается плагинами, тем же cider. Есть clj-refactor, но он не работает с новым cider =(
4) Навигация зависит от редактора. Для emacs есть projectile.
5) Есть java interop, т.е. из repl можно дергать java код.
6) Например, запаковать в докер.
7) да, есть бенчмарки, которые умеют прогревать JVM. В книге есть пример.
8) вот пример теста
Можно помотреть мой emacs.d.
Взять любой стартинггайд по
У меня нет цели писать стандартный гайд, иначе я бы никогда не закончил книгу.
Для этого есть глава о материалах для самостоятельно чтения.
- https://clojurecourse.by/ — отличные русскоязычные курсы
- https://www.braveclojure.com/clojure-for-the-brave-and-true/
Если просто написать web приложение, вот чтобы сразу ехать, то можно посмотреть в сторону luminus. Но как спроектировать архитектуру там не расскажут.
leahch
16.10.2018 16:55Отлично! Жаль, не могу карму увеличивать. А можно сразу в pdf рендерить? Чтобы по md не тыркаться, или в Wiki? Хотя, и так большое спасибо за труд!
tungus28
16.10.2018 19:21Из вступления: «ORM генерирует крайне неэффективные запросы». Вроде бы ORM и в теории не сможет генерировать очень эффективные запросы? Где нужна производительность, лучше использовать чистый SQL?
tmnhy
Стыдно писать книги и не знать, что
А набор возможностей (функций), которые предоставляет данная система или устройство — это ФУНКЦИОНАЛЬНОСТЬ!
Wilk
Здравствуйте!
У меня каждое упоминание функционала вызывает сходные эмоции.
f0ks
Ну тем не менее этот неправильный термин уже прочто закрепился и приходится его использовать.
CheY
Но ведь можно пофилософствовать) Есть пространство возможных функций (которые можно включить в продукт), из которых путём выбора каких-то из них и определения их взаимодействия образуется функционал (итогового продукта). То есть вполне натягивается сова на глобус.