문제

나는 수년에 걸쳐 다른 개발자들이 N-Tier 시스템 개발의 계층을 구성하는 것에 대한 다른 기준을 가지고 있음을 알았으므로 StackoverFlow에서 합의가 무엇인지 궁금했습니다.

별도의 논리적 레이어는 별도의 계층이라고 부를 수있을만큼 충분합니까, 아니면 별도의 계층이라고 부르려면 별도의 서버 (물리적 또는 가상)에 배포 할 수 있습니까?

질문을 조금 다르게 표현하겠습니다. 호출 메커니즘이 프로세스, 스레드 로컬 또는 아파트 로컬에있을 수 있다면 클래스가 라이브러리 또는 패키지로 구성되는 방식에 따라 두 개의 다른 계층이라고 주장 할 수 있습니까?

도움이 되었습니까?

해결책

나에게 물리적 계층은 시스템의 일부를 의미하며 설계 다른 물리적 기계에서 실행됩니다. 예, 언제든지 DB 연결 문자열을 다른 서버에 가리킬 수 있지만 DAL이 너무 수다스럽고 N+1이고 무한한 레코드 세트 문제가있는 경우 네트워크 대기 시간이 실제로 빠르게 죽일 수 있습니다.

반면에 논리적 층은 우려의 분리, 응집력 및 커플 링의 미덕을 지원합니다. 엄격히 별도의 어셈블리에있을 필요조차 없습니다. 네임 스페이스는 트릭을 수행합니다. 당신이하지 말아야 할 수업에 전화하지 마십시오. ndepend가 당신을 도와줍니다.

다른 팁

별도의 논리적 레이어는 그것을 계층이라고 부르기에 충분합니다. 반드시 별도의 서버에있을 필요는 없지만 다른 레이어와의 정의 된 분리는 확실히 가능합니다.

예를 들어 단일 서버에서 실행하는 3 계층 시스템 (DB, DLL, ASP 페이지)을 사용하는 것이 었습니다. 일부 정의에 따르면 이것은 단일 계층 시스템입니다. 우리는 이제 별도의 서버에서 데이터베이스를 실행할 수 있습니다. 필요한 유일한 변경 사항은 연결 문자열이지만 이제는 두 개의 계층 솔루션일까요?

그렇기 때문에 계층의 개념은 실제로 필요한 것이 아니라 별도의 기계에서 실행하는 능력에 관한 것입니다. 그것은 나에게 더 일관된 것 같습니다.

층과 계층의 개념은 종종 상호 교환 적으로 사용됩니다. 그러나 상당히 일반적인 관점 중 하나는 실제로 차이가 있으며, 레이어는 소프트웨어 솔루션을 구성하는 요소에 대한 논리적 구조 메커니즘이지만 계층은 시스템 인프라의 물리적 구조 메커니즘이라는 것입니다.

심판.

층은 커플 링을 최소화하는 메커니즘입니다. 그들은 논리적입니다. 계층은 성능을 극대화하거나 보안 위험을 부정하도록 설계되었습니다. 그들은 육체적입니다. 그들은 실제로 그것들이 똑같지 않으며 사람들이 왜 그들을 서로 바꿔서 사용하려고 노력하는지 잘 모르겠습니다.

대부분의 웹 응용 프로그램은 기본적으로 3 단계 (브라우저, 웹 서버, 데이터베이스 서버)입니다. 인트라넷 앱의 대부분은 2 계층 (클라이언트, DB 서버)입니다. 그러나 두 경우 모두 UI 계층, 비즈니스 계층 및 데이터 계층을 만듭니다. 그들은 우려의 분리를 가지고 있으며 유지 관리에 대한 내 코드를 구성하는 데 도움이됩니다. 또한 두 경우 모두 나는 보통 하나의 상자에 모두 배포하게됩니다. 웹 서버 또는 클라이언트 워크 스테이션. 따라서 레이어와 계층도 일치하지 않습니다.

나는 항상 계층이 아키텍처에서 물리적 분리라고 믿었습니다. 즉, 기계를 의미합니다. 나는 그것을 발견했다 이것들 사람들은 최근에 똑같이 생각합니다. 아주 좋은 책입니다.

하지만 다른 응답을 읽은 후 잘 생각합니다. Garry에 동의합니다. 저것.

Garry Shutler와 동의하지만 많은 계층이 단일 프로세스/스레드 또는 동일한 어셈블리에도 존재할 수 있다고 덧붙입니다. 물리적 (하드웨어, 실행 가능한 분리 또는 이진 분리) 분리보다 더 중요한 것은 개발자 코드 (IMHO)의 레이아웃입니다. ASPNET 앱과 마찬가지로 : 동일한 하나의 DLL은 데이터 액세스, 도메인 및 프레젠테이션의 세 계층을 모두 가질 수 있습니다.

나는 정의를 망치는 것이 필요하다고 말해야 할 것이다. 나는 일반적으로 계층을 기능성과 책임의 논리적 분리로 생각하고 계층을 물리적 분리의 요구 사항 또는 능력으로 생각합니다. 일부 층에는 여러 계층이 있고 일부 계층은 층에 걸쳐있을 수 있습니다. 나는 일반적으로 필요한 경우 물리적 분리를 제공 할 수 있고/또는 구성을 통해 원하는 서비스 계층 계층을 사용합니다.

따라서 후속 질문/의견. 데이터베이스에 저장된 절차에 많은 논리 (비즈니스 또는 기타)가있는 경우 계층으로 간주되어야합니까? Microsoft SQL Server 용 서비스 브로커와 같은 데이터베이스 엔진의 기능을 사용하는 경우 어떻게해야합니까? 그것은 두 계층 자체를 가지고있는 것으로 볼 수 있습니다.

또한 배경 서비스 및/또는 데몬은 별도의 계층 및/또는 층입니까 아니면 기존 계층에 속합니까?

컴퓨팅에서 "계층"이라는 용어의 역사를보십시오. 아무도 데스크탑/미니/메인 프레임에서 1 계층 컴퓨팅을 말하지 않았습니다. 클라이언트 서버 시절에는 아무도 2 계층 컴퓨팅을 말하지 않았습니다. 3 계층은 클라이언트-서버 플러스 미들웨어의 아키텍처 모니 커가되었습니다 (메시지 지향 미들웨어 및 트랜잭션 브로커). N -Tier는 "EAI- 또는 엔터프라이즈 아키텍처 통합"과 함께 대중화되었다고 생각합니다. 대부분의 공급 업체 구현이 독점적이거나 표준 기반이지만 매우 비싸거나 둘 다를 제외하고는 서비스 지향 아키텍처와 정확히 동일한 아이디어였습니다. XML -RPC, SOAP 및 REST가 오면 "웹 서비스"라고 부른 다음 EAI 원칙을 뒤에 적용하고 SOA -Service 지향 아키텍처 및 엔터프라이즈 서비스 버스에 올라갑니다.

내 요점은이 용어 중 어느 것도 물리적 분리를 암시하지 않았다는 것입니다. 그것은 항상 기능의 논리적 분리에 관한 것이 었습니다. 이러한 논리적 응용 층 중 다수는 수평 확장 성을 위해 물리적으로 분리 될 수 있도록 무국적으로 설계된 많은 일이 일어났습니다.

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