2012-01-05 5 views
3

저는 ColdFusion ORM을 처음 접했고 도움을 얻기 위해 몇 가지 질문을했습니다.엄격한 MVC 프레임 워크에서 ORM 사용

저는 꽤 표준적이고 엄격한 MVC 아키텍처를 사용하는 프레임 워크를 만들고 있습니다. 이 프레임 워크에는 컨트롤러와 모델 사이에 "서비스 계층"이 있습니다. 서비스 계층은 모든 비즈니스 로직과 유효성 검사를 처리합니다.

표준 CRUD 프로세스는 다음과 같이 진행한다 :

사용자가 뷰를 통해 양식을 제출 ->보기 제어기에 제출 -> 제어부는 처리를 위해 서비스 계층에 전송 -> 서비스 층 수행 어떤 종류의 비즈니스 로직과 요청에 대한 유효성 검사 -> 서비스 계층은 데이터를 모델로 보낸다 -> 모델은 EntityNew() 및 EntitySave()를 사용하여 트랜잭션을 실행한다. 서비스 계층으로 돌아가는 ID를 가진 응답 -> 서비스 계층은 일부 논리를 적용하고 사용자에게 메시지를 작성합니다. - 응답 메시지를 컨트롤러로 보내는 것보다 서비스 계층을 만듭니다. -> 컨트롤러가 뷰로 전송합니다. ->보기가 사용자에게 표시됩니다.

이 프로세스는 잘 작동하며 역할 분리에 만족합니다. 그것은 모든 로직을 뷰, 컨트롤러 및 모델로부터 멀리 유지하고 서비스 레이어에서 격리시킵니다.

제 질문은 유효성 검사를 위해 고유 한 사용자 이름인지 확인하는 것과 같이 서비스 계층에서 데이터베이스와 통신해야하는 경우입니다. 어떻게해야합니까? 지금은 서비스 레이어에서 EntityLoad()를 실행하고 있습니다. 이것은 기술적으로 모델 계층을 돌아 다니며 ORM을 통해 데이터베이스와 직접 인터페이스합니다. 이것은 MVC 프레임 워크를 깨뜨리는 것으로 간주 될 것입니다.

또 다른 것은 내가 드롭 다운에 대한 데이터를 가져 오기 위해 EntityLoad()를 오른쪽에서 실행중인 데이터베이스의 데이터가있는 뷰에서 드롭 다운을 채워야하는 경우입니다. 다시 말하지만 이것은 기술적으로 ORM을 통해 데이터베이스와 통신하기위한 모델을 둘러싼 것입니다.

엄격한 MVC 프레임 워크에서 ORM을 사용하는 최상의 방법에 대해 혼란스러워합니다. 데이터베이스와의 모든 상호 작용을 위해 모델 파일에 별도의 메소드가 있어야하며 뷰 또는 서비스 레이어가 모델의 메소드와 통신하도록해야합니까? 내가 그런 생각을하려고 할 때 모든것의 조직이 사라진 것처럼 보인다.

이 문제를 해결하기 위해 노력하고 있습니다.

이 주제에 대한 도움을 주시면 감사하겠습니다.

미리 감사드립니다.

답변

3

제 생각에는 ORM을 서비스 계층에서 직접 사용하는 것이 좋습니다. 아마도 추상화 할 충분한 이유가 없을 것입니다. ORM 기능을 게이트웨이 또는 DAO라고 생각하십시오. 당신이 정말로 원한다면 그 기능을 게이트웨이 나 DAO에 넣을 수 있습니다.

그러나 ORM을 직접 사용하는 것은 잘못된 것입니다. 하지 마. 그것을 처리하는 두 가지 더 좋은 방법이 있습니다.

  • 제어기에서 페이지를 작성하기 위해 필요한 데이터가 다른 데이터와 함께 리턴되도록하십시오 (모델과 대화 함).

  • 뷰에서 서비스 계층 (Ajaxy)으로 원격 호출하여 데이터를 가져옵니다.

아마도 다른 방법으로 처리 할 수 ​​있습니다. 하지만 결론은 모델 레이어와 이야기가 이루어져서는 안된다는 것입니다.

+0

도움 주셔서 감사합니다. 뷰가 데이터베이스에 액세스하는 방식을 재 작업 할 것입니다. 다시 한 번 감사드립니다. – Sequenzia

관련 문제