2008-08-14 10 views
9

새로운 응용 프로그램에서 데이터 계층을 구현하는 가장 좋은 방법에 대해 동료와 "토론"중입니다.데이터 영역 모범 사례

하나의 관점은 데이터 계층이 비즈니스 개체 (엔터티를 나타내는 자체 클래스)를 인식하고 해당 개체와 기본적으로 작업 할 수 있어야한다는 것입니다.

대향 관점은 데이터 영역은 객체에 독립적이어야하고, 순수 단순 데이터 유형 (등 문자열 bools, 날짜 등)를 처리해야한다는 것이다

I는 두 방법이 유효하지만, 수 있음을 알 수 내 내가 선호하는 것은 자신의 견해입니다. 그렇게하면 데이터 저장 매체가 변경되면 비즈니스 계층이 새로운 데이터 계층을 수용하기 위해 반드시 변경되어야 할 필요는 없습니다. 따라서 SQL 데이터 저장소에서 직렬화 된 XML 파일 시스템 저장소로 변경하는 것이 중요합니다.

내 동료의 관점은 데이터 계층이 개체 정의에 대해 알 필요가 없으며 데이터가 적절하게 전달되는 한 그만이면 충분하다는 것입니다.

이제 저는 이것이 종교 전쟁을 시작할 가능성이있는 질문 중 하나라는 것을 알고 있습니다.하지만 당신이 어떻게 그런 식으로 접근하는지에 대한 커뮤니티의 의견에 감사드립니다. TIA

답변

5

정말 전 세계에 대한 당신의 견해에 달렸습니다. 저는 이전에 커플이없는 캠프에있었습니다. DAL은 이야기의 끝 부분에 데이터를 제공하기 위해 존재했습니다.

Linq to SQL 및 Entity Framework와 같은 신흥 기술이 조금 더 대중화되면서 DAL과 BAL 간의 경계가 약간 흐려졌습니다. 특히 개체 모델은 데이터베이스 필드에 1-1 매핑이 있으므로 L2S에서 DAL은 비즈니스 개체와 매우 밀접하게 연결됩니다.

소프트웨어 개발과 마찬가지로 옳고 그른 대답도 없습니다. 요구 사항과 향후 요구 사항을 이해하고 거기에서 작업해야합니다. 나는 더 이상 Dakhar 집회에서 페라리를 사용하지 않을 것이다.

+0

전적으로 동의합니다. 데이터 액세스 레이어 등의 디자인은 꽤 흐릿 해지고 있습니다. 반면에 항상 프리젠 테이션 레이어와 비즈니스 로직을 분리하는 방법을 선택했습니다. MVC 패턴 FTW ;-) –

1

이 주제를 다루고 내가 가진 훌륭한 책,

은 클리프톤 장전에 의해, Data Access Patterns입니다. 지속성 계층에서 비즈니스 계층을 분리하는 방법에 대한 많은 좋은 설명과 좋은 아이디어가 있습니다. 당신은 정말로 그것을 시도해야합니다. 내가 좋아하는 책 중 하나입니다.

0

내 트릭 중 하나는 내 데이터 계층을 "수집 불가"로 만드는 것입니다. 즉, 데이터 레이어에서 개체 목록을 반환 할 때마다 호출자가 목록에 전달됩니다. 그래서 대신의 :

public IList<Foo> GetFoosById(int id) { ... } 

나는이 수행

public void GetFoosById(IList<Foo> foos, int id) { ... } 

이 그 같은 내가 필요한 모든, 또는 IList의 <T> (보다 지능 구현하는 경우 나 일반 오래된 목록에 건네 줄 수가 있습니다을 ObservableCollection <T>) UI에서 바인딩하려는 경우. 이 기법을 사용하면 오류 메시지가 발생한 경우 ValidationResult와 같은 메서드에서 내용을 반환 할 수 있습니다.

이것은 여전히 ​​내 데이터 레이어가 내 개체 정의를 알고 있음을 의미하지만 유연성이 한 가지 더 뛰어납니다.

0

Linq to SQL을 확인하십시오. 지금 새 애플리케이션을 작성하는 중이라면 완전히 Linq 기반 데이터 레이어를 사용하는 것이 좋습니다.

그 외에도 가능한 한 데이터와 로직의 연결을 끊는 것이 좋습니다.하지만 항상 실용적인 것은 아닙니다. 로직과 데이터 액세스를 완전히 분리하면 조인과 최적화가 어려워 지므로 Linq가 그렇게 강력합니다.

3

둘 다 가질 수 있습니다. 데이터 계층이 비즈니스 객체를 알지 못하게하고 둘 이상의 데이터 소스 유형을 처리 할 수있게하십시오. 데이터와 상호 작용하기위한 공통 인터페이스 (또는 추상 클래스)를 제공하는 경우 각 데이터 소스 유형에 대해 서로 다른 구현을 가질 수 있습니다. 공장 패턴이 잘 돌아갑니다.

1

제프리 팔레 모는 이에 대해 좋은 게시물을 작성했습니다. 그는 그것을 Onion Architecture이라고 불렀습니다.

0

우리가 NHibernate를 사용하는 응용 프로그램에서는 XML 매핑 정의 (어떤 테이블이 어떤 개체에 속하며 어느 열이 어떤 필드에 속하는 지 등)가 분명히있는 반면에 그 대답은 "중간 어딘가"가됩니다. 비즈니스 객체 계층.

비즈니스 오브젝트를 인식하지 못하는 일반 데이터 세션 관리자로 전달됩니다. 유일한 요구 사항은 CRUD를 위해 전달 된 비즈니스 오브젝트에 맵핑 파일이 있어야한다는 것입니다.

0

이전 게시물이지만 비슷한 정보를 찾으면서 나는 그걸 잘 설명하는 this을 발견했습니다.