2009-08-19 4 views
1

나는 현재 자동차 딜러 웹 사이트에서 일하고 있으며 데이터베이스에서 'Vehicle'모델로 작업하고 있습니다. 나는 모델, 메이크업, 컬러와 같은 것들에 대한 FK 관계와 룩업 테이블의 광범위한 사용을 만들어 왔습니다 등Linq-to-Sql이있는 조회 테이블

그래서 기본 버전이 될 수있는 일 같은 : 다음 간단한 2 사용

Vehicle { 
    Id 
    MakeId 
    ModelId 
    ColourId 
    Price 
    Year 
    Odometer 
} 

ColourId 열과 ColourText 열이 Color와 같은 열 조회 테이블에 저장됩니다. 특이한 것이 없습니다.

이것은 모두 훌륭하지만, 생성 된 Linq-to-SQL 클래스가 룩업 테이블을 사용하기 시작할 때 더 복잡 해지는 것을 발견했습니다. 색상을 얻으려면 이제 Vehicle.Colour.ColourText와 같은 일을해야합니다. 새 차량을 추가하려면 값이 있는지 확인하기 위해 모든 다양한 테이블을 찾아야합니다. 그래서이 애플리케이션 코드의 나머지 부분에이 Linq-to-SQL 모델을 전달하고 싶지는 않습니다.

그래서 현재 접근 방식은이 linq 모델을 거의 동일한 개체 인 순수 도메인 모델로 변환하는 몇 가지 방법을 구현하지만 ID 필드를 실제 텍스트 값 (문자열)으로 바꿉니다. 이것은 모두 저장소에 싸여 있으므로 나머지 응용 프로그램은 데이터 액세스 객체가 아니라 직선 '도메인'객체 만 인식합니다. 응용 프로그램에서 새 레코드를 삽입해야하는 경우이 도메인 모델을 리포지토리에 다시 전달합니다.이 리포지토리는 다시 Linq-SQL 버전으로 변환되어 모든 조회 값이 실제로 유효한지 확인합니다.

괜찮은 생각인가요? 나는이 변환을 조금 더러워한다고 느낀다. 처음에는 Linq-to-SQL을 사용하는 이유 중 하나에 반대하는 것으로 보인다. 다시 말하지만, 앱의 나머지 부분에 룩업 (look-up) 등을 드러내는 객체를 돌아 다니는 것이 더욱 나 빠질 것이라고 생각합니다. 이것이 본격적인 O/RM이 더 널리 쓰이는 이유인가?

L2S보다 도메인 객체를 사용하면 AJAX와 같은 용도로 JSON 직렬화를보다 쉽게 ​​할 수 있습니다.

내가 취한 접근 방식이 합리적인지 궁금한가요? 건배.

답변

2

LINQ의 하위 수준 개체를 만든 다음 자신의 비즈니스 개체 (또는 모델보기)를 위에 작성했습니다.

실제로이 문제는 관계형 모델에서 응용 프로그램을 분리하고 Object 영역으로 완전히 가져올 수 있습니다. ViewModel이 UI에 바인딩되도록 ViewModel을 빌드하면 ViewModel이 실제로로드되어 저수준 엔티티를 통해 저 장될 때이를 명시 적으로 볼 수 있습니다.

단점은 더 많은 코딩입니다. 장점은 객체 컬렉션이 실제로 응용 프로그램 유스 케이스를보다 잘 반영한다는 것입니다. 이 길을 계속 탐험해볼 것을 권합니다. 아마도 여기에있는 모양이 도움이 될 것입니다. http://blogs.msdn.com/dphill/archive/2009/01/31/the-viewmodel-pattern.aspx

관련 문제