2015-01-06 2 views
1

정말 간단한 질문입니다. 내 node.js 응용 프로그램을 기능 또는 기능에 따라 관련 모듈로 분할하려고했습니다. 예 : 로그 파일을 읽는 로그 판독 모듈, IRC 봇과 작업하기위한 IRC 모듈 등이 있습니다.Node.js 엉망이 되어도 내 모듈을 함께 연결

현재 로그와 같이 전달해야하는 모든 메시지를 처리하는 전역 이벤트 이미 터 모듈을 사용하여 모든 것을 하나로 묶습니다. 내 DB로 밀어 넣을 항목.

이 기능은 오래 동안 정상적으로 작동했지만 다른 기능을 사용하려면 몇 가지 기능 모듈을 필요로하는 것처럼 느껴질 것입니다. 나는 단단히 묶어서 (그러므로 이벤트 모듈) 멀리하고 싶었지만, 실제로 그걸로 나쁜 점이 있었습니까?

다른 node.js 프로젝트를 검토 할 때 10 개 정도의 다른 모듈이 필요한 한 개의 app.js 파일이 한 곳에서 모든 것을 처리하려고 할 때 자주 보입니다. 나는 내 것을 아주 가볍고 쉽게 읽을 수 있도록 노력하고있다. 당신이 생각할 수있는 잘 수행 된 예가 있습니까?

답변

1

가장 좋은 방법은 다음과 같습니다. 모듈을 개별적으로 테스트 할 수 있습니까? 모듈을 요구하고 테스트 케이스에서 함수를 호출 할 수 있습니까? 모듈이 다른 모듈에 종속되어 있다면 테스트를 위해 가짜 모듈을 조롱하는 것이 얼마나 어렵습니까?

테스트 가능성은 우려를 잘 분리하는 가장 좋은 지표입니다. 실제로 모듈을 필요로한다면 모듈에 10 개의 다른 모듈이 필요하면 괜찮습니다. 저는 실제로 시험을 치르는 데 시간을 할애하지 않을지라도 항상 마음의 뒤쪽에서 시험 가능성을 유지할 것입니다.

개방형 테스트 옵션을 유지하는 것만 큼 좋지 않으며 모듈이 특화된 방법에 대한 유용한 가이드입니다. 세 개의 모듈이 있고 다른 두 개없이 하나를 사용할 수 없다면 아마도 한 모듈에 속할 것입니다. 또는 세 개의 모듈이 분리되어있는 동안 탐색하기 쉽고 크기가 클 수도 있습니다. 그 시나리오에서 저는 보통 래퍼 모듈을 만듭니다.

나는 관련 이름을 가진 디렉토리를 만들고 거기에 다른 세 모듈 (또는 필요한 것은 무엇이든)이 필요한 파일을 index.js에 던집니다. 그런 다음 내 응용 프로그램의 나머지 부분에서 내부적으로 복잡하고 여러 하위 모듈로 분리되어 있지만 하나의 특수 API 인 것처럼 해당 모듈에 액세스 할 수 있습니다. 래퍼 모듈은 API의 단순성을 유지하면서도 모듈화가 가능하도록 나머지 앱에서 그 엉망을 숨 깁니다. 그것은 하나의 모듈에 물건을 결합하는 것이 너무 지저분하고 모듈을 활용하는 상황에서 큰 문제를 해결할 수있는 방법입니다.

(가능한 한 일반적으로 목표로 삼는) 모듈이 일반적이면 NPM에 독립형 모듈로 게시하는 경우가 많습니다. 그런 다음 NPM의 다른 모듈과 마찬가지로 프로젝트에서 요구할 것입니다. 예를 들어, 모든 내 몽구스 모델을 하나의 db 개체에로드하여 쉽게 액세스 할 수있는 스크립트를 작성했습니다. 코드는 내 프로젝트의 루트에있는 dbmodels 디렉토리에있는 mongodb 모델 파일을 반복합니다. 모듈이 필요하고, 모델 데이터를 몽구스로 등록하고, 사용할 수있는 간단한 db 개체 (예 : db.User.findOne({ username: 'munkee' }, function (err, user) { ... })를 생성하십시오.

내가 만든 모든 프로젝트에 똑같은 코드를 계속해서 복사하는 대신 mongoose-simpledb이라는 일반 NPM 모듈을 만들었습니다. the code for that module을 보면 매우 복잡하지 않다는 것을 알 수 있습니다. 일반적이고 유용하지만 NPM 레지스트리에 자신의 장소가 될 가치가 있다고 생각합니다. 그것은 새로운 프로젝트에서 훨씬 더 쉽게 만들었습니다.유용한 정보를 찾는 다른 사람들은 단지 즐거운 보너스입니다.

+1

시간을내어 작성해 주셔서 감사드립니다. 나는 노드에 매우 익숙하지만 다른 언어 (비 js)에서의 경험을 통해 상황이 조금 어색해 지거나 "해킹"될 때 느낌을 자주 얻습니다. 래퍼는 실제로 다른 모듈을 조금 더 잘 나눌 수있는 곳을 볼 수 있습니다. 귀하의 의견을 염두에두고 전반적인 내 앱을 다시 살펴 보겠습니다. 다음은 현재 진행중인 프로젝트입니다 : https://github.com/Hardware-Hacks/node-p3negram 전보 메신저 <---> irc – munkee

+0

행운을 빈다! 우리가 여기서 완벽한 세계를 이야기하고 있다는 것을 기억하십시오. 때때로 "해킹"을 느끼지 않는 해결책은 없지만 점점 더 많은 모듈이 우리에게 더 힘들고 어려운 문제를 해결할수록 노드의 과거의 문제가되고 있습니다. 어쨌든 재미있는 프로젝트처럼 보입니다. :) – Chev

관련 문제