2

MVC3 NHibernate/ActiveRecord 프로젝트가 있습니다. 프로젝트는 정상적으로 진행되고 있습니다. 모델 오브젝트 (주로 3 개 또는 4 개의 클래스가 하나 인 거대한 계층 구조)에서 약간의 용도가 있습니다.ActiveRecord와 NHibernate를 디칭 - 어떻게 재구성 할 것인가?

내 응용 프로그램은 분석을 기반으로합니다. 나는 계층 적 데이터를 저장하고, 나중에 그것을 잘라내어 그래프로 표시한다. 그래서 실제 관계는 복잡하지 않다.

지금까지 ORM에서 많은 혜택을 얻지 못했습니다. (ActiveRecord)를 쉽게 쿼리 할 수 ​​있지만 전체 개체보다 정보가 더 자주 필요하지 않으며 복잡한 SQL 문을 반복적으로 선택해야합니다. 원시 SQL은 훨씬 빠르고 깨끗합니다.

그래서이 경우 ORM을 버리고 원시 SQL로 돌아가는 것에 대해 생각하고 있습니다. 하지만 내 솔루션을 재구성하는 방법을 잘 모르겠습니다. 데이터베이스 계층을 어떻게 처리해야합니까?

  • 개체를 쿼리하는 정적 메서드가있는 모델 당 하나의 클래스가 있어야합니까? 또는 DB를 나타내는 클래스를 하나만 사용해야합니까?
  • 기존 코드를 유지하기 위해 ActiveRecord (또는 내 자신의 ActiveRecord와 유사한 구현)에서 자체 레이어를 작성해야합니까?
  • 내 모델 클래스에 ORM 방법 (예 : 저장/삭제)을 결합해야합니까?
  • 테이블 구조 (모든 필드가있는 클래스 당 하나의 테이블)를 변경해야합니까?

조언을 제공해 주시면 감사하겠습니다. 나는 최고의 아키텍처와 디자인을 찾아 내려고 노력하고있다.

답변

3

내 자신을 비롯한 많은 사람들이 ActiveRecord 패턴이 주로 SRP를 깨고 POCO 개체 (특정 ORM에 도메인을 단단히 연결)를 허용하지 않기 때문에 ActiveRecord 패턴이 안티 패턴이라고 생각합니다.

간단한 CRUD에 대한 ORM을 이길 수는 없으므로 이러한 종류의 작업에 대해 몇 가지 종류의 ORM을 유지할 것입니다. 다른 프로젝트의 ORM 구현과 함께 POCO 객체 및 일부 종류 또는 저장소 패턴을 사용하도록 애플리케이션을 다시 설계하십시오.

는 "하드"쿼리에 관해서는, 나는 당신의 자신의 원시 SQL로 개체를 쿼리, 작은 ORM을 (같은 Dapper, PetaPoco, 또는 Massive)를 사용하여보기 당 하나 개의 클래스를 만드는 것이 좋습니다 것입니다.

+0

+1 괜찮은 답변입니다. 내 생각 엔 당신이 맞다; ORM에서 완전히 벗어날 수는 없습니다. 좋은 링크를 가져 주셔서 감사합니다. Dapper 대 PetaPoco를 추천 해 주시겠습니까? 그들 모두는 매우 유사하게 보이고 나는 그들 중 어느 것도 사용하지 못했습니다. – ashes999

+0

내가 Dapper를 (조금) 경험했기 때문에 나는 정말 다른 것을 추천 할 수는 없다. 나는 Dapper가 위대하다는 것을 알았고, stackoverflow에서 좋은 사람들에 의해 만들어졌습니다. 그래서 나는 그것을 뉘앙스로 줄 것입니다. – Charlino

+0

좋아요, 제가 할게요. 귀하의 답변에 감사드립니다. – ashes999

관련 문제