2010-01-25 1 views
0

나는 여기에 흥미로운 토론을 발견DataSets에서 벗어나고 싶은데 왜 대안이 있습니까?

http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&gid=43315&discussionID=12708606&goback=.anh_43315

인용구 :

데이터 집합은 데이터 계층을 코딩하는 하위 파 아마추어 솔루션입니다 ... 그들을 사용을 중지하고 CODE 배울! :)

DataSets에 대한 사용자 정의 클래스의 스텁 및 그 작업에 대한 귀하의 의견은 어떻습니까? 다른 대안은 무엇입니까?

+0

제공하신 토론 링크는 공개되지 않습니다. –

+0

다른 메모에서 언제 ORM 토론을 통해 진행할 수 있습니까? 아무리 재미있는 OO RDBMS 임피던스 불일치 문제를 찾지 못했습니다. –

+0

Hehe, 절대로 없습니다. OOP를 코딩 할 수있는 사람들과 플러그 앤 플레이 루트를 가질 수없는 사람들이 있기 때문입니다. 그리고 둘 사이의 차이를 모르는 관리자. – PositiveGuy

답변

2

큰 단점 중 하나는 데이터 세트가 메모리 내 데이터 구조라는 점입니다. 즉, 소비되는 메모리의 양이 반환하는 레코드의 양 (즉, O (n) 공간 복잡성)에 선형이라는 것을 의미합니다. 서버 측 애플 리케이션에서 이것은 확장 성을 없앨 것이다.

사용자 정의 클래스 T를 정의한 경우 데이터 액세스 레이어에서 IEnumerable <T>를 반환하면 O (1) 복잡성으로 데이터 소스 (예 : Linq에서 SQL IQueryable 공급자)로 데이터를 효율적으로 스트리밍 할 수 있습니다.

참고 : 데이터 액세스 계층에서도 List < T> 또는 컬렉션 < T>를 반환하는 경우에도 동일한 문제가 발생합니다. 이러한 문제는 메모리 내부 구조이기도합니다. 많은 사람들이 확장성에 대한 고려없이 우아함의 이름으로이 작업을 수행하는 것을 보았습니다.

4

OR/매퍼를 사용하는 데에는 여러 가지 이유가 있습니다.

은 주로 :

  • 그것은 컴파일 시간 안전 유형을 당신의 테이블에 대해 생성
  • 일반적으로는
  • 데이터 액세스를 Trivialises 적절한 비즈니스 로직과 프리젠 테이션 기능을 추가 할 수 있습니다 계층화 된 영역이 (저장
  • FK 관련 개체를로드하기위한 /로드, 깊은 절약 등)
  • 쉬운/더 나은 과정 (
,369) 프레임 워크에 따라

나는 계속할 수있다.

OR/Mapper를 신중하게 검토해 보는 것이 좋습니다. 개인적으로, 나는 LLBLGen Pro와 사실상 사랑에 빠졌지 만 (돈이 든다). 다른 사람들은 다른 사람들과 마찬가지로, 나는 그들 자신을 조금 미친 듯이 생각합니다. 당신이 정말 OR/매퍼에서 원하는 것은 :

  • 유연성
  • 속도
  • 계층 세대
  • 프레임 워크에서
  • 지원 (등 CF, 해당 경우) 등을 검토

당신 자신의 것, 그리고 결단을하십시오.

+0

그래, 특히 DataSet은 어떨까요? – PositiveGuy

+0

coffeeaddict : 모든 것을 리버스 : 강하게 입력하지 않고, 프레임 워크가 아니며, 속성을 붙잡기 위해 부착 가능한 비즈니스 로직으로 거의 자신의 계층에 앉아 있지 않습니다. –

7

Snobbery를 제외하고 DataSet은 상대적으로 간단한 비즈니스 논리가있는 응용 프로그램과 개발자가 데이터베이스 스키마를 제어 할 수 있으므로 데이터 테이블이 1 : 1 비즈니스 개체 (이 경우 일반적으로 DataRow).

마틴 파울러 (Martin Fowler)는 엔터프라이즈 애플리케이션 아키텍처 (Patterns of Enterprise Application Architecture) (Amazon link)에서이를 매우 자세히 설명합니다. DataSets (Table Module은 Fowler의 명명법)는 Transaction Script과 잘 일치하지만 Domain Model은 데이터베이스에 대한 잘 정의 된 클래스와 매퍼를 필요로합니다 (비즈니스 개체와 테이블 간의 1 : 1 상관 관계는 일반적으로이 상황에서 달성 할 수 없기 때문에).

DataSets/Table Module에는 많은 제한이 있지만 특히 .NET에서 작업하는 경우 단순함이 장점입니다.

실용적인 프로그래머는 특정 애플리케이션의 요구 사항을 평가하고 가장 섹시하지 않은 패턴과 기술을 가장 잘 적용 할 수 있습니다.관계형 데이터에 대한 1 : 1 직접 매핑을 사용하는 단순한 시나리오의 경우 DataSet은 빠지지 않습니다. 하지만, 종종 그렇게하며, 프로그래머가 독점적으로 의존하는 프로그래머라면 더 복잡한 시나리오에서 문제가 될 수 있습니다.