문제

얼마 전에 우리는 내부적으로 약 25-30 개의 다른 클래스/유형/모델을 보유한 새로운 프로젝트를 개발하기 시작했습니다.

당시 우리는 기본적으로 기본적으로 기본적으로 객체 모델을 가져 와서 몇 가지 지속성 관련 방법 (-Call)을 추가하는 것이기 때문에 기본적으로 기본적으로 기본적으로갔습니다. 그러나 시간이 지남에 따라 우리는 점점 더 많은 경고, 실제로 나쁘고 고정 가능 (합리적인 기간 내에) 한계에 부딪쳐서 느린 해결 방법을 구현하여 평범한 성능 및 확장 성 문제를 초래하고 라이센스 비용이 거의 증가했습니다. 우리를위한 우리를위한 5의 요인은 우리를위한 변화가 없었다 (그들은 Big Inc.에 의해 구매되었다).

따라서 우리는 현재 확장 성/성능 및 유지 보수 측면에서 장기 솔루션을 찾기 시작했습니다. 우리는 다른 "진짜"oodbms'es를 살펴 보았고 항상 우리를 위해 주요 브레이커를 가로 질러 왔기 때문에 우리는 조금 더 많이 보이기 시작했고 기본적으로 Orms에 대해 생각하고 있습니다. SQL과 함께

기본적으로 내 질문은 다음과 같습니다. 누구나 Microsoft의 엔티티 프레임 워크 또는 가능한 한 유지 가능한 것으로 유지하고 밀접하게/무겁게 관련된 엔티티에서 잘 수행하는 다른 .NET ORM에 대한 실제 경험이 있습니까? 우리가 저장하는 데이터의 양은 어떠한 종류에서도 놀랍거나 광범위하지 않습니다 (우리는 향후 3 년 내에 모든 엔티티에서 총 100k 인스턴스가 예상됩니다).

ORM에 대한 아이디어/제안이 있습니까?

도움이 되었습니까?

해결책

기존 객체 모델이 있고 ORM 솔루션으로 마이그레이션하려면 Nhibernate가 확실히 좋은 선택이라고 말할 것입니다. 이유는 다음과 같습니다.

  1. 지속성을 지원하기 위해 도메인 모델 클래스에 추가 / 변경 / 변경 사항을 만들 필요가 없습니다. Nhibernate는 도메인 모델에서 지속성 무지를 지원하는 데 먼 길을 간다. 그러나 예를 들어 더 많은 메소드 / 속성을 가상으로 표시하는 것과 같은 사소한 변경이 필요하다는 것을 알 수있다.
  2. 기존 객체 모델을 매핑 한 후 데이터베이스의 스키마를 생성 할 수 있습니다. 이것은 도메인 구동 (또는 객체 모델) 개발을위한 큰 시간 절약입니다. 이 기능은 FluentConfiguration.exposeConfiguration () 메소드를 통해 유창한 nhibernate를 사용하거나 표준 nhibernate 매핑 파일을 사용한 HBM2DDL 도구를 통해 지원됩니다. 물론 유지 관리 가능성에 도움이됩니다. 객체 모델 변경은 데이터베이스 스키마에 빠르게 반영 될 수 있습니다.
  3. 매핑에 유창한 nhibernate를 사용하면 자동 완성 및 단순화 된 매핑 모델을 얻을 때 초기 매핑을 매우 빠르게 만들 수 있습니다. 이것은 또한 당신이 찾고있는 유지 관리 가능성을 제공하는 데 도움이 될 것입니다. 매핑은 유창한 nhibernate를 사용하여 코드로 선언되므로 리팩토링 도구가 그에 따라 매핑을 변경합니다. 또한 유창한 nhibernate 오토핑을 사용할 수 있고 대부분의 객체 모델을 수동으로 매핑하지 않을 수도 있습니다.

이를 위해 엔티티 프레임 워크를 사용하는 것이 더 어려울 것입니다. 엔티티 프레임 워크는 여러 측면에서 유능한 ORM이지만, Nhibernate만큼 성숙하지는 않으며이 경우에 특히 최선의 선택이 아니라고 생각하는 이유가 몇 가지 있습니다.

  1. 엔티티 프레임 워크를 지원하려면 기존 객체 모델을 많이 변경해야합니다. 엔티티 프레임 워크에 현재 제공된 도구를 사용하려면 EntityObject Entity Framework Base 클래스에서 상속되는 부분 클래스로 코드를 마이그레이션해야 할 것입니다. 이 상속 요건은 기존 객체 모델에 따라 귀하에게 문제가 될 수도 있고 아닐 수도 있습니다. 지원함으로써 이것을 피할 수 있습니다 일부 인터페이스 코드에서는 사소한 일이 아니며 매핑 관리를위한 많은 내장 툴링 지원을 잃을 것이라고 생각합니다.
  2. 데이터베이스 스키마를 수동으로 수동으로 만들어야합니다. 좋은 크기의 객체 모델을 사용하면 일반적으로 중요하지 않은 작업이 아닙니다.
  3. 엔티티 프레임 워크는 상자 밖으로 투명한 게으른 하중을 지원하지 않습니다. 투명한 게으른 하중은 당신이 oodbms에 익숙한 것이라고 확신하며, 그것은 대부분의 다른 ORM (물론 nhibernate 포함)에서 지원되지만 엔티티 프레임 워크를 사용하면 명시 적으로 .load () 관련 객체가 필요하다는 것을 알 수 있습니다. (부모와 자녀 관계 모두) 코드에서 참조하기 전에. 이것에 대한 해결 방법이 있습니다 (예 : 이 하나), 그러나 그것은 내장 기능이 아닙니다.

전반적으로, 객체 우선 개발 또는 기존 객체 모델을 활용하려고하는 곳에서는 Nhibernate가 더 나은 선택입니다. 데이터 중심 개발의 경우 엔티티 프레임 워크 (또는 LINQ에서 SQL 또는 Subsonic)가보다 실행 가능한 선택이됩니다.

다음과 같은 상업용 ORM 제품을 평가할 수도 있습니다. 빛의 속도 -이 특정 도구에 대한 경험이 거의 없습니다 (고객은 일반적으로 무료 대안이있을 때 ORM 비용을 지불하는 데 반대합니다).

다른 팁

나는 ODBMSES에 대한 경험이 없지만 Nhibernate + MS SQL Server에 대한 나의 경험은 일대일, 다중 및 다수의 관계를 시행하고 계단식 변화에 대해 매우 긍정적이었습니다.

어떤 OODBMS 도구를 사용하고 있습니까? oodbms-> rdbms 마이그레이션 도구가 존재할 수도 있지만, 나는 알지 못합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top