2013-03-11 1 views
1

우리 팀의 PHP에서 ORM을 사용하고 있습니다. 저는 두 가지 별도의 프로젝트에서, 좋은 MVC 디자인에 대해 구체적으로 이야기 했음에도 불구하고 ORM이 사람들이 View 레이어와 유지하기 어려운 코드를 만듭니다.ORM으로 인해 코딩 방법이 잘못 되었습니까?

나는 ORM이 프로그래머가 생각하지 않는 커버 아래에서 쿼리를하기가 너무 쉽다는 의견에 기대고있다. ORM 객체를 뷰 레이어에 반환하면 프로그래머는 기본적으로 데이터베이스 연결을 가져서는 안되는 레이어에 누출시킵니다.

여기 ORM에 대해 정확히 생각합니까? 그렇다면 왜 그렇게 인기가 있습니까? 을 정확히 어떻게 생각하지 않는 경우이 문제를 해결할 수 있습니까?

+0

나는 대답했지만, 당신이 사용하고있는 ORM을 아는 것은 흥미로울 것입니다. – halfer

+0

Symphony framework –

+0

또한 "씬 컨트롤러, 팻 모델"과 같은 간단한 아키텍처 규칙을 사용해 보셨습니까? – halfer

답변

2

보기 레이어에서 ORM 호출이 작다는 것이 인 것은 필연적으로입니다. 예를 들어, 페이지의 카테고리를 나열하는 루프로 foreach (Category::getAll() as $Category):이있을 수 있습니다. 연결은 ORM에 의해 캡슐화 되었기 때문에 뷰의 범위로 유출되지 않습니다.이 컨트롤러 에서이 호출의 결과를 할당하고 템플릿에 개체의 배열을 전달 (그리고 난 확실히 더 복잡한 호출)하지만 imo 사소한 경우에는보기에 괜찮아요.

내 경험에서 ORM의 가장 큰 문제점은 "n + 1"데이터베이스 쿼리 수의 증가입니다. 일반적으로 하나의 화면에있는 많은 목록을 단일 쿼리에서 렌더링 할 수 있지만 ORM을 사용하면 한 테이블에 기본 루프를 사용하고 보조 테이블의 각 인스턴스에 대해 개별 선택을 수행하는 것이 매우 편리합니다. 이것은 비효율적이지만 처리해야하는 쿼리의 수가 늘어나면서 데이터베이스가 삐걱 거리기 시작할 때만 알 수 있습니다.

개발자가 화면을 빌드하는 데 필요한 쿼리 수를 보여주는 dev 모드 (예 : Symfony2 도구 모음, PHP 디버그 또는 유사)로 도구 모음을 실행하도록 개발자에게 요청하는 것이 가장 좋습니다. 사소한 스크린이 50 개 이상의 질의를 필요로 할 때 (또는 당신이 지정한 어떤 천장이라도) 리팩토링 할 필요가있다.

또한 합리적으로 표현적인 쿼리 구문을 사용하는 ORM을 선택하는 것이 좋습니다. 그렇지 않으면 개발자가 ORM을 처음 사용하는 이유 중 일부를 무효화하는 "원시 SQL"모드로 되돌려 보내야합니다. 같은 이유로 Daniel은이 점을 잘 설명합니다. ORM을 효과적으로 사용하는 것에 대한 개발자의 교육을 제공하는 것이 좋습니다.

+0

+1 ORM에 대한 제 2의 큰 (언급되지 않은) 우려 - 큰 쿼리 수를 불러 내기 위해 +1. –

5

나는 그것에 대해 제대로 생각하지 않는다고 말하고 싶습니다. ORM 자체는 나쁜 습관을 조장하지 않습니다. 최소한 당신이 경험하고있는 방식이 아닙니다.

ORM은 다른 프레임 워크와 마찬가지로 도구이거나 api 또는 무엇이든 정확하게 사용할 수 있습니다.

팀의 개발자가 MVC 패턴을 명확하게 이해하지 못하는 것보다 더 문제가있는 것 같습니다. 그 문제를 먼저 해결하는 것으로 시작하겠습니다.

개발자는 MVC 패턴을 사용하여보기 및 컨트롤러를 사용하지 않는 경향이있는 것으로 보입니다. 그 이유는 여러 가지일지도 모르지만, 이와 같은 일을 할 때마다 나는이 생각과 비슷한 것으로 시작한다고 보통 생각합니다.

" 거기에 포인트가 없습니다. "

기본적으로 디자인과 비즈니스 논리를 분리하려고 할 때 실제로 프레젠테이션 계층의 비즈니스 계층에 속하는 일부 조각을 구현하는 것이 더 쉬울 때가 있습니다. 개발자가 나쁘다고해서는 안되지만 경험이나 게으름이 부족할 수도 있습니다. 나는 안드로이드를 위해 개발할 때처럼 (내가 결코 전문적으로는 아니지만)이 정확한 것을 여러 번 유죄로 알고있다. :)).

당신이 알아 차린 나쁜 습관을 사용하고 팀으로 코드를 멋지고 정확하게 구현하는 일종의 코딩 도장이있는 샘플 사례를 찾아내는 것은 어떨까요? 그들이 속한 물건을 가지고있는 실제 이익을 보여주는 시간이 있습니다. 당신이 직접 작성하지 않았거나 그 코드를 책임지는 개발자가 다른 개발자들 앞에서 mangled되는 것이 아니라면 나는 실제 코드를 사용하는 것에 대해 강력하게 조언 할 것이다. 그러나 이것은 분명히 귀사의 문화와 개발자가 이러한 종류의 일에 관심을 갖고 개방하는 경우에 달려 있습니다. 개인적으로 내 직장에서 비슷한 일을하는 것을 좋아합니다.

+1

훈련 dojos, 좋은 생각! +1 – halfer

1

보기에서 쿼리를 수행하는 것은 좋지 않습니다. 그렇게 할 수는 있지만 컨트롤러를 통해 Ajax Requests 나 적절한 것으로 생각하는 것이 좋습니다.

관련 문제