어디에해야한 데이터 집합에 거주하는 n-층(다층)포함되어 있을 수 있습니다

StackOverflow https://stackoverflow.com/questions/837697

문제

우리는 현재 havin 토론하는 경우 데이터 집합해야에서 이동하는 데이터 또는 비즈니스 층?

내 친구가 생각하는 모든 ADO.NET 구성 요소를 이동해야에서 데이터 레이어입니다.나를 위해 이것을 보이지 않는 바에 따라와 이유:

  • 을 만드는 경우 지방 데이터 레이어는 클라이언트,그것은 훨씬 더 어려울 것을 예를 들어를 마이그레이션 모든 것을 서로 다른 데이터 소스입니다.
  • 당신이 바 컨트롤하지 않는 한 당신은 건너뛰 비즈니스 계층 논리입니다.

나는 생각한 데이터 집합 및 datatables 해야에서는 비즈니스 로직 이후 그들은 일반하는 모든 데이터가 공급자입니다.데이터 레이어가 있어야에 공급자 공장의 인스턴스 오른 공급자의체(연결 방법을 자세히 설명합니다,거래,DataReaders,etc.).나를 위해 이 방법은 가 다음과 같은 장점이 있습니다.

  • 마이그레이션을 다른 데이터 레이어로 그것을 가져옵니다.
  • 바인딩할 수 있습니다 당신의 컨트롤하는 풍부한 비즈니스 개

수있는 n-tier 전문가의 도움을 우리가 분명히 밖으로 어떤 방법으로 가야 하는가?사전에 감사합니다

도움이 되었습니까?

해결책

내가있는 곳은 데이터 계층에서 비즈니스 계층으로 데이터 세트, 데이터 타이블, Datarows 및 DataReaders를 반환합니다.

이론적 근거는 이러한 유형이 DB- 맛이 아닌 것입니다. MySQL, Access, SQL Server, Oracle 또는 데이터 세트가 데이터 세트이므로 루트 레벨 데이터 계층에서 돌아 오는 것이 좋습니다.

그런 다음 비즈니스 계층은이 원시 데이터를 가져 와서 프레젠테이션 계층에 적용하기 위해 필요한 비즈니스 규칙을 적용하는 강력한 비즈니스 개체로 전환합니다.


편집하다: 일부 코드를 살펴보면 전체 데이터 세트를 많이 사용하지 않습니다. 대부분 데이터 타이블 및 데이터 레더입니다.

다른 팁

제 생각에는 데이터 세트를 전혀 사용하지 마십시오. 입력 된 데이터 세트조차 사용하지 마십시오. 이들은 LINQ 전에 생성 된 오래된 구성입니다. 고대 역사를 바로 건너 뛰고 현재 시제로 들어가십시오 : LINQ를 사용하여 엔티티와 엔티티 프레임 워크 (EF). 둘은 밀접하게 관련되어 있지만 동일하지는 않습니다.

서비스 경계에 EF 엔티티를 노출시키지 마십시오. 불행히도 Microsoft는 엔티티를 직렬화 할 때 구현 세부 정보를 노출하기로 결정했습니다. 그 외에는 EF를 사용하고 데이터 세트보다 훨씬 더 재미있게 보내십시오.

잘 분리,데이터에 액세스하지 않은 새로운 기능:우리는 그것은 15 년 전에(예,15 년 전에!).

나는 일에 많은 장소와 나는 많이 보았 절연 데이터 레이어입니다.

하지만 내가 결코--이제까지!--볼 수 있는 데이터 소스로 대체되고!

그렇다,나는 그것을 보았을 두:고,두 번 우리는 또한 대체 oudated 데이터 레이어와 모든 toping 소프트웨어...

나의 답변하는 것은 매우 간단하다:지 않는 한 당신은 작동에 대한 보류하는 소프트웨어를 파악할 수 있는만큼 당신이 원하는 데이터 레이어,당신은 당신을 위해 그것을 할 것입니다 아무것도 아니다.

때문에 아무것도 아무도 변경 또는 SQL Server Oracle 위해 변화하고 있다.과 아무것도날 때문에 누군가가 그것을 할 것입니다,그들은 둘 중 하나 또 다시는 그들의 소프트웨어 또는 그들은 임하는 제품들이 구매하는 호환되는 제품에 그들은 lefting.

나의 책에서,모든 데이터의 층이 아니다.

에 동의하지 않는 경우,그것으로만 말할 때 저에게 당신의 생활에 이 계층을 저장$$$사람에...

일반적인 접근 방식은 비즈니스 로직 계층/도메인에 집계 루트 (예 : 고객과 같은) 리포지토리 인터페이스를 노출시키고 데이터 액세스 계층/인프라에서 콘크리트 저장소를 구현하는 것입니다.

데이터 세트와 관련된 기본 문제는 해당 구조가 데이터베이스 스키마의 정확한 미러라는 것입니다.

데이터 세트를 실제 페이지 렌더링 코드에 노출시키는 경우 데이터베이스 스키마 (제품의 궁극적 백엔드)를 프레젠테이션 계층에 효과적으로 노출시키는 것입니다. 이제 명백한 문제가 발생할 수 있습니다. 나중에 트랙 아래로 기본 데이터 스키마를 재구성하고 싶을 것입니다. 디자인으로 인해 시스템의 다른 모든 레이어에 변경 사항을 적용해야합니다. 실제로 캡슐화가 사용되지 않는 대표적인 예입니다.

데이터 세트를 전혀 사용하려면 데이터 세트를 데이터 액세스 계층에 바로 묻어두고 개념적 비즈니스 객체 세트를 프레젠테이션 계층에 노출하십시오. 당신이 노출시키는 일련의 비즈니스 객체는 우수한 대상 지향 교장에 따라 설계되어야하며, 이는 좋은 관계형 데이터베이스 디자인 원칙과는 완전히 다릅니다.

데이터 세트를 사용하지 않는 것에 대해 동의해야합니다. 내가 작업 한 응용 프로그램 중 하나는 데이터 계층과 애플리케이션 계층 모두에 데이터 세트가있었습니다. DatalAyer 데이터 세트는 응용 프로그램 계층 데이터 세트가 정보를 정상화하여 프론트 엔드에 더 소비 할 수 있도록 데이터베이스와 일치했습니다.

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