2011-03-25 4 views
0

저는 현재 비교적 정규화 된 SQL 데이터베이스 백엔드를 사용하는 N 계층 구조의 ASP.NET 시스템을 작성하고 있지만 조회 값을 비즈니스 객체에 표시하는 방법에 대해 고민하고 있습니다. EF 또는 ORM 사용 권한). (예를 들어) 내 테이블은 다음과 같이 구성 할 수있다 :조회 값을 ASP.NET Business Objects에 표시하려면 어떻게해야합니까?

CoreDataTable :

ID | Name | Favourite_Colour 
---|-------|----------------- 
01 | Peter | 01 
02 | John | 03 
03 | Mary | 05 

ColoursLookup : 지금 처음에, 나는 내 비즈니스 객체를 만들었다

ID | Colour | is_active 
---|--------|---------- 
01 | Red | 1 
02 | Green | 1 
03 | Blue | 1 
04 | Pink | 1 
05 | Black | 1 

보는을 이렇게 :

public class Person 
{ 
    protected int PersonID { get; set; } 
    public string Name { get; set; } 
    public int FavouriteColour { get; set; } 
} 

하지만 예를 들어 데이터베이스에있는 모든 사람들을 좋아하는 색으로 나열하려면 어떻게해야합니까?

  1. 가 호출 될 때 데이터베이스에서 색 이름을 가져옵니다 Person.GetColourStringValue라는 클래스에 메서드를 추가 : 나는 4 옵션을 볼 수있는 순간에, 그래서 난 그냥 조회 ID를 표시 할 수 없습니다. 100 개의 "Person"객체에 대해이 메서드를 사용하면 100 개의 데이터베이스 쿼리가 발생하므로 비효율적입니다.
  2. Person 개체의 FavouriteColour 속성을 문자열로 사용하고 데이터베이스에 사람 개체를 쓸 때마다 역방향 조회를 수행합니다. 즉, 색 이름을 사용하고 해당 ID를 가져옵니다. 이것은 두 가지 색상이 데이터베이스에서 같은 이름을 가질 가능성이없는 상황에서 위험한 IMO입니다.
  3. Person 개체에 ID와 값을 모두 저장하고 하나 또는 다른 값이 업데이트 될 때마다 동기화합니다. 이것은 상대적으로 사소한 작업을 위해 지나치게 복잡하게 보인다.
  4. Person 개체와 PersonSummary 개체의 읽기 전용 버전을 끌어와 모든 조회 값을 설명하는 이름으로 변환 한 두 개의 표현을 만듭니다.

저는 100 % 확신하고 있습니다. (a) 이것을 과소 평가하고 (b) 그것이 필요 이상으로 복잡하게 만듭니다. 그래서 이것을하기위한 선호되는 방법이 있습니까? 아니면 간과 한 옵션이 있습니까? 어떤 도움을 주셔서 감사합니다. 저는 지금 결정에 오지 않고 몇 시간 동안이 문제를 다루었습니다.

감사합니다.

답변

0

답변을 얻는 유일한 방법은 하나를 선택하고 (필요한 경우 프로토 타입을 통해) 영향을 측정 한 다음 다음 옵션의 영향과 비교하는 것입니다.

시스템을 모르면 옵션 1이 가장 좋을 것 같습니다. 매번 데이터베이스로 이동할 필요가 없도록 일련의 Color 개체를 캐시하는 경우입니다.

+0

글쎄, 데이터베이스가 한 번만 쿼리되므로 옵션 4가 가장 효율적이라는 것을 알고 있지만 조회 테이블에서 가장 좋은 방법이 무엇인지 궁금합니다. N-Tier에는 많은 자원이 있지만 아무도 조회 값을 설명하지 못합니다. –

+0

@ 칼 : 내 작품 모두에서 나는 (적어도 사용되는 부품들) 룩업 테이블 내용을 캐시했습니다. 아직 문제가 발생하지 않았습니다. - 네 옵션이 이상하게 들린다. 같은 물체에 대해 두 가지 다른 표현이 있다고 말씀하시는 겁니까? 완전히 별개의 컨텍스트 (보기/API 호출/등)에서 사용하지 않는 한, 나는 그것을 멀리 부끄러워 할 것입니다. –

+0

오, 오해하지 마시오. 옵션 4를 사용하고 싶지는 않지만, 기술적으로는 SQL 쿼리의 조인을 제외하고는 조회가 없으므로 기술적으로 가장 효율적이라고 말하고있었습니다. 당신의 도움을 주셔서 감사합니다! –

0

사람 테이블을 채우는 쿼리의 색상 표에 조인하는 것은 어떻습니까? person 객체에 FavouriteColor 속성이 있어야합니다. 객체는 테이블 열의 실제 표현이 아니지만 필요한 모든 정보는 db 호출에서 검색됩니다.

관련 문제