2010-02-09 3 views
8

그래서 나는 벽 순간에 맞서 머리를 가지고있다. 그리고 누군가가 벽을 없애거나, 움직이는 것에서 나의 머리를 멈추는 것을 도울 수 있기를 바란다!!ORM에 대한 큰 장점은 무엇입니까?

지난 3/4 주 동안 ORM이 새 프로젝트를 시작할 준비가되었는지 조사했습니다. ORM은 기존의 대규모 에이징 SQL 데이터베이스에 매핑해야합니다.

그래서 나는 Subsonic을 시도했다. 나는 VB에서 잘 작동하도록 modding 한 후 v2와 v3을 정말 좋아했으며 SQL에서 이름이 지정된 스키마는 OK를 실행 중이었습니다. 그러나 별도의 엔티티 속성 이름과 열 이름을 갖는 유연성이 부족하여 내 머리카락을 꺼내 ​​버렸습니다 (미안한 롭).

엔티티 프레임 워크를 사용해 보았지만 특정 영역이 부족한 다른 엔티티를 발견했습니다.

그래서 총알을 비트하고 nHibernate를 시도했지만 1 주일 정도 지난 후 (코드 메쏘의 도움으로 (나를위한 클래스/hbms 생성) 도움을 받았다.) 시작하는 데 걸리는 시간에 좌절감을 느낀다. config 객체)를 사용하여이 시간을 줄이기 위해 많은 수법을 시도했습니다.

나는 기본적으로 앱과 웹 사이트간에 공유 할 수있는 DAL 클래스를 만든 후입니다. 내가 틀린 나무를 짖고 있니? 100s 테이블이있는 레거시 프로젝트의 경우 ado.net으로 돌아가서 DTO를 사용해야합니까? 아아!

질문의 성격 스타일을 유감으로 생각합니다. 나는 머리카락이 많이 남아 있지 않고 가지고있는 것을 지키고 싶습니다 !!

미리 감사드립니다, Ed

PS. 나는 SQL을 아주 잘 알고 있으며, 빠른 쿼리를 작성하기 위해 손이 더러워지는 것을 두려워하지 않는다고 덧붙여 야합니다. SQL에서 숨길 필요가없는 경우

+2

당신이 그래서 NHibernate에 시작 시간이 문제가되는 응용 프로그램의 어떤 종류가 있습니까? IMO, 중간 계층 서비스가 아닌 데스크톱에서 DB에 직접 액세스하는 경우에만 방해가됩니다. –

+0

@Dmitry : 당신이 맞습니다 +1 –

+1

"NHibernate 응용 프로그램의 시작 시간을 어떻게 높이나요?"라고 묻는 것만으로도이 호언 장담을 아주 간단하게 할 수 있습니다. –

답변

8

ORM의하자 당신 :

  1. 객체 지향 프로그래밍하여 실행 가능한 부분에있는 개체에 테이블 행을지도합니다.
  2. 가 자동으로 조인을 생각하지 않는
  3. 이 하나가에 따라 달라집니다 (보다 직관적 인 방법으로 데이터베이스를 조회하려면
  4. 쉽게 추가하려면 객체 관계를 탐색, 편집 및 테이블 행을 제거하려면 ORM 및 쿼리 방법)
  5. L1 및 L2 캐시를 투명하게 처리합니다.

위의 모든 것은 ORM을 사용하지 않았다면 직접 처리해야합니다.

추신 : 나는 NHibernate의 시작 시간에 관해서 Dmitry에 동의한다. 게다가 Fluent NHibernate을 시도 했습니까? 유창한 NHibernate는 인상적으로 쉽습니다. 내가 처음 데이터베이스를 매핑 할 때 나는 내 눈을 믿을 수가 없었다. DevExpress XPO와 같은 독점적 인 ORM보다 훨씬 쉽습니다.

+1

+1을 사용하지 않는 좋은 ORM 비트가 있습니다. 현재 프로젝트에서 사용하고 있으며 실제로 "매우 쉽습니다". –

1

제 경험상 대부분의 ORM은 결국 SQL보다 더 복잡합니다. 그 (것)들을 사용하는의 전체 목적을 격파하는.

저는 LINQ2SQL에 대해 열정적 인 한 가지 해결책이 있습니다. 저장 프로 시저 또는 뷰에 대한 얇은 계층으로 뛰어납니다. 정말 사용하기 쉽고 SQL을 숨기려하지 않습니다.

+0

나는 복잡성의 문제에 공감할 수있다. 대부분의 ORM 도구는 구성하기가 아주 복잡합니다. 나는 그것들이 복잡성을 정당화하기 위해 상당히 복잡한 범위의 문제를 해결하고 그것들을 사용할 때 얻게되는 가치가 그것들을 사용하는 방법을 배우는 페널티보다 중요하다고 주장 할 것이다. –

+0

Andomar : 일반적으로 ORM은 SQL이 아닌 객체를 노출합니다. 그것이 바로 요점입니다. 왜 관계형 테이블을 객체에 매핑하지 않으면 ORM을 사용하고 있습니까? 어쩌면 ADO.NET이 귀하의 요구에 더 적합 할 수도 있습니다. –

+0

Andomar : @ PLINQO를 보았습니까? 같은 데이터베이스와 Codesmith를 매핑하여 에러가 적고 실행 시간이 훨씬 빨라졌습니다. – CResults

2

ORM 도구의 가장 큰 장점은 응용 프로그램을 올바르게 레이어하는 데 도움이된다는 것입니다. 오늘날 대부분의 프로젝트는 데이터 레이어를 사용하여 데이터베이스에 연결합니다.ORM 도구에서 시작하여 데이터베이스 개체에 해당하는 클래스를 생성합니다. 그런 다음이 메소드를 사용하여 인터페이스를 정의합니다. 모든 퍼시스턴스 코드는이 인터페이스의 메소드를 사용합니다. 이 방식으로 비즈니스 로직 계층은이 상위 계층 인터페이스에만 연결되고 데이터베이스에 대해 알 필요가 없습니다. 사실 ADO.NET이나 심지어 Hibernate에 의존해서는 안됩니다.

ORM 도구의 또 다른 장점은 응용 프로그램을 데이터베이스 서버와 연결 해제하는 것입니다. db 엔진을 변경하고 동일한 코드를 계속 사용할 수 있습니다. 또한 ORM이 숨기는 SQL의 복잡성 뿐만이 아닙니다. 또한 트랜잭션 논리 및 연결 풀링에 도움이 될 수 있습니다.

새 프로젝트의 경우 ORM 도구가 필요하다고 말하고 싶습니다. 레거시 프로젝트의 경우, 처음부터 시작할 시간/돈을 가지고 있지 않다면 그렇게 많은 도움이되지 않습니다.

+0

+1 디커플링에 중점을 둡니다. 이것만으로 ORM 도구를 강력히지지하고 저장소 패턴을 활용하는 이유입니다. –

+3

ORM 도구는 디커플링에 도움이되지 않습니다. 프리젠 테이션 로직은 여전히 ​​ORM 메커니즘을 통해 ADO.NET 또는 SQL을 사용하여 데이터베이스와 통신 할 수 있습니다. LinqToSql은 비즈니스 계층이되기를 희망하며 실제로 비즈니스와 데이터 로직을 분리하는 것이 까다로울 수 있습니다. 대부분의 경우 ORM은 매우 기본적인 CRUD가 아닌 SQL을 숨길 수 없으며 쿼리의 이름/ID 유형별로 조회합니다. ORM은 레거시 프로젝트에 유용 할 수 있으며 새로운 프로젝트에 항상 의미있는 것은 아닙니다. –

+0

ORM 도구는 디커플링에 도움이됩니다. 필자가 작성한 것처럼 이것은 ORM 라이브러리에 대한 종속성을 숨길 인터페이스 메서드를 정의해야하므로 필요한 작업은 아닙니다. 이러한 메소드는 ORM 도구로 작성되고 데이터베이스에 매핑되는 '고객'또는 '주문'과 같은 클래스를 사용할 수 있습니다. – kgiannakakis

1

여기에는 기본적으로 두 가지 질문이 있습니다.

ORM에는 어떤 점이 좋나요? Stackoverflow에 관한 비슷한 질문이 있습니다. 참조 :

가 어떻게 NHibernate에 시작 시간을 향상시킬 수 있습니까? 참조 :

관련 문제