ORM 평가를보고 있습니다.
내가 사용했습니다 음속 , Linq에 - 투 - SQL 과 엔티티 프레임 워크를 . 주니어부터 시니어에 이르는 개발자 팀이 있습니다.
ORM for.NET을 평가하기위한 기준은 무엇입니까?
ORM 평가를보고 있습니다.
내가 사용했습니다 음속 , Linq에 - 투 - SQL 과 엔티티 프레임 워크를 . 주니어부터 시니어에 이르는 개발자 팀이 있습니다.
ORM for.NET을 평가하기위한 기준은 무엇입니까?
답변:
로드 된 질문입니다.
다른 철학을 가진 주제에 접근하는 매우 훌륭한 ORM이 많이 있습니다.
어느 것도 완벽하지 못하며 황금빛 길에서 벗어나 자마자 복잡해 지기도합니다.
ORM을 선택할 때 스스로에게 물어봐야 할 것 :
당신을 위해 무엇을해야합니까?
응용 프로그램에 대한 요구 사항이 이미있는 경우, 가상의 '최고'보다는 이들과 더 일치하는 ORM을 선택해야합니다.
데이터가 공유되었거나 로컬입니까?
ORM의 많은 털이는 여러 사용자가 동일한 데이터 버전을 보유 할 때 동시성 및 데이터베이스의 데이터 변경을 처리하는 방법으로 인해 발생합니다.
데이터 스토어가 단일 사용자 용인 경우 대부분의 ORM이 제대로 작동합니다. 그러나 다중 사용자 시나리오에서는 잠금이 어떻게 처리됩니까? 객체를 삭제하면 어떻게됩니까? 다른 관련 개체에 어떤 영향을 줍니까? ORM이 백엔드의 금속 근처에서 작동합니까 아니면 많은 데이터를 캐싱하고 있습니까 (부실 위험을 증가시키면서 성능 향상).
ORM은 귀하의 응용 분야에 적합합니까? 특정 ORM이 서비스에서 사용되거나 웹 앱 내부에있는 경우 작업하기 어려울 수 있습니다 (많은 성능 오버 헤드, 코딩하기 어려움). 반대로 데스크톱 앱에는 좋을 수 있습니다.
데이터베이스 별 향상 기능을 포기해야합니까?
ORM은 다양한 데이터베이스 백엔드와 함께 작동하도록 최저 공통 분모의 SQL 집합을 사용하는 경향이 있습니다.
모든 ORM은 사용 가능한 기능을 손상 시키지만 (단일 백엔드를 대상으로하지 않는 한) 추가 동작을 구현하여 선택한 백엔드에서 사용 가능한 특정 향상 기능을 활용할 수 있습니다.
일반적인 DB 별 기능 향상은 전체 텍스트 검색 기능입니다. ORM이 필요한 경우 이러한 기능에 액세스 할 수있는 방법을 제공해야합니다.
ORM은 데이터 모델의 변경 사항을 어떻게 관리합니까?
일부는 특정 측정 값 내에서 DB를 자동으로 업데이트 할 수 있으며, 다른 작업은 수행하지 않으므로 더러운 작업을 직접 수행해야합니다. 다른 데이터베이스 업데이트를 제어 할 수있는 변경 처리 프레임 워크를 제공합니다.
응용 프로그램을 ORM의 오브젝트에 연결 하시겠습니까? 아니면 POCO를 처리하고 지속성을 위해 어댑터를 사용 하시겠습니까?
전자는 일반적으로 처리가 간단하지만 어디에서나 ORM 관련 데이터 객체에 대한 종속성을 생성하며 후자는 약간 더 많은 코드 비용으로 더 유연합니다.
객체를 원격으로 전송해야합니까?
원격 서버에서 오브젝트를 페치 할 때 모든 ORM이 동일하지는 않습니다. 수행 할 수있는 작업과 불가능한 작업을 자세히 살펴보십시오. 일부는 효율적이고 다른 것은 효율적이지 않습니다.
도움을 청할 수있는 사람이 있습니까?
좋은 상업적 지원이 있습니까? 프로젝트 주변의 커뮤니티는 얼마나 크고 활발합니까?
기존 사용자가 제품과 관련된 문제는 무엇입니까?
그들은 빠른 해결책을 얻습니까?
내가 본 몇 가지 ORM :
물론 많은 다른 것들이 있습니다.
원시 속도가 프로젝트에서 가장 중요한 요소는 아니며 웹 사이트 제작자가 DataObject.Net이라는 사실을 알아야하지만 성능 벤치 마크를 나열 하는 논란이 많은 사이트 ORM Battle 을 살펴볼 수 있습니다 .
NHibernate를 사용 하고 있으며 꽤 좋습니다.
필자의 경우 MS Sql 데이터베이스에 연결되었지만 다른 데이터베이스에 연결할 수 있습니다.
시작하고 실행하는 데 시간이 오래 걸리지 않습니다. 객체를 모델에 매핑하기 만하면됩니다. XML 파일을 사용하지만 코드에서 유창하게 수행 할 수 있습니다. 훌륭한 커뮤니티가 있으며 개인적으로 Ayende의 작업이 매우 유용하다는 것을 알았습니다. SQL 프로파일 링 도구 인 NHProf를 사용합니다.
나는 대부분의 즉시 사용 가능한 함수-직선 객체 매핑을 사용하지만 Hibernate Query Language도 사용합니다.
슬프게도, 마지막 세 직장에서, 우리는 집에서 만든 세 개의 ORM을 가졌습니다. 각각의 경우에 그들은 대부분 다양한 이유로 빨려 들었습니다.
나는 최근에 Entity Framework 4 와 POCO 지원 (좋은 연습이 여기에 있음 )을 평가 해 왔으며 그것이 얼마나 멋지게 내 얼굴에 머무르는 지에 정말 감명을 받았으며 데이터를 흘리는 것이 아니라 다시 프로그래밍하는 것처럼 느낍니다.
[면책 조항 : DevExpress에서 일합니다]
DevExpress 애플리케이션 프레임 워크로 작성된 일반적인 애플리케이션의 스크린 샷은 여기에서 볼 수 있습니다 . 이 페이지에는 제품에 대한 간단한 검토도 포함되어 있습니다. 이유 에 대한 자세한 내용은 웹 사이트에서 해당 제품 페이지를 확인하십시오.
DevExpress의 XAF 및 XPO에 관해서는, 여기에 우리의 응용 프로그램 프레임 워크를 선택하는 이유에 대한 좋은 설명입니다. 또한 지원 및 문서를 제공하는데, 이는 중요하고 언급 할 가치가 있습니다. 궁금한 사항이 있으면 언제든지 문의하십시오.
소규모 프로젝트에서 Linq-to-Sql과 함께 NHibernate + Fluent NHibernate를 사용합니다. 그 이유는 다음과 같습니다.
1) (주된 이유 아님) NHibernate는 개발자들 사이에서 "존중"요소가 더 높은 것 같습니다 (이것이 사실입니까?)
2) linq-to-SQL과 비교하여 nHibernate는 Db 객체와 일대일로 매핑되지 않는 엔티티 간의 ORM 매핑을 허용합니다.
3) 우리는 nHibernate를 Entity Framework 4.0과 광범위하게 비교하지 않았지만 여기에 좋은 비교가 있습니다 : http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx
nHibernate는 다소 가파른 학습 곡선을 가지고 있으며 XML 맵은 매우 장황 할 수 있지만 Fluent Nhibernate 사이트 문서부터 시작하여 거꾸로 작업하십시오.
"최고의"ORM 프레임 워크는 서로 다른 강점과 약점의 조합을 가지고 있기 때문에 개발자가 한 영역을 더 잘 만드는 데 집중하기로 선택하는 경우 비교에 어려움이있는 다른 영역이있는 경우가 많습니다 (코드 우선 대 먼저 모델 대 데이터베이스 우선).
반면에, 아주 좋은 것들이 많이 있습니다. 그중 일부는 다른 것들보다 당신의 개인적인 상황 과 철학에 더 잘 맞을 것입니다.
편집 : 그 가치에 대해, 나는 현재 Linq를 SQL에 사용하고 있습니다. 주로 부분적으로는 최소한의 노력으로 많은 일을 할 수 있기 때문에 Entity Framework로 다시 진행할 것입니다 (아마도 거기에 있기 때문에). 옳은 EF4와 잘못된 것). 특히 후자에 대한 우려는 성능에 관한 것이지만 대부분의 경우 큰 문제는 아니며 모델 (L2S 및 EF)에서 동적 데이터 및 OData를 실행하는 기능은 " 싸구려 "승리.
DevExpress XPO를 살펴 보는 것이 좋습니다 . 이것은 DevExpress XAF 와 함께 학습 곡선 을 넘기면 모든 개발자의 삶을 쉽게 만듭니다.
NHibernate (+ FluentNHibernate)가 기본 옵션입니다. 매우 유연하고 확장 가능하며 강력합니다. 엄청난 양의 사용자가 있으며 매우 적극적으로 유지 관리됩니다. 단점은 가파른 학습 곡선입니다.
MindScape의 LightSpeed 는 간단하고 사용자 친화적이지만 여전히 유연하고 능력이 있습니다. L2S / EF와 같은 디자이너 화면과 UnitOfWork 구현이 있습니다.
글쎄, "최상의"선택은 없지만, 나는 기존의 Linq to SQL이 당신의 요구를 충족 시킨다고 말할 것입니다. "진정한"ORM 자체는 아니지만 매우 가볍고 코드를 인식하지 않고도 코드를 작성할 수있는 유연성을 제공합니다. 내 말은 dbml
파일이 아닌 Linq를 실제로 알 필요없이 정상적으로 코드를 계속 작성할 수 있다는 것입니다 . 리포지토리 또는 게이트웨이 패턴을 사용하여 여전히 추상화를 작성할 수 있으며 L2S는 ORM의 주된 역할을 수행하며 이는 객체-관계 불일치 문제를 해결하는 것입니다.
Entity Framework는 약간 무겁지만, 기본 Linq보다 Sql보다 "얼굴에"약간의 차이 만 있지만 EF는 Linq보다 실제 ORM에 훨씬 가깝습니다. ORM에서 찾고있는 모든 기준을 살펴 보겠습니다. 원시 SQL을 작성하지 않아도되거나, 수백 개의 저장 프로 시저가 필요하지 않기 때문입니까? 원시 Linq to Sql이 제공 할 수없는 추가 기능이 필요합니까? 이러한 질문에 대답해야하지만 간단한 요구 사항 ( "가볍고 사용하기 쉬운")을 기반으로 Linq가 Subsonic보다 약간 쉽고 Visual Studio에 내장되어 있다고 생각합니다.