이 앱은 Sean Corfield의 사용자 관리자 예점 프로젝트 (Commit SHA 2A9CF63의 동기화)의 제거 변형입니다.
Sean의 원래 "사용자 관리자"예제 프로젝트 및 해당 변형 (이를 포함하여)은 "라이브러리 만 사용하여 Clojure 웹 응용 프로그램을 구성하는 방법"을 설명하는 것을 목표로합니다. .
"상속을 통한 구성", "프레임 워크 오버 라이브러리"및 "데이터 방향"기능은 웹 프로그래밍을 포함하여 Clojure World의 표준 정신 모델에서 두드러지게 나타납니다. 이러한 주요 직관이 없으면 Clojure를 처음 접하는 경험이 풍부한 개발자조차도 라이브러리를 사용하여 앱을 구축하는 데 어려움을 겪고 있습니다. "사용자 관리자"집단의 데모는이 특정 도전을 해결하는 것을 목표로합니다. 그들은 웹 개발 모범 사례를 가르치고 자하는 것을 열망 하지 않습니다 . 이를 위해 모든 "사용자 관리자"예제는 작고 단순화 된 "웹 1.0"스타일 앱입니다.
이 프로젝트는 "From First Principles"프라이머 를 확장합니다. Sean의 원래 데모 앱을 사양으로 사용하기로 결정했습니다.
다른 것이 없다면, 그것은 자신의 가려움증을 긁는 것이 존재합니다 ... 나는 베어 본 설명을 좋아하고 "기다리는 이유는 무엇입니까?" 토끼 구멍과 접선.
다른 모든 "사용자 관리자"데모는 간단하지만 실제 제작 웹 앱에서 Clojure 전문가가 사용하는 라이브러리로 구축됩니다. 따라서 라이브러리가 자신의 (사용자 정의) 웹 스택 (또는 프레임 워크)의 선구자라면 ... 라이브러리의 선구자는 무엇입니까? 도서관 없음 :)
이 코드베이스를 통해 작업 할 때 나란히 참조 할 수 있도록 원래 사용자 관리자와 내 블로그 게시물을 편리하게 유지하십시오.
명확하지 않거나 오류가 있으면 문제를 열어주십시오 (그러나 코드의 구조를 변경하지 마십시오).
독자가 앱의 "제작"을 관찰하도록 도와주기 위해 제작했습니다. 해당 개발 시점과 관련된 사용 지침에 대해서는 해당 커밋에 따라 readme을 참조하십시오.
우리는 대략적인 거친 입자 된 정신 모델에서 고 충실한 정신 모델로 점차 더 잘 배우고 있다고 생각합니다. 따라서 일부 의도적 인 단순화는 웹 전문가를 괴롭힐 수 있습니다 (Get to Delete 사용). 한 사람은 학습자가 연구, 실험, 동료 및 멘토의 총계에서 일을 할 수있는 "올바른"방법을 선택할 것을 신뢰합니다.
학습 할 때 때때로 불안한 것이 좋습니다.)
최초의 커밋에서 앞으로 나아갈 경우 기대할 사항 :
curl 요청을 앱에 발행 할 수 있어야합니다. curl localhost:3000
curl -XPOST localhost:3000/some/path?q=somethingsomething
curl -XDELETE localhost:3000/foo/bar/baz
usermanager.main 네임 스페이스에는 항상 서버 프로세스 (및/또는 현재 상태)를 시작/중지하는 커뮤니케이션 방법이 항상 있어야합니다.usermanager.* 네임 스페이스는 단서입니다.usermanager.main 의 시작/정지 유틸리티는 서버 복원을 용이하게해야합니다.dev/ Directory에서 확인하십시오 (수동으로 만들어야 할 수도 있음).department 및 addressbook )을 채워야합니다.dev 데이터베이스를 쿼리/수정/검사하십시오 ...내가 언급했듯이, 나는 원래 프로젝트의 디자인에 충실도를 떨어 뜨리지 않고 가능한 한 많은 라이브러리를 빼 냈습니다. 예외는 웹 앱과 외부 세계 사이의 호스트 인터 로프 형태입니다. 나는 그러한 요구에 대해 기존 솔루션 (라이브러리)을 가정했습니다 (어딘가에 경계를 그려야합니다!). 또한이 첫 번째 원리 설명의 주제의 중심이 아닌 일부 생물 안락 유틸리티.
블로그 게시물로 돌아가서이 경계를 어디서 그리고 왜 그렸는지에 대한 더 나은 그림을 얻으십시오.
구체적으로, 나는 사용했다.
UserManager의 API, 도메인 모델 및 핵심 "비즈니스 로직"에 대한 Sean의 사양에 충실하기 위해서는 userManager-Axample 소스의 직접적인 부분을 가지고 있습니다.
일반 Clojure 데이터를 사용하여 움직이는 부품을 구성한다는 아이디어를 강화하기 위해 Sean이 만든 설계 선택을 사용하기 위해 코드를 작성했습니다 (예 : html 렌더링 로직이 사용하기 위해 요청 컨텍스트에서보기 이름을 주입). 마찬가지로, 링 사양에 충실하기 위해 모든 자체 작성 링 유틸리티와 미들웨어는 링 사양을 따릅니다. 고리로 제공 된 원본으로 교체하는 것은 간단해야합니다.
자신의 변형을 작성하기로 선택한 경우 다음과 같은 소송을 제기하는 것이 좋습니다.
지금까지는 분명해야하지만 어쨌든 진술 할 것입니다 ... 박탈 된 앱은 다른 "사용자 관리자"예제가 사용하는 거의 모든 라이브러리를 생략하기 때문에 실제 요구에 전혀 강력하지 않습니다. 해당 앱조차도 실제 배포 자격이있는 경우 (설계 검토, 통합 테스트, 보안 검사 등) 작업이 필요합니다.
Sean의 UserManager-Axample 프로젝트와 동일합니다.
deps.edn 파일을 제공한다고 가정합니다.tools.build build.clj 파일에서 명령을 사용하기위한 도서관입니다. deps.edn 파일의 :build 별칭을 통해 포함됩니다. Clojure-Cli-using 프로젝트는 컨벤션별로 이러한 build.clj 파일을 사용하여 표준 및 사용자 정의 프로젝트 빌드 기능을 제공합니다. 프로젝트 골격 설정 도구는 일반적 으로이 파일을 자동 생성합니다. Sean의 프로젝트에서 복사했습니다. Repo를 복제하고 cd 넣은 다음 아래의 방법을 따라 앱을 시험해 보거나 배포하십시오. 결과 앱은 생산 배포에 적합하지 않습니다. 물론 자유롭게 배포하십시오. 그러나 Throwaway Server 인스턴스에서만 공개 인터넷에 노출하십시오.
프로젝트의 근본에서 테스트를 이런 식으로 실행하십시오.
clojure -T:build test
다음은 :build 을 사용하여 tools.build 기반으로 build.clj 파일을로드하고 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
REPL이 시작되면 기본 포트 (포트 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로 가리 킵니다.
독립형 또는 좋아하는 편집기를 통해 Repl을 실행할 때 dev 및 test 프로필을 사용하십시오.
그런 다음 평가/적용하십시오!
서버 배포의 경우 일반적으로 Clojure 자체와 응용 프로그램의 모든 코드와 해당 종속성을 포함하는 " .jar "( java -jar 명령으로 실행할 수있는. (그러나 앞에서 언급 했듯이이 프로젝트는 제작 소프트웨어가 아닙니다. 따라서 서버 환경에만 배포하십시오.)
build.clj 파일 - 위에서 언급 한 ci 작업이 포함됩니다.
target 폴더를 정리합니다.jar 파일을 생성합니다 clojure -T:build ci
위의 test 와 동일한 출력을 생성하고 다음과 같은 것과 같은 결과를 얻을 수 있습니다.
Copying source...
Compiling usermanager.main...
Building JAR...
target 폴더는 존재하지 않는 경우 생성되며 usermanager 응용 프로그램의 모든 컴파일 된 Clojure 소스 코드를 포함하는 classes 폴더 와 Clojure 자체를 포함한 모든 종속성이 포함됩니다.
ls target/classes/
hiccup hiccup2 public ring usermanager
여기에는 다음과 같이 실행할 수있는 독립형 .jar 파일도 포함됩니다.
java -jar target/usermanager/example-standalone.jar
이것은 위의 응용 프로그램 예제와 동일하게 행동해야합니다.
이 JAR 파일은 Java가 설치된 모든 서버에 배포되어 다른 외부 종속성이나 파일없이 실행할 수 있습니다.
프로덕션 Clojure 라이브러리를 사용하여 각 손으로 달린 조각을 교체하는 방법을 데모 할 수 있습니다.
그러나 아마도 당신은 자기 할인 된 숙제로 자신의 말로 할 수 있습니다! :)
단서에 대해 다른 사용자 관리자 예식 프로젝트와 비교하고 대조하십시오.
출처가 당신과 함께 있기를 바랍니다!
저작권 (C) 2015-2024 Sean Corfield. 저작권 (C) 2024 Aditya Athalye.
Apache 소스 라이센스 2.0에 따라 배포되었습니다.