저는 Express와 MariaDB / Cassandra를 백엔드로 사용하여 중간 규모의 애플리케이션을 작성하고 있습니다.
모델 서비스 컨트롤러 패턴 을 따르려고합니다 . 초기 디자인에는 얇은 컨트롤러와 팻 모델이 있었지만 모델에 많은 코드가 포함되어 있고 아마도 별도의 파일로 분할해야 할 필요가 있다고 느꼈습니다. 이제 컨트롤러와 모델 사이에 서비스 계층이 있습니다.
컨트롤러 / API 방법과 서비스 방법 간의 1-1 매핑을 달성하려고합니다.
각 단일 서비스 메서드는 해당 API 메서드에서 수행 할 모든 작업에 대한 코드를 포함하려고합니다. 내 유효성 검사 논리는 서비스에 있습니다. 이 서비스는 async
nodejs 모듈을 사용하여 내부적으로 여러 모델을 호출 하고 다른 모델에 대한 응답을 처리하고 전달할 수 있습니다. 그러나 이것은 문제가되고있다.
각 사용자가 조직에 속한 사용자를 등록한다고 상상해보십시오. -
이 모든 것은 트랜잭션 내에서 수행됩니다.
서비스에 유효성 검사를하면 조직 삽입을위한 컨트롤러 / API가 없더라도 여기에서 유효성 검사를 수행 할 수 있도록 조직 삽입을위한 서비스가 있어야합니다. 그러면 서비스와 컨트롤러 / API 간의 1-1 매핑이 깨집니다.
모델에 유효성 검사를 넣는 또 다른 문제는 조직이나 사용자가 삽입되기 직전에 수행된다는 것입니다. 이제 조직 데이터가 정확하지만 사용자 데이터가 올바르지 않으면 조직이 실제로 삽입되지만 롤백해야합니다.
이것을 처리하는 더 좋은 방법이 있습니까? 서비스에서 처음에 사용자 및 조직에 대한 유효성 검사를 수행 한 다음 모델 내에서 다시 수행해야합니까? 아니면이를 처리하는 더 좋은 방법이 있습니까? 나는 과감한 변화를 수행 할 수 있습니다.
불행히도이를 처리 할 수있는 좋은 방법은 없습니다. MariaDB / Cassandra 사용에 익숙하지 않지만 Express / Mongooose / MongoDB를 사용하여이 작업을 수행했습니다. 문제는 때때로 데이터베이스와 관련이없는 유효성 검사를 수행해야한다는 것입니다 (예 : 연락처 양식, 기타 데이터베이스가 아닌 작업). 다른 경우에는 고유 한 필드 검사와 같은 항목에 대한 데이터베이스 기본 유효성 검사가 필요합니다. Mongoose의 경우 고유성을 확인하기 위해 서비스 기반 유효성 검사기를 만들려는 시도가 있었지만 (Mongoose 작성자에 따라) 아마도 경쟁 조건으로 인해 100 % 작동하지 않는 결과를 낳았습니다.
내가 접근 한 방법은 프런트 엔드 / 경로 유효성 검사 서비스 / 미들웨어를 만들어 필수 매개 변수 등을 확인하는 것이 었습니다.이 중 일부는 db에서 처리 할 수 있지만 문의 양식 사례에서와 같이 일부는 서비스. 이러한 오류 메시지를 처리하기 위해 여러 가지 방법 (리소스를 찾을 수 없음, 프런트 엔드 유효성 검사 등)으로 Error 개체를 확장했습니다.
그런 다음 모든 오류 (프런트 엔드 서비스, Mongo, Mongoose)가 버블 링되고 .NET을 사용하여 컨트롤러에 전달되는지 확인합니다 next(err)
. 모든 오류는 다른 오류 모델을 통합 형식으로 변환 한 다음 json으로 출력하는 오류 미들웨어로 유입됩니다. 최종 결과는 매우 깨끗한 설정을 유지하면서 오류가 처리되는 위치에 대한 많은 유연성입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다