2009-10-07 2 views
2

새로운 C# 프로젝트의 데이터를 모델링하기 시작했습니다.이 프로젝트는 지속성이 있어야합니다.OO 데이터 모델 - Object Relational Mapper 제약 조건을 무시할 수 있습니까?

가장 자연스러운 OO 모델처럼 보입니다. 닷넷 제네릭이 많이 있습니다. 개체 목록 및 이러한 개체에는 다른 일반 형식의 목록 등이 포함되며 세 단계 이상 중첩 된 식으로 배열됩니다.

이상적으로는 OO 방식으로 데이터 모델을 설계하고 Object Relational Mapping 도구가 지속성을 처리하도록하고 싶습니다. OO 디자인은 관계형 디자인보다 훨씬 쉽습니다.

그러나 ORM에 대한 나의 초기 연구는 그들이 반드시 이러한 방식으로 작동하지 않는다는 것을 나타냅니다. 임의로 복잡한 객체 모델을 만들 수 있는지 여부는 아직 명확하지 않으며 ORM이이를 "자동으로"유지할 것으로 기대합니다. (나는 어제 그 질문을했다).

ORM이 처리 할 수있는 구조로 OO 데이터 모델을 제한해야 할 수도 있습니다. 특히 ORM을 아직 결정하지 않은 경우에는 큰 한계가 있습니다.

프로젝트 디자인을 계속 진행시키고 싶습니다. 지금 ORM을 연구하는 데 어려움을 겪고 싶지는 않습니다.

내 본능은 내가 자연스럽게 보이는 방식으로 C#에서 할 수있는 것을 중심으로 내 개체 모델을 디자인하는 것입니다. 이렇게하면 응용 프로그램에 실제로 필요한 것이 무엇인지 더 잘 이해할 수 있습니다. 필요한 경우 ORM 제한을 기반으로 디자인을 다시 고려할 수 있기를 바랍니다.

이것은 좋은 접근 방법입니까, 아니면 상처의 세계에 자신을 맞추고 있습니까? 알려진 ORM 조건을 다루는 것이 더 좋습니까? 그리고 그러한 제약 조건을 중심으로 객체 모델을 "벙어리 다운"합니까?

편집 : Stefan Steinegger는 NHibernate가 OO 코드에 부과 한 대부분의 제한 사항을 나열했습니다. 다른 사람이 다른 ORMs - Subsonic에 대해 비슷한 목록을 제공 할 수 있습니까?

+0

이것이 어제의 질문에 대한 링크라고 생각합니다. http://stackoverflow.com/questions/1527805/orms-that-work-with-complex-net-generic-objects-eg-nested-list-etc –

+1

다른 ORM에 대해 많이 알지는 못하지만, NHibernate와 관련하여이 문제에 대한 지속적인 토론이 있습니다 : http://stackoverflow.com/questions/1514278/is-it-possible-to-use-nhibernate-without-altering -a-ddd-model-of-part-of-af/1514425 # 1514425 –

+0

@Jeff - 위대한 링크입니다. 나는 모든 대답을지지했습니다! –

답변

2

모델을 관계형 데이터베이스에 매핑하는 것이 얼마나 쉬운 지 결정하려면 여전히 사용될 ORM에 따라 크게 달라집니다.

나는 NHibernate에 약간의 경험이있다. 그것은 지금까지 보았던 가장 유연하고 방해가되지 않는 ORM입니다 (비록 내가 그 중 많은 것을 보지 못했지만).그래서 NHibernate에 대해 이야기 할 수 있습니다. 사용하지 않을지라도, 여러분이 기대해야 할 것에 대한 인상을 줄 것입니다.

클래스 모델을 거의 자유롭게 디자인합니다. 한계는 구현 세부 사항에 더 있습니다

  • 당신은
  • 컬렉션 유형 IList<T>, ICollection<T>, IDictionary<K, V>, 배열, 몇 가지 다른 인터페이스 또는 제네릭이 아닌이어야합니다 (개인이 될 수 있음) 기본 생성자가 필요합니다 대응.
  • 게으른로드를 가능하게하려면 모든 것이 가상이어야합니다.
  • 모든 엔티티 (비 값 형)은

당신은 조심해야한다 (옵션,하지만 매우 권장) 데이터베이스 기본 키 재산과 낙관적 잠금에 대한 데이터베이스 버전 속성을 필요 (옵션,하지만 매우 권장) 다형성 인 값 유형 클래스 (자체 ID가없고 "값"으로 처리됨)를 가질 때. 이를 가능하게하기 위해서는 반드시 엔티티 (정체성이 필요함)가되어야합니다.

NHibernate에서 클래스 모델과 관련된 다른 제한 사항을 기억할 수 없습니다.

+0

@Stefan - 여분의 거리로 가서 내가 처음에 요청해야했던 정보를 제공해 주신 것에 대해 감사드립니다. 내 질문을 수정하려고합니다 ... –

1

나는 다른 ORM에 대해 너무 많이 알지는 못했지만 NHibernate로 확실히 그렇게해야한다. 그것은 정확히 다음과 같이 사용하기위한 것입니다. 먼저 DDD 방식으로 도메인을 디자인하고 나중에 데이터베이스 및 지속성 관련 사항에 신경을 씁니다. NH를 도입 할 때 약간의 (사소한) 리팩터링이 필요할 수도 있지만, 적절하게 설계된 도메인 모델을 갖고 있다면 분명히 고통스럽지는 않을 것입니다.

1

실제 질문은 어떻게 OO 응용 프로그램을 개발할 수 있으며 ORM 또는 ORM에 관계없이 관계형 저장소에 데이터 (개체)를 유지할 수 있다는 것입니다. 임피던스 불일치로 인해 실제 볼륨에 도달 할 때까지 객체 모델을 엄격하게 고려하는 접근 방식으로는 괜찮습니다. OO가 아닌 관계형 모델을 생각하지 않고 관계형 데이터베이스 기반 시스템을 개발하는 것은 여전히 ​​불가능합니다.

또한 개체 모델에서 "작동 불능 상태"로 유지되어야하는 클래스는 지속성을 유지해야하는 클래스입니다. 다른 모든 것은 복잡하고 정교해질 수 있습니다.

관련 문제