2009-09-24 4 views
2

저는 CSharp 클래스를 데이터베이스 테이블에 매핑하는 단계에 있습니다. 다른 도구와 비교 한 후에 ORM 도구로 NHibernate를 사용하기로 결정했습니다. 나는 NHibernate로 실제 프로젝트를 한 번도 해본 적이 없으며 매핑의 대안을 고려 중이다.NHibernate 또는 FluentNHibernate 또는 ActiveRecord?

ActiveRecord : ActiveRecord를 사용하면 ActiveRecord를 사용하여 생산성을 크게 높일 수있다. 그러나 나는 CSHARP 클래스에 속성을 추가하는 아이디어를 좋아하지 않는다. 결국, 수업에는 데이터베이스 관계에 대한 지식이 없어야합니다. ActiveRecord를 사용하면 내 분리 된 클래스를 ActiveRecord에 바인딩 할 것이고 나중에 언더 라인 DAO 레이어 구현을 전환하고 싶다면 힘든 시간을 갖게 될 것입니다.

FluentNHibernate : 매핑을 시작할 때 FluentNhibernate가 내 첫 시도였습니다. 그러나이 접근 방식에는 몇 가지 문제가 있습니다. 1) 매핑 전략이 바이너리 파일로 컴파일 된 것을 좋아하지 않습니다. xml 파일을 수정하여 매핑을 변경하고 싶습니다. 2) FluentNHibernate의 완성도. NHibernate는 오랫동안 사용되어 왔고 사용자가 아주 많기 때문에 성숙함에 대해 상당히 편안합니다. 대조적으로 FluentNhibernate는 비교적 젊으며 많은 사용자가 테스트하지 않았습니다. 어떤 문제가 생겨도 문제를 해결할 수있는 근원지로 잠수 할 수는 있지만 저수준 구현을 다룰 수있는 기술이 마음에 들지 않습니다. 3) FluentNHibernate에 대한 문서의 가용성은 NHibernate의 것보다 훨씬 큽니다. 나는 단단한 벽에 부딪 칠 때 갈 곳을 갖고 싶다.

NHibernate : 현재 Naked Nhibernate xml을 사용하여 매핑을 수행하고 있습니다. 솔직히 XML을 사용하면 큰 골치 거리가 있습니다. 사실, .hbm.xml 파일을 버리고 ActiveRecord 또는 FluentNHibernate를 하루에 여러 번 가져 오는 충동에서 벗어나야합니다.

여기 내 딜레마가 있습니다. "이 지저분한 일을 끝내자!" 또는, 지금 고통스러워하고 나중에 비교적 쉬운 시간을 갖기 위해 "Good practice guideline"을 따라야합니까?

의견이 있으십니까?

답변

4

ORM과 관련된 모든 클래스를 "비즈니스 객체"클래스로 취급하거나 UI에 표시 할 필요는 없습니다. 데이터 영역은 데이터 영역의 일부로 간주되어야합니다. 이 패턴은 ActiveRecord에만 국한된 것이 아닙니다. 일반적으로 비즈니스 계층에 ORM이 있다는 사실에 대해 가능한 한 적게 알고 싶으면 UI에 데이터 계층에 대해 알리고 싶지는 않을 것입니다. DTOs도 고려하고 싶습니다.

Fluent NHibernate는 리팩터링에 오류가 발생할 수있는 약한 타입의 XML 문제를 해결합니다.

ActiveRecord와 같은 것을 채택 할 경우 단점이있을 수 있지만 귀하의 경우에는 적절한 해결책으로 보입니다.

.hbm.xml 파일을 사용하는 가장 좋은 이유는 (CodeSmith과 같은 것을 사용하여) 데이터베이스에서 코드를 생성하는 것이 가장 좋습니다. .hbm.xml 파일을 손으로 코딩하는 것은 거의 최선의 선택이 아닙니다.

+0

답장을 보내 주셔서 감사합니다. 나는 지금 ActiveRecord로 갈 것이다. –

관련 문제