2016-09-28 3 views
1

배경 정보node.js/express application - 데이터베이스 연결 논리는 어디에 두어야합니까?

방금 ​​첫 번째 명시 적 응용 프로그램을 만들었습니다. 파일과 기본 폴더 구조가 많이 생성되었음을 알 수 있습니다. 나는 '위젯'과 GET 메소드가 호출 될 때, 나는 레디 스 데이터베이스를 호출 할 필요라는 새로운 경로를 생성 할

[email protected]:/var/www/html/nodejs_samples/tutorial1$ ls -lah 
total 36K 
drwxr-xr-x 7 me me 4.0K Sep 28 09:26 . 
drwxrwxr-x 5 me me 4.0K Sep 28 08:45 .. 
-rw-rw-r-- 1 me me 1.5K Sep 28 08:45 app.js 
drwxr-xr-x 2 me me 4.0K Sep 28 09:20 bin 
drwxrwxr-x 96 me me 4.0K Sep 28 09:26 node_modules 
-rw-rw-r-- 1 me me 352 Sep 28 09:26 package.json 
drwxr-xr-x 5 me me 4.0K Sep 28 08:45 public 
drwxr-xr-x 2 me me 4.0K Sep 28 09:26 routes 
drwxr-xr-x 2 me me 4.0K Sep 28 08:45 views 
[email protected]:/var/www/html/nodejs_samples/tutorial1$ 

목표

:이처럼 내 응용 프로그램 구조가 현재 모습입니다 쿼리를 실행합니다. 나는이 GET을 트리거하는 데 사용할 URL은 다음과 같은 것입니다 :

http://myserver/tutorial1/widgets/ 

또는 12345 내가 조회 할 위젯 키가

http://myserver/tutorial1/widgets/12345 

.

내가 그렇게 한까지

내가 연결하는 방법을 설명이 문서를 발견 무엇/A 레디 스 데이터베이스 쿼리 : 나는 또한 경로를 복사 한 http://expressjs.com/en/guide/database-integration.html#redis

을/명시 것을 users.js 발전기는 "무료"로 나를 위해 routes/widgets.js를 출발점으로 삼았습니다. 나는 데이터베이스 연결 논리와 쿼리 로직을 추가해야하는 곳은 나에게 분명하지 않다

[email protected]:/var/www/html/nodejs_samples/tutorial1$ cat routes/widgets.js 
var express = require('express'); 
var router = express.Router(); 

/* GET widgets listing. */ 
router.get('/', function(req, res, next) { 
    res.send('respond with a resource'); 
}); 

module.exports = router; 

질문

:

이처럼 내 경로가/widgets.js 파일의 모습입니다. 저는 MVC에서 모든 데이터베이스 로직을 모델로 분할하는 데 익숙합니다.

모든 것을 route/widgets.js 파일에 저장할 수 있습니까?

내 app.js 파일의 모양은 http://pastebin.com/hAe5mvwt에 대한 링크가 있습니다. 나는 10 줄과 28 줄의 2 줄을 추가했다.

좋은 자습서에 대한 제안이나 링크가 있으면 좋을 것이다.

+0

당신은 * 할 수 있지만 그 다음에는 경로 처리기에 직접 연결됩니다. 그런 식으로 시작하는 것이 좋지만, 나는 더 강한 관심사를 선호합니다. 궁극적으로 이것은 의견에 귀착됩니다. 기능을 해할 구체적인 "올바른"방법은 없습니다. –

답변

0

대답은 예입니다. MVC는 잘 작동하고 데이터베이스는 확실히 모델에 포함될 수 있습니다.

그러나 고양이를 피하는 데는 여러 가지 방법이 있습니다. 이 시점에서 다소 사소한 것으로, 나는 당신이 당신에게 편리한 것을해야한다고 생각하고 합리적으로 깨끗한 디자인을 느낀다.

시스템의 복잡성이 커짐에 따라 원활하게 진화 할 수있는 방법이 필요합니다. 당신은 갈수록 현실이 바뀌기 때문에 당신은 결코 최후의 '최고의'디자인을 가지지 못할 것입니다.

이미 구현되고 널리 사용되는 많은 (그리고 매우 다양한) 강력한 디자인을 탐색하려면 먼저 node-modules.com, npmjs.com, npms.io를 확인하십시오.

시간이 있다면 코드 구성을위한 여러 가지 전략을 탐색해야한다고 생각합니다.

더 큰 문제는 어떻게하면 응용 프로그램을 완전히 깨지 않고 (모르는 사이에) 도로를 따라이 디자인을 어떻게 바꿀 수 있습니까 ().

코드 조직을 너무 많이 고민하는 것보다는 가능한 한 자동으로 테스트하는 방법을 고안하는 것이 좋습니다. 그렇게하면 디자인을 변경하면 무엇이 망가 졌는지 확인할 수 있습니다. 따라서 디자인을 변경할 수 있습니다.

실용적인 경우 유니트 테스트가 필요합니다. 그렇지 않은 경우 통합 테스트, 대용량 엔드 - 투 - 엔드 테스트가 필요합니다.

모듈/모델 파일/무엇이든간에 뭔가 넣을 수 있고 단위로 별도로 테스트 할 수 있다면 아마도 다른 디자인보다 더 좋습니다.

+0

나는 당신의 제안을 많이 좋아합니다. 코드를 테스트 할 수있는 단위로 분리하는 것은 내가 염두에 두는 좋은 전체 원칙입니다. 내가 할 일은 특정 경로 파일에 모든 것을 넣는 것부터 시작하는 것입니다. 노드와 표현을 배우기 만하면됩니다. 그리고 나서 일단 익숙해지면 ... 아마도 테스트 모자를 쓰고 샘플을 다시 방문 할 것입니다. 어떤 종류의 리팩토링이 테스트를 가장 잘 지원하는지 확인하는 코드. – Happydevdays