ORM for.NET을 평가하기위한 기준은 무엇입니까? [닫은]


30

ORM 평가를보고 있습니다.

내가 사용했습니다 음속 , Linq에 - 투 - SQL엔티티 프레임 워크를 . 주니어부터 시니어에 이르는 개발자 팀이 있습니다.

ORM for.NET을 평가하기위한 기준은 무엇입니까?


8
최고는 없습니다. 장단점이있는 옵션이 많이 있습니다. 각각은 테이블과 다른 것을 가져옵니다.
Tony

용어에 대한 하나 개의 경합 : 나는 음속 가장 확실히 말을 하지 ORM. .. 관계형 대물 노출 기의 더 많은 것. 데이터베이스 테이블 스키마를 직접 반영하는 클래스 만 생성 할 수 있습니다. 대부분 잘 작동하지만이 디자인 포인트는 EF & NHib와는 매우 다른 경기장에 있기 때문에 매우 중요합니다.
quentin-starin

1
@qstarin : SubSonic을 LINQ-to-SQL만큼 ORM으로 만듭니다.
John Saunders

John과 qstarin은 아주 좋은 지적입니다. 관계형 대물 노출 자로 분류 할 수 있습니다. SubSonic 3.0은 ORM 개념과 일치하는 기능을 제공합니다. 위키가 말합니다. "객체 지향 프로그래밍 언어에서 호환되지 않는 유형 시스템간에 데이터를 변환합니다. 이는 사실상 프로그래밍 언어 내에서 사용될 수있는"가상 객체 데이터베이스 "를 만듭니다." 또한 ormbattle.net에서 SubSonic은 ORM으로 간주됩니다. 귀하의 의견에 감사드립니다
Nickz

2
Linq-to-SQL은 ORM보다 영광스러운 SQL 생성기와 비슷합니다.
fretje

답변:


43

로드 된 질문입니다.
다른 철학을 가진 주제에 접근하는 매우 훌륭한 ORM이 많이 있습니다.
어느 것도 완벽하지 못하며 황금빛 길에서 벗어나 자마자 복잡해 지기도합니다.

ORM을 선택할 때 스스로에게 물어봐야 할 것 :

  1. 당신을 위해 무엇을해야합니까?
    응용 프로그램에 대한 요구 사항이 이미있는 경우, 가상의 '최고'보다는 이들과 더 일치하는 ORM을 선택해야합니다.

  2. 데이터가 공유되었거나 로컬입니까?
    ORM의 많은 털이는 여러 사용자가 동일한 데이터 버전을 보유 할 때 동시성 및 데이터베이스의 데이터 변경을 처리하는 방법으로 인해 발생합니다.
    데이터 스토어가 단일 사용자 용인 경우 대부분의 ORM이 제대로 작동합니다. 그러나 다중 사용자 시나리오에서는 잠금이 어떻게 처리됩니까? 객체를 삭제하면 어떻게됩니까? 다른 관련 개체에 어떤 영향을 줍니까? ORM이 백엔드의 금속 근처에서 작동합니까 아니면 많은 데이터를 캐싱하고 있습니까 (부실 위험을 증가시키면서 성능 향상).

  3. ORM은 귀하의 응용 분야에 적합합니까? 특정 ORM이 서비스에서 사용되거나 웹 앱 내부에있는 경우 작업하기 어려울 수 있습니다 (많은 성능 오버 헤드, 코딩하기 어려움). 반대로 데스크톱 앱에는 좋을 수 있습니다.

  4. 데이터베이스 별 향상 기능을 포기해야합니까?
    ORM은 다양한 데이터베이스 백엔드와 함께 작동하도록 최저 공통 분모의 SQL 집합을 사용하는 경향이 있습니다.
    모든 ORM은 사용 가능한 기능을 손상 시키지만 (단일 백엔드를 대상으로하지 않는 한) 추가 동작을 구현하여 선택한 백엔드에서 사용 가능한 특정 향상 기능을 활용할 수 있습니다.
    일반적인 DB 별 기능 향상은 전체 텍스트 검색 기능입니다. ORM이 필요한 경우 이러한 기능에 액세스 할 수있는 방법을 제공해야합니다.

  5. ORM은 데이터 모델의 변경 사항을 어떻게 관리합니까?
    일부는 특정 측정 값 내에서 DB를 자동으로 업데이트 할 수 있으며, 다른 작업은 수행하지 않으므로 더러운 작업을 직접 수행해야합니다. 다른 데이터베이스 업데이트를 제어 할 수있는 변경 처리 프레임 워크를 제공합니다.

  6. 응용 프로그램을 ORM의 오브젝트에 연결 하시겠습니까? 아니면 POCO를 처리하고 지속성을 위해 어댑터를 사용 하시겠습니까?
    전자는 일반적으로 처리가 간단하지만 어디에서나 ORM 관련 데이터 객체에 대한 종속성을 생성하며 후자는 약간 더 많은 코드 비용으로 더 유연합니다.

  7. 객체를 원격으로 전송해야합니까?
    원격 서버에서 오브젝트를 페치 할 때 모든 ORM이 동일하지는 않습니다. 수행 할 수있는 작업과 불가능한 작업을 자세히 살펴보십시오. 일부는 효율적이고 다른 것은 효율적이지 않습니다.

  8. 도움을 청할 수있는 사람이 있습니까?
    좋은 상업적 지원이 있습니까? 프로젝트 주변의 커뮤니티는 얼마나 크고 활발합니까?
    기존 사용자가 제품과 관련된 문제는 무엇입니까?
    그들은 빠른 해결책을 얻습니까?

내가 본 몇 가지 ORM :

  • XPO
    developer Express : 작고 단순하며 코드 중심입니다. 애플리케이션 프레임 워크 eXpressApp에이 를 사용합니다 .
  • NHibernate
    는 자유롭지 만 학습 곡선은 다소 가파르다. 많은 장점이 있지만 조각난 모든 문서에서 실제로 관련성이 높은 것을 찾기가 어렵습니다.
  • LLBLGen Pro는
    매우 단순하면서도 많은 프로젝트가 진행된 매우 성숙한 프로젝트입니다.
  • 엔터티 프레임 워크
    GEtting. 마지막 릴리스는 꽤 훌륭하고 MS는 듣고 있지만 다른 성숙한 ORM에 비해 여전히 젊습니다.
  • DataObject.Net
    유망 해 보이지만 IMHO의 중요한 프로젝트를 위험에 빠뜨리기에는 약간 새로운 편입니다. 그래도 꽤 활동적입니다.

물론 많은 다른 것들이 있습니다.

원시 속도가 프로젝트에서 가장 중요한 요소는 아니며 웹 사이트 제작자가 DataObject.Net이라는 사실을 알아야하지만 성능 벤치 마크를 나열 하는 논란이 많은 사이트 ORM Battle 을 살펴볼 수 있습니다 .


3
그것을 알고, 당신은 무엇을 선택 했습니까?
Steven Evers

Renaud Bompuis에게 감사합니다. 나열된 ORM에 대해 들어 보지 못했습니다. 제공해 주신 정보는 생각하기에 좋은 음식입니다.
Nickz

1
@ SnOrfus : 여전히 XPO를 사용하고 있지만 LLBLGen으로 마이그레이션하려고합니다. 견고하고 성숙하며 통제력을 유지하므로 (필요한 경우 원할 때 손이 더러워 질 수 있습니다) 우려와 더 적절한 분리가 가능합니다. 객체 재사용 (어댑터를 통한).
Renaud Bompuis

3
Entity Framework가 현재 버전 4.1이며 확실히 볼 가치가 있음을 주목할 가치가 있습니다.
Sean Kearon

나는 서버에서 Stored Procs를, 클라이언트에서 LINQ를 좋아합니다. 이것을 투표로 투표하십시오! 학습 곡선, 놀라움, 버전 관리, 놀라움이 없습니다!
NoChance

14

NHibernate를 사용 하고 있으며 꽤 좋습니다.

필자의 경우 MS Sql 데이터베이스에 연결되었지만 다른 데이터베이스에 연결할 수 있습니다.

시작하고 실행하는 데 시간이 오래 걸리지 않습니다. 객체를 모델에 매핑하기 만하면됩니다. XML 파일을 사용하지만 코드에서 유창하게 수행 할 수 있습니다. 훌륭한 커뮤니티가 있으며 개인적으로 Ayende의 작업이 매우 유용하다는 것을 알았습니다. SQL 프로파일 링 도구 인 NHProf를 사용합니다.

나는 대부분의 즉시 사용 가능한 함수-직선 객체 매핑을 사용하지만 Hibernate Query Language도 사용합니다.


더 복잡한 모델에는 NHibernate가 까다로울 수 있습니다. 모두 잘 문서화되어 있고 매우 이해가되지만 잘 모르면 문제가 발생할 수 있습니다. 즉, 학습 곡선은 높지만 우수합니다.
Matt Olenik

Sam 덕분에, nhibernate를 사용하지는 않았지만 SubSonic, Linq-to-SQL 및 Entity Framework에 비해 광범위한 구성이 필요한 것으로 보입니다. 이것은 내 개발 팀에 이상적이지 않습니다.
Nickz

관심이 있으시면 Ayende는 11 월 / 12 월에 열리는 YOW Australia 컨퍼런스 ( yowconference.com.au/melbourne/events_tracks/…) 에서 NHibernate 워크샵을 진행하고 있습니다. 내가 함께 일하는 사람 중 한 명이 한동안 그것을 사용했기 때문에 그를 배우는 이점이있었습니다.
Sam J

3
@Nick 대부분의 구성을 자동화 할 수 있습니다. 또한 유창한 추가 기능을 확인합니다.
stonemetal

@Nick, @stonemetal은 Fluent NHibernate가 일을 훨씬 쉽게 만들어 준다고 동의했다. SubSonic만큼 빠르지는 않지만 여전히 볼만한 가치가 있습니다.
Matt Olenik

6

슬프게도, 마지막 세 직장에서, 우리는 집에서 만든 세 개의 ORM을 가졌습니다. 각각의 경우에 그들은 대부분 다양한 이유로 빨려 들었습니다.

나는 최근에 Entity Framework 4 와 POCO 지원 (좋은 연습이 여기에 있음 )을 평가 해 왔으며 그것이 얼마나 멋지게 내 얼굴에 머무르는 지에 정말 감명을 받았으며 데이터를 흘리는 것이 아니라 다시 프로그래밍하는 것처럼 느낍니다.


나는 집에서 재배 한 ORM과 비슷한 위치에 있었던 이전의 직업을 들었다. 의견 주셔서 감사합니다.
Nickz

3
집에서 만든 ORM은 항상 짜증납니다. 가장 좋은 것은 항상 crappiest public ORM보다 나쁩니다.
Jaco Pretorius

@JacoPretorius 그것에 대한 반례가 있지만 ... "일반적으로"...
pst


3

Linq가 Sql을 많이 좋아합니다. 간단하고 괜찮은 디자이너가 있습니다. 그러나 엔터티 프레임 워크에 찬성하여 수명을 끝내기를 바랍니다. 생성기를 수정하는 기능을 활용하여 사용자 정의 객체를 가질 수 있기를 원합니다.

이것들이 다른 사람들보다 (내 의견으로는) 가장 큰 이점은 VS와 함께 제공된다는 것입니다. 이것은 또한 MS의 자비에 있다는 점에서 부정적인 것입니다 (Sinq to Sql 참조).


3

[면책 조항 : DevExpress에서 일합니다]

DevExpress 애플리케이션 프레임 워크로 작성된 일반적인 애플리케이션의 스크린 샷은 여기에서 볼 수 있습니다 . 이 페이지에는 제품에 대한 간단한 검토도 포함되어 있습니다. 이유 에 대한 자세한 내용은 웹 사이트에서 해당 제품 페이지를 확인하십시오.

DevExpress의 XAF 및 XPO에 관해서는, 여기에 우리의 응용 프로그램 프레임 워크를 선택하는 이유에 대한 좋은 설명입니다. 또한 지원 및 문서를 제공하는데, 이는 중요하고 언급 할 가치가 있습니다. 궁금한 사항이 있으면 언제든지 문의하십시오.


나는 아직도 XPO를 사용하고 있으며 다가오는 업데이트에 기쁘다.
Renaud Bompuis 2016 년

2

소규모 프로젝트에서 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 사이트 문서부터 시작하여 거꾸로 작업하십시오.


1

"최고의"ORM 프레임 워크는 서로 다른 강점과 약점의 조합을 가지고 있기 때문에 개발자가 한 영역을 더 잘 만드는 데 집중하기로 선택하는 경우 비교에 어려움이있는 다른 영역이있는 경우가 많습니다 (코드 우선 대 먼저 모델 대 데이터베이스 우선).

반면에, 아주 좋은 것들이 많이 있습니다. 그중 일부는 다른 것들보다 당신의 개인적인 상황 과 철학에 더 잘 맞을 것입니다.


편집 : 그 가치에 대해, 나는 현재 Linq를 SQL에 사용하고 있습니다. 주로 부분적으로는 최소한의 노력으로 많은 일을 할 수 있기 때문에 Entity Framework로 다시 진행할 것입니다 (아마도 거기에 있기 때문에). 옳은 EF4와 잘못된 것). 특히 후자에 대한 우려는 성능에 관한 것이지만 대부분의 경우 큰 문제는 아니며 모델 (L2S 및 EF)에서 동적 데이터 및 OData를 실행하는 기능은 " 싸구려 "승리.


의견을 보내 주셔서 감사합니다. Murph. "최상의"ORM에 동의합니다. 그러나 나는 더 많은 표준화를 제정하려고합니다. ORM 중 하나를 사용하면 팀의 새 개발자 및 기존 개발자에게 도움이됩니다. 현재 subsonic, ADO.net, linq-to-sql 등 모든 것을 사용하는 것이 프로젝트와 유지 보수 사이를 이동하는 것이 점점 어려워지고 있습니다.
Nickz

귀하의 사용 사례에 가장 적합한 ORM을 검색하는 데 아무런 문제가 없으며 여기에 대한 질문을하는 것이 바람직하다는 데 전적으로 동의합니다. 나는 단지 stackexchange 질문에 "BEST"라는 단어를 사용하는 것에 대한 무의미한 캠페인을 벌이고 있습니다 (-:
Murph

1

DevExpress XPO를 살펴 보는 것이 좋습니다 . 이것은 DevExpress XAF 와 함께 학습 곡선 을 넘기면 모든 개발자의 삶을 쉽게 만듭니다.


XAF는 ORM 인 XPO를 기반으로합니다. XAF 자체는 이것에 기반을두고 로직과 "자동"UI 등을 추가합니다.
Sascha

DevExpress XAF가 개발자의 삶을 편하게 해줄 것이라고 생각하는 이유를 설명하십시오.

@Sascha, 힌트 주셔서 감사합니다. 내 게시물을 수정했습니다.
Yogi Yang 007

XPO와 함께 @Mark, XAF는 UI 생성기뿐만 아니라 ORM으로도 작동하므로 개발자는 최소한의 코딩으로 .NET에서 완전한 기능의 앱을 쉽게 구축 할 수 있습니다.
Yogi Yang 007

제 측면에서 XAF에 대한 한 가지 의견 : 중간 규모의 복잡한 비즈니스 로직 환경을위한 훌륭한 시스템으로, 요인에 대한 개발 시간을 단축시킵니다. 단점은 주어진 경계에서 다시 확장하는 데 시간이 많이 걸린다는 것입니다. 예를 들어 계층 적 사용자 (팀과 같은 논리와 함께) 및 '사용자는 자신 및 / 또는 그의 하위 항목 만 볼 수 있습니다'는 지원되지 않습니다. 따라서 XAF에는 장단점이 있습니다 .IMHO가 프로젝트에 적합한 지 실제로 평가해야합니다. 그러나 그것이 적합하다면 확실히 잘 된 기초입니다.
Sascha

1

우리는 Entity Framework와 함께 행운을 빕니다. 우리의 상황은 다소 드문 일이지만 우리는보고 팀을 위해 데이터를 수집하므로 실제로 데이터베이스를 설계합니다. 우리는 DB를 얻은 다음 EF를 사용하여 데이터 액세스 클래스를 생성합니다. 우리에게는 훌륭하게 작동하지만 대량의 데이터로드 만 수행하므로 더 트랜잭션 환경에서 얼마나 잘 수행되는지 보증 할 수 없습니다.


2
예, 나는 EF 4의 팬입니다. 이전 버전보다 훨씬 낫습니다.
Nickz

1

NHibernate (+ FluentNHibernate)가 기본 옵션입니다. 매우 유연하고 확장 가능하며 강력합니다. 엄청난 양의 사용자가 있으며 매우 적극적으로 유지 관리됩니다. 단점은 가파른 학습 곡선입니다.

MindScape의 LightSpeed 는 간단하고 사용자 친화적이지만 여전히 유연하고 능력이 있습니다. L2S / EF와 같은 디자이너 화면과 UnitOfWork 구현이 있습니다.


MindScape의 LightSpeed는 정말 흥미로워 보입니다.
Nickz

1

글쎄, "최상의"선택은 없지만, 나는 기존의 Linq to SQL이 당신의 요구를 충족 시킨다고 말할 것입니다. "진정한"ORM 자체는 아니지만 매우 가볍고 코드를 인식하지 않고도 코드를 작성할 수있는 유연성을 제공합니다. 내 말은 dbml파일이 아닌 Linq를 실제로 알 필요없이 정상적으로 코드를 계속 작성할 수 있다는 것입니다 . 리포지토리 또는 게이트웨이 패턴을 사용하여 여전히 추상화를 작성할 수 있으며 L2S는 ORM의 주된 역할을 수행하며 이는 객체-관계 불일치 문제를 해결하는 것입니다.

Entity Framework는 약간 무겁지만, 기본 Linq보다 Sql보다 "얼굴에"약간의 차이 만 있지만 EF는 Linq보다 실제 ORM에 훨씬 가깝습니다. ORM에서 찾고있는 모든 기준을 살펴 보겠습니다. 원시 SQL을 작성하지 않아도되거나, 수백 개의 저장 프로 시저가 필요하지 않기 때문입니까? 원시 Linq to Sql이 제공 할 수없는 추가 기능이 필요합니까? 이러한 질문에 대답해야하지만 간단한 요구 사항 ( "가볍고 사용하기 쉬운")을 기반으로 Linq가 Subsonic보다 약간 쉽고 Visual Studio에 내장되어 있다고 생각합니다.


0

ECO :) 상태 머신과 실행 가능한 OCL (즉, EAL) 지원을 포함하는 것은 ORM 이상입니다. 12 개의 도메인 클래스 제한이있는 무료 버전이 있으며 소규모 프로젝트에는 깔끔해야합니다.


4
이유를 설명하면 도움이 될 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.