문제

일반적인 답변을 사용할 수 있는 구체적인 질문이 있습니다.PHP로 다중 계층 애플리케이션을 구축할 때 모든 작업이 비즈니스 로직 계층에서 수행되어야 합니까, 아니면 어떤 계층이라도 작동할 수 있습니까?예를 들어, 프레젠테이션 계층에 (데이터베이스의) 사용자 정보를 표시하는 애플리케이션을 구축한다고 가정해 보겠습니다.비즈니스 계층을 사용하여 단순히 데이터를 프레젠테이션 계층으로 전달해야 할까요, 아니면 프레젠테이션 계층 내에서 직접 데이터베이스에서 정보를 가져와야 할까요?프레젠테이션 계층은 데이터 표시에만 사용해야 하고, 접근자 계층은 데이터 가져오기에만 사용해야 하며, 모든 작업은 비즈니스 계층에서 수행되어야 할까요?

또한, 다른 레이어에 대해 말하자면, 절차적으로 작업을 수행하거나 OOP를 사용하는 것이 가장 좋습니까(예: 템플릿을 표시하기 위해 포함을 사용하는 것과 템플릿을 포함하기 위해 클래스를 사용하는 것, 절차적으로 데이터를 검증하는 것과 클래스를 사용하는 것, 함수와 클래스를 사용하여 가져오기 등) 데이터베이스 등의 데이터)

보시다시피 저는 일이 어떻게 진행되는지, 일을 수행하는 최선의 방법을 이해하려고 노력하고 있습니다.즉, 해당 주제에 대한 조언이나 일반적인 팁이 있다면...제발 남겨주세요..

감사해요

도움이 되었습니까?

해결책

웹 애플리케이션과 N-Tier는 JSON 및 AJAX 또는 Flash 및 XMLRPC의 광범위한 채택으로 N-Tier의 개념이 확장 되었기 때문에 흥미 롭습니다. 이것 WebOpedia의 차트 이것을 잘 표현하는 비틀 거리는 파란색 선을 표시합니다. 요약하면 : 귀하의 비즈니스, 액세서 및 프리젠 테이션 로직은 서버에 존재할 수있을뿐만 아니라 브라우저에있는 경우에도 존재할 수 있습니다. 그러나 N-Tier의 의도는 다음과 같습니다 나눌 수 있음. UI 또는 데이터베이스를 변경하거나 다른 UI를 추가 해야하는 경우 비즈니스 로직에 영향을 미치지 않아야합니다. 그리고 이것이 귀하의 API를 결정하는 것입니다. HTML과 CSS가 Flex를 위해 폐기되는 날을 정리하고 MySQL이 Oracle에 대해 변경됩니다.

이것은 결정된 요구 사항이며, 내가 사용한 일부 웹 애플리케이션에서는 N-Tier의 변형이 동시에 사용됩니다. 예를 들어 Lyrishq (이메일 ASP)를 예로 들어 보겠습니다. 고객 웹 응용 프로그램이 있습니다. 최근에 그들은 플래시 기반 애플리케이션을 추진하는 것을 응시했습니다. 이것은 분명히 많은 데이터를 브라우저에 바로 배송하고 있으며 Flash UI에는 약간의 비즈니스 로직이 복제 될 수 있습니다. 그러나 다른 응용 프로그램은 다른 (그리고 중첩) 요구 사항에 필요하기 때문에 두 응용 프로그램을 유지해야합니다.

가장 일반적인 PHP 응용 프로그램은 브라우저에 많은 정보를 얻지 못한 데이터를 배송하는 것을 고려하지 않습니다. 그러나 만약 당신이라면, 이것은 당신이 당신의 API를 설계하고 싶은지 매우 빨리 알려줄 것입니다. 아마도 PHP 프리젠 테이션 템플릿과 유사한 내부 컨트롤러 클래스 외에 XMLRPC, REST 또는 SOAP에 대해 이야기 할 수있는 컨트롤러를 원할 것입니다. 이것은 간단한 웹 로그인 페이지의 경우 엄격하게 의미가 있습니다. LoginController 클래스와 대화하는 로그인 양식에 대한 PHP 템플릿이 있습니다. XML 인터페이스도 마찬가지로 동일한 LoginController 클래스를 사용합니다. AJAX 요청에 SQL을 작성하는 Bonkers라고 가정하는 것처럼 ... 프리젠 테이션 템플릿에 쿼리를 쓰는 것을 엄격히 피할 수 있습니다.

비즈니스 계층은 데이터베이스 백엔드 브랜드를 전환 할 필요가 없기 때문에 비즈니스 계층은 다소 엄격 할 수 있습니다. 엄격한 N-Tier 디자인에서 비즈니스 객체가 데이터베이스와 대화하는 방법은 비즈니스 계층을 다시 작성하지 않고 MySQL에서 MS SQL로 전환 할 수있는 것처럼 보입니다. 때때로 이것은 각 테이블 (테이블 게이트웨이), 각 행 (활성 레코드), 각 조인 또는 각 트랜잭션의 객체를 모델링하여 수행됩니다. PDO 또는 PHP-ADA와 같은 것이 유용하지만 완전한 격리에는 충분하지 않습니다. 최대 절전 모드와 같은 Java의 ORM/Persistence Layers는 종종 OQL (Object Query Language)을 제공함으로써 이런 종류의 격리를 더 잘 보여줍니다.

나 자신은 현재 MySQL 기반 PHP 응용 프로그램에서 MS-SQL One으로 백엔드 전환을 수행하고 있습니다. 응용 프로그램은 직접 SQL 쿼리 만 사용했습니다. 클래스에서 일련의 쿼리를 가져 와서 추상화하거나 서브 클래싱을하고 비즈니스 논리를 변경하지 않는 방법을 선택한다고 상상해보십시오. 최소한, 당신은 모든 SQL이 간접 호출을 만들고 싶을 것입니다. (PHP ORM에 게시하십시오.)

마지막으로, OOP에 대한 질문에 : 요구 사항을 충족시키는 방법을 사용하십시오. 저의 개인적인 기술은 PHP 프레젠테이션 템플릿에서 몇 분 동안 논리로 시작하여 공을 굴리는 것입니다. 공통된 아이디어가 있다면, 나는 일상을 공유 수업으로 나와서 DNRY 원칙을 보존하기 위해 노력하고 있습니다. (ㅏ 그래서 여기에 게시하십시오. OOP는 N-Tier 디자인의 기본 요구 사항이 아닙니다. Dnry는 코드를 유지 관리하기 위해 매우 중요합니다. 마감일과 스코프 시프트는 종종 API를 파괴합니다. 계속 진행하는 데 필요한 것을 얻을 때까지 리팩터링하십시오. 나는 OOP가 당신을 거기에 데려 오는 데 도움이 될 것입니다.

다른 팁

나는 큰 컨트롤러(접속자 계층)보다 큰 모델(비즈니스 계층)이 선호되어야 한다는 내용을 읽은 적이 있습니다.

또한:그것은 실제로 프로젝트에 달려 있습니다.내 눈에는 모든 것에 OOP를 사용하는 것이 항상 의미가 있는 것은 아닙니다(아마 모든 사람이 여기에 동의하지는 않을 것입니다). 특히 PHP와 같은 스크립팅 언어에서는 단순히 유효성 검사기를 함수로 수행하는 것이 종종 더 쉽습니다.

프레젠테이션 계층에 데이터베이스 호출을하지 말라고하는 것이 좋습니다.

다른 접근법이 있습니다 멀티 계층 아키텍처 그리고 그들은 다른 권장 사항을 가지고 있습니다.

내가 함께 일한 Zend 프레임 워크는 일반적으로 Fat Fat Model/Thin Controller 변형 형식입니다.

이 기사를 찾으면 PHP 프레임 워크 선택에 대한 메모 (이 경우) CakePHP를 Zend 프레임 워크와 비교하는 데 능숙합니다.

내 Opionion의 가장 큰 차이점은 CakePHP가 취한 컨벤션-구성 접근법으로 Zend 프레임 워크의 구성 초점과는 매우 다릅니다.

멀티 계층 아키텍처를 구현하는 경우 많은 의미가있는 프레임 워크를 사용함으로써, 당신은 OOP를 사용하는 방식으로 강제적이거나 적어도 나쁘지 않습니다.

물론 순수한 기능 호출을 가진 3 계층 아키텍처를 구현할 수는 있지만 내 경험에 따라 잘 확장되지는 않을 것입니다.

웹 사이트의 경우 Tiers가 의사 소통하는 방식으로 인해 실제로 상당히 다른 MVC 패턴이 좋은 선택입니다.

"정상적인"3 계층 아치와 MVC 패턴의 차이점은 뷰가 컨트롤러와 모델 레이어 모두에 액세스 할 수 있다는 것입니다.

특히 Franz가 말한 것, 특히 더 큰 컨트롤러보다 큰 모델을 선호하는 것에 대해 동의합니다. 또한 코드가 어디로 가야하는지 구별하는 데 도움이 될 수 있습니다. UI 구조/흐름과 관련이있는 경우,이를 제어 장치; 순수한 비즈니스 논리라면 모델에 들어갑니다 ..

PHP Waters를 테스트하기 전에 Strut에 대한 많은 경험을 가진 Java 개발자로서 MVC 아이디어를 스크립팅 언어에 적용하는 방법을 이해하는 데 시간이 걸렸습니다. 저는 개인적으로 시스템을 사용하여 시스템을 사용하여 개인적으로 발견했습니다. Codeignitor 많은 도움이되었습니다 .. 그것은 스트럿과 같은 프레임 워크를 제공하고 좋은 MVC 패턴을 장려합니다 ..

내 세상은 다음과 같습니다.

DB1 <-Model1 액세

컨트롤러 : 뷰에서 뷰, 필터를 필터링/구성하는 데이터 흐름을 제어합니다. 주어진 비즈니스 규칙을 구현합니다 신청. 비즈니스 규칙을 알고 있습니다 ~ 사이 모델.

보기 : 컨트롤러가 제공 한 데이터를 표시하는 템플릿에 지나지 않습니다. 모든 데이터를 컨트롤러로 전달하십시오. Model1 또는 Model2 또는이를 지배하는 비즈니스 논리에 대한 지식이 없습니다.

퍼즐의 누락 된 조각이므로 디자인 패턴에 대한 연구를하는 것이 좋습니다. 이 주제를 다루는 많은 PHP 관련 책이 있습니다 (애들의 주제는 좋음)와 디자인 패턴의 '성경'이 있습니다. "디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소"

더 안정적인 버전을 기다리겠습니다 교리 2.

그것은 지속성 지정 도메인 객체 철학으로 개발되고 있습니다. 이 프레임 워크의 도움으로 멀티 계층 애플리케이션을 개발하는 것이 훨씬 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top