Это приложение представляет собой урезанный вариант проекта Sean Corfield's UserManager-Example (синхронизированный как Commit SHA 2A9CF63).
Оригинальный проект Sean «Пользовательский менеджер» и его варианты (включая этот), стремятся демистифицировать «Как построить веб -приложение Clojure, используя только библиотеки?» Полем
«Композиция над наследством», «библиотеки над структурами» и «Ориентация на данные», заметно в канонической ментальной модели программирования в мире Clojure, включая программирование в Интернете. В отсутствие некоторых из этих ключевых интуиций даже опытные разработчики, которые являются новичками в Clojure, имеют тенденцию бороться за создание приложений с использованием библиотек. Коллектив «Диспетчер пользователей» стремится решить эту конкретную задачу. Они не стремятся преподавать передовым практикам веб -разработки. С этой целью все примеры «Пользовательский менеджер» маленькие, упрощенные, приложения в стиле Web 1.0.
Этот проект расширяется на праймер «от первых принципов», который я записал в « Clojuring The Web Application Stack: Meditation One ». Я решил использовать оригинальное демонстрационное приложение Шона в качестве спецификации, потому что:
Если ничего другого, это существует, чтобы поцарапать собственный зуд ... Мне нравятся объяснения Barebones и любовь, спускающаяся: «Подождите, но почему?» кроличьи дыры и касательные.
Видите ли, все остальные демо «Пользовательские менеджеры», хотя и простые, построены с библиотеками, используемыми профессионалами Clojure в реальных производственных приложениях. Итак, если библиотеки являются предшественником (пользовательский) веб -стек (или структуры) ... каким бы предшественником библиотек? Нет библиотек :)
Следите за оригинальным пользовательским менеджером »и в моем блоге, для бок о бок, когда вы работаете через эту кодовую базу.
Если что -то неясно, или по ошибке, пожалуйста, не стесняйтесь открывать проблему (но, пожалуйста, не меняйте структуру кода).
Я разработал его, чтобы помочь читателю наблюдать за кусочком «создание» приложения. Проконсультируйтесь с Readme по состоянию на под сомнение инструкции по использованию, относящиеся к этому моменту в разработке.
Я думаю, что мы учимся лучше, постепенно перейдя от приблизительных грубых умственных моделей к высоким уровням. Таким образом, некоторые преднамеренные упрощения могут раздражать веб -специалистов (например, использование удаления). Кто -то доверяет учащимся, чтобы поднять «правильные» способы делать вещи из общей суммы их исследований, экспериментов, коллег и наставников.
При обучении иногда приятно быть беспокойным;)
Чего ожидать, если вы работаете вперед с самого первого коммита:
curl в приложение. curl localhost:3000
curl -XPOST localhost:3000/some/path?q=somethingsomething
curl -XDELETE localhost:3000/foo/bar/baz
usermanager.main всегда должно иметь какой-то текущий способ запуска/остановки процесса сервера (и/или текущего состояния приложения).usermanager.* Пространство имен, это подсказка.usermanager.main должны облегчить восстановление вашего сервера после перезапуска Repl.dev/ Defitory проекта (вам, возможно, придется вручную создать его).department и addressbook ).dev ...Как я уже упоминал, я вычитал столько библиотек, сколько мог, без ущерба для точности в дизайне оригинального проекта. Исключение заключается в том, что любая форма хост -взаимодействия между нашим веб -приложением и внешним миром. Я предположил ранее существовавшие решения (библиотеки) для тех потребностей (я должен где-то нарисовать границу!). Также некоторые утилиты для комфорта существ, которые не являются центральными в теме этого из первых принципов.
Вернемся к сообщению в блоге, чтобы получить лучшую картину того, где и почему я нарисовал эту границу.
В частности, я использовал:
Чтобы оставаться верными спецификации Шона для API пользовательского управляющего, доменной модели и основной «бизнес-логики», у меня есть прямые части его источника пользовательского менеджера-пример:
Чтобы укрепить идею сочинения движущихся частей с использованием простых данных о том, что я разработал свой код, чтобы использовать выбор дизайна, сделанный Шоном (например, внедряя имя представления в контексте запроса, для последующего использования с помощью логики рендеринга HTML). Точно так же, чтобы оставаться верным спецификации кольца, все самозаписываемые кольцевые утилиты и промежуточное программное обеспечение следуют по спецификации кольца. Замена их на кольцевые оригиналы должны быть простыми.
Если вы решите написать свой собственный вариант, я предлагаю следить за этим.
Это должно быть очевидно к настоящему времени, но я все равно укажу ... приложение снятого вдаль вовсе не надежно, чтобы реальные требования, потому что оно опускает почти все библиотеки, используемые другими примерами «менеджера пользователя», которые делают все тяжелые подъемы «производственного класса» для нас. Даже этим приложениям потребуется некоторая работа, выполненная на них (обзоры дизайна, тестирование интеграции, проверки безопасности и т. Д.), Если они должны иметь право на развертывание реального мира.
То же, что и проект Sean Mananager-Example.
deps.edn .tools.build Для использования команд из файла build.clj . Он включен через :build псевдоним файла deps.edn . Проекты с использованием Clojure используют такой файл build.clj по соглашению, чтобы обеспечить стандартную и пользовательскую функциональность проекта. Инструменты настройки скелета Project Обычно автоматически генерируют этот файл. Я скопировал его из проекта Шона. Клонировать репо, cd в него, затем следуйте любому из приведенных ниже методов, чтобы попробовать приложение и/или развернуть его. Обратите внимание, что полученное приложение не подходит для развертывания производства. Конечно, не стесняйтесь развернуть его, но выставляйте его в общедоступный интернет только в экземпляре сервера.
Запустите тесты таким образом, от корня проекта.
clojure -T:build test
Это использует псевдоним :build для загрузки файла build.clj на основе tools.build и запустить test задачу.
Надеюсь, тесты пройдут! Вы должны увидеть что -то вроде этого:
Running tests in #{"test"}
[ Many lines of test runner log messages. ]
Ran 11 tests containing 37 assertions.
0 failures, 0 errors.
Примечание о сообщениях журнала:
Вы можете запустить приложение в любой момент в истории коммита этого проекта. Тем не менее , доступная функциональность будет соответствовать только тем, что подготовлено к этому совершению.
Начните приложение и укажите свой браузер на http: // localhost: 3000.
clojure -M -m usermanager.main
Если этот порт используется, запустите его на другом порту. Например, порт 3100:
clojure -M -m usermanager.main 3100
Начала Repl
clj -M:dev:test
После запуска запуска запустите сервер на порту по умолчанию (порт 3000):
user=> ( require 'usermanager.main) ; load the code
user=> ( in-ns 'usermanager.main) ; move to the namespace
usermanager.main=> ( -main ) ; or some other port (-main 8080)Укажите свой браузер на соответствующий URL -адрес http: // localhost: portnumber.
Используйте профили dev и test , когда вы запускаете реплику, будь то автономный или через ваш любимый редактор.
Затем, оценить/применить!
Для развертывания сервера вы обычно хотите создать «Uberjar» -файл .jar , который содержит сам Clojure и весь код из вашего приложения и его зависимости, чтобы вы могли запустить его с помощью команды java -jar . (Но, как я уже говорил ранее, этот проект не является производственным программным обеспечением. Поэтому разверните его только в средах для выбросов серверов.)
Файл build.clj - упомянутый выше - содержит задачу ci , которая:
target папку.jar clojure -T:build ci
Это должно создавать тот же выход, что и test выше, за которым следует что -то вроде:
Copying source...
Compiling usermanager.main...
Building JAR...
target папка будет создана, если ее не существует, и она будет включать папку classes , содержащую весь скомпилированный исходный код Clojure из приложения usermanager и все его зависимости, включая сам Clojure:
ls target/classes/
hiccup hiccup2 public ring usermanager
Он также будет включать отдельный файл .jar , который вы можете запустить так:
java -jar target/usermanager/example-standalone.jar
Это должно вести себя так же, как и пример запуска приложения приложения .
Этот файл JAR может быть развернут на любом сервере, на котором установлен Java и запускается без других внешних зависимостей или файлов.
Я мог бы продемонстрировать, как заменить каждую руку с использованием производственных библиотек Clojure.
Но, может быть, вы можете сделать это своими словами, как самоуправляемое домашнее задание! :)
Сравните и сопоставьте с этими другими проектами пользователя-пример, для подсказок.
Да пребудет с вами источник!
Copyright (C) 2015-2024 Шон Корфилд. Авторское право (C) 2024 Адитья Атали.
Распределено по лицензии Apache Source 2.0.