2011-03-25 3 views
4

CouchDB를 완벽 가이드 (here)이 단락을 읽은 후 : CouchDB 디자인 문서에서 validate_doc_update 함수가 여러 개 있습니다. 좋은 습관?

여러 설계 문서가있는 경우

하는 validate_doc_update 기능을 가진 각각의 그 모든 기능은 각 들어오는 쓰기 요청에 따라이라고합니다. 모두가 통과 할 경우에만 쓰기가 성공합니다. 유효성 검사 실행 순서는 정의되지 않습니다. 각 유효성 검사 기능은 자체적으로 작동해야합니다.

validate_doc_update 함수를 여러 개 처리하는 것이 좋은지 궁금합니다.

의미 : validate_doc_update 필드가있는 디자인 문서를 하나만 만들거나 더 작은 디자인 문서를 만드는 것이 더 좋습니까?

첫 번째 경우에는 유효성 검사 기능이 다른 기능을 방해하지 않는다는 것을 확신 할 수 있지만 많은 제어가 필요할 경우 기능이 매우 커질 수 있습니다.

다른 측면에서는 몇 가지 작은 함수가 읽기 목적과 진화를 위해 더 쉬울 수 있지만 각 함수의 목적을 분명히하고 다른 함수를 엉망으로 만들지 않아야합니다.

또한 각 설계 문서에 유효성 검사 기능을 포함시키는 것이 무엇입니까? 뷰 문서에 하나를 저장하는 것은 약간 더러운 것처럼 보일 수 있지만, 하나의 작은 유효성 검사 기능을 보유하기위한 목적으로 여러 설계 문서를 작성하는 것은 나에게도 영리하지는 않습니다.

당신은 어떻게 생각하십니까?

내가 놓친 뭔가, 그게 내 질문의 요점은 여러 validate_doc_update 기능의 관리에 대한 좋은 사례가 무엇입니까?

답변

10

참고로, 나는 인용 단락을 썼다.

일반적으로 응용 프로그램과 디자인 문서간에 1 : 1 상관 관계가 나타납니다. 단일 애플리케이션에 필요한 모든 것이 하나의 설계 문서에 있어야합니다. 큰 응용 프로그램은 여러 가지 이유로 (여러보기 그룹과 같이) 여러 가지 이유로 여러 디자인 문서에 의존하려고 할 수 있지만 일반적으로 응용 프로그램 당 하나의 디자인 문서가 좋은 방법입니다.

이제 데이터베이스 당 여러 개의 응용 프로그램이있을 수 있습니다. 예 : CMS : 하나의 응용 프로그램이 CMS보기 응용 프로그램에 직면 할 수 있고 다른 응용 프로그램은 관리 인터페이스가 될 수 있습니다. 당신은 그것들을 분리하여 보관하기를 원합니다, 왜냐하면 그것들은 동일한 데이터에 대해 작동하고 그것들을 분리 된 상태로 유지하는 두 개의 별개의 응용 프로그램들이 좋은 조직 아이디어이기 때문입니다. 다양한 보안 메커니즘이 적용되므로 각 앱에 적용 가능한 것을 구현하는 두 가지 유효성 검사 기능이 있습니다.

인용 된 단락은 어떤 이유로 든 데이터베이스 당 둘 이상의 디자인 문서가있는 경우의 정의입니다. 그것은 무엇을 기대하는지 설명합니다. 그것은 물건을 분리하는 방법에 대한 지침이 아닙니다. 어플의 규칙에 따라 하나의 디자인 문서로 이동하면 대부분 좋은 시간입니다.

+1

+1. 처음부터 "디자인 문서"가 "앱"으로 불려지면 어떻게 다른지 궁금해졌습니다. 어쩌면 "앱"은 좋은 단어가 아니지만 "디자인 문서"가 대부분의 사용자에게 많은 의미가있는 것은 아닙니다. (그리고 역사를 바꿀 때 문서를 "레코드"라고 부릅니다.) – JasonSmith

+0

"디자인 문서"가 혼란 스러울 수 있다는 것에 동의합니다. 특히 처음에는 @jhs에 동의합니다. 할 수있는 일은 "validate_doc_update"필드를 포함하고 "views"및 필드를 포함하는 "type"과 같은 다른 것을 금지해야하는 "auth"유형과 같은 다른 "유형"의 디자인 문서를 만드는 것입니다 "views"이고 "validate_doc_update"는 없습니다. 실제로 이것은 검증 기능을 사용하여 수행 할 수 있지만 기본 제공 항목은 내가 생각하는 모든 것을 구성하는 것이 더 쉬울 것입니다. 이렇게하지 않는 것이 좋은 이유는 사용자가 내가 원하는대로 문서를 관리하게하는 것입니다. – Arnaud

+1

예, CouchDB가 편안합니다. 당신이 당신의 자신의 정책을 실행하고 싶다면, 할 수 있고해야한다! 그러나 나는 보통 모든 것을하기 위해 하나의 큰 디자인 문서로 시작하고, 그 다음에는 아주 명백한 이유가있을 경우 더 많은 것을 나눠 씁니다. 예를 들어, 나는 더 빠르기 때문에 Erlang을 사용하여 필터 함수를 구현했습니다. – JasonSmith

6

이미 답변을 선택했음을 알고 있습니다. 그러나 적어도 문제에 관한 관행을 대안으로 버릴 것입니다.

필자는 적어도 시간이 지나면 순수한 CouchApps를 구축하는 것에 반대하기로 결정했습니다. (나는 Node.JS를 새로운 미들웨어 계층으로 결정했다.)이를 염두에두고 CouchDB 디자인 도큐먼트에서 더 많은 유연성을 얻는다.

필자는 데이터베이스의 각 엔티티에 대해 별도의 디자인 문서를 사용하는 방향으로 옮겼습니다. 결과적으로 각 디자인 문서는 자신의 뷰, 유효성 검사 함수, 업데이트 처리기 등을 포함합니다. 질문에 대한 응답으로 각 유효성 검사 함수는 데이터베이스에서 하나의 엔티티 만 처리하므로보다 집중적이고 관리하기 쉽습니다.

+0

감사합니다. 이 질문의 목적이기도합니다. 사람들이 어떻게 대처하는지보십시오. – Arnaud

+1

데이터베이스의 레코드/문서의 "유형"마다 디자인 문서를 의미합니까? 멋지다. CouchDB는 편안합니다. 또한 NodeJS는 CouchDB를 사용하는 개인적으로 가장 좋아하는 방법입니다. 비록 내가 보통 외부 프로세서로서 그것을 사용하지만, 쿼리를 가로 채기보다는'_changes' 결과에 반응 할지라도 논쟁 할 수는 없습니다. – JasonSmith

관련 문제