문제

데이터베이스에 액세스하기위한 최상의 전략을 결정하려고합니다. 나는 이것이 일반적인 질문이라는 것을 이해하고 단 하나의 좋은 대답은 없지만, 내가 찾고있는 것에 대한 지침을 제공 할 것입니다. 지난 몇 년 동안 우리는 우리 자신의 지속성 프레임 워크를 사용해 왔지만 제한적이지만 제한적 이었지만도 제공되었습니다. 그러나 몇 가지 큰 개선이 필요하며, 그런 식으로 가거나 기존 프레임 워크 중 하나를 사용해야하는지 궁금합니다. 중요성의 순서대로 내가 찾고있는 기준은 다음과 같습니다.

  1. 클라이언트 코드는 깨끗한 객체, 너비가 데이터베이스 지식이없는 상태에서 작동해야합니다. 사용자 정의 프레임 워크를 사용할 때 클라이언트 코드는 다음과 같습니다.

    SessionManager Session = New SessionManager (); 주문 순서 = session.createentity (); order.date = datetime.now; // 기타 속성 설정 orderDetail detail = order.addorderDetail (); 세부 사항 .product = 제품; // 다른 속성

    // 모든 변경 사항에 따라 지금 세션 ();

  2. 가능한 한 간단하고 "너무 유연하지 않아야합니다". 우리는 대부분의 일을 할 수있는 한 가지 방법이 필요합니다.

  3. 객체 지향 프로그래밍을 잘 지원해야합니다. 일대일 및 다수의 관계를 처리하고 상속을 처리하고 게으른 적재에 대한 지원을 받아야합니다.
  4. 구성은 XML 기반으로 선호됩니다.

내 현재 지식으로 다음 옵션을 봅니다.

  1. 현재의 프레임 워크 향상 - 문제는 많은 노력이 필요하다는 것입니다.
  2. Ado.net Entity 프레임 워크 - 이해가 좋지 않지만 너무 복잡해 보이고 검토가 좋지 않습니다.
  3. LINQ에서 SQL- 객체 지향 관행을 잘 처리하지 못합니다.
  4. nhibernate- 좋은 옵션 인 것 같지만 일부 사용자는 너무 많은 고풍 오류를보고합니다.
  5. subsonic- 짧은 소개에서 너무 유연 해 보입니다. 나는 그것을 원하지 않는다.

무엇을 제안 하시겠습니까?

편집하다:

정교한 답변에 감사드립니다. 맞춤형 프레임 워크에 대한 자세한 내용을 제공하면 더 도움이 될 것이라고 생각합니다. 나는 비슷한 것을 찾고 있습니다. 이것이 우리의 커스텀 프레임 워크가 작동하는 방식입니다.

  1. 데이터 세트를 기반으로하므로 가장 먼저 수행하는 작업은 데이터 세트를 구성하고 필요한 쿼리를 작성하는 것입니다.
  2. 데이터 세트 테이블이 객체에 매핑하는 방법을 지정하고 이들 사이의 연결을 지정하는 방법 (모든 유형의 연결에 대한 지원)을 지정하는 XML 구성 파일을 만듭니다. 3. 사용자 정의 도구 XML 구성을 구문 분석하고 필요한 코드를 생성합니다. 4. 일반 기본 클래스에서 상속 된 클래스.

우리의 프레임 워크와 호환 되려면 데이터베이스는 다음과 같은 기준을 충족해야합니다.

  1. 각 테이블에는 기본 키로 단일 열이 있어야합니다.
  2. 모든 테이블에는 클라이언트에서 생성 된 동일한 데이터 유형의 기본 키가 있어야합니다.
  3. 상속을 처리하려면 단일 테이블 상속 만 지원됩니다. 또한 XML 파일은 거의 항상 무언가를 달성 할 수있는 단일 방법을 제공합니다.

우리가 지금 지원하고 싶은 것은 다음과 같습니다.

  • 데이터 세트에서 의존성을 제거하십시오. SQL 코드는 자동으로 생성되어야하지만 프레임 워크가 스키마를 생성해서는 안됩니다. DB 스키마를 수동으로 제어하고 싶습니다.
  • 상속 계층에 대한보다 강력한 지원.
  • LINQ와의 선택적 통합.

내가 찾고있는 것이 더 명확하기를 바랍니다.

도움이 되었습니까?

해결책

현재의 프레임 워크 향상 - 문제는 많은 노력이 필요하다는 것입니다.

귀하의 질문에 따르면, 다른 많은 장소에서 제공되는 기능을 다시 작성 해야하는 이유는 없었습니다. 귀하가 귀하의 질문에 명시하지 않은 ORM에 대한 고유 한 요구가 없다면 ORM을 재창조하는 것이 시간을 잘 사용하지 않는다고 제안합니다.

ado.net 엔티티 프레임 워크

우리는 현실 세계의 프로덕션 소프트웨어에서 엔티티 프레임 워크를 사용하고 있습니다. 복잡한? 내가 말할 수있는 한 대부분의 다른 Orms보다 더 이상은 아닙니다. 즉, "상당히 복잡합니다." 그러나 그것은 비교적 새롭고, 따라서 Nhibernate와 같은 것보다 커뮤니티 경험과 문서가 적습니다. 따라서 문서의 부족으로 인해 더 복잡해 보일 수 있습니다.

엔티티 프레임 워크와 nhibernate는 객체 관계 나누기 브리징 문제에 대해 분명히 다른 접근법을 취합니다. 나는 그것에 대해 조금 더 자세히 썼습니다. 이 블로그 게시물. 어떤 접근법이 당신에게 가장 의미가 있는지 고려해야합니다.

긍정적이고 부정적인 엔티티 프레임 워크에 대한 많은 논평이있었습니다. 그 중 일부는 잘 알려져 있으며 일부는 다른 솔루션을 추진하는 사람들에게서 나온 것 같습니다. 잘 알려진 비판에는 포함됩니다

  • POCO 지원 부족. 이것은 일부 응용 프로그램의 문제가 아니며 다른 응용 프로그램의 문제입니다. POCO 지원은 향후 릴리스에 추가 될 것입니다. 그러나 오늘날 Entity Framework가 제공 할 수있는 가장 좋은 것은 IPOCO입니다.
  • 모 놀리 식 매핑 파일. 메타 데이터가 일정한 플럭스에 있지 않기 때문에 이것은 우리에게 큰 문제가되지 않았습니다.

그러나 일부 비판은 나무의 숲을 놓치는 것 같습니다. 즉, 그들은 객체 관계 매핑의 필수 기능 이외의 기능에 대해 이야기합니다.

LINQ에서 SQL- 객체 지향 관행을 잘 처리하지 못합니다.

동의한다. 또한 SQL Server 초점이 마음에 들지 않습니다.

nhibernate- 좋은 옵션 인 것 같지만 일부 사용자는 너무 많은 고풍 오류를보고합니다.

글쎄, nhibernate에 대한 좋은 점은 주변에 매우 활기찬 커뮤니티가 있다는 것입니다. 그리고 당신이 그 난해 오류를 만날 때 (그리고 나를 믿어도, 엔티티 프레임 워크는 또한 난해 오류가 있습니다. 영토와 함께 제공되는 것 같습니다). 종종 솔루션을 매우 쉽게 찾을 수 있습니다. 즉, 나는 우리가 한 평가를 넘어서 Nhibernate에 대한 개인적인 경험이 많지 않아 우리가 엔티티 프레임 워크를 선택하게했기 때문에 다른 사람들이 더 직접적인 경험을 가진 다른 사람들이 이것에 대해 논평 할 수있게 해줄 것입니다.

subsonic- 짧은 소개에서 너무 유연 해 보입니다. 나는 그것을 원하지 않는다.

물론 Subsonic은 단순한 ORM 이상이며 Subonic 사용자는 SubSonic의 ActiverCord를 사용하는 대신 다른 ORM 구현을 선택할 수있는 옵션을 가지고 있습니다. 웹 응용 프로그램 프레임 워크로서 나는 그것을 고려할 것입니다. 그러나 ORM 기능은 raison d 'être가 아니며, Subsonic의 ORM 부분이 전용 ORM 프레임 워크보다 덜 주목을받을 것이라고 의심하는 것이 합리적이라고 생각합니다.

다른 팁

llblgen 필요한 거의 모든 작업을 수행 할 수있는 아주 좋은 ORM 도구를 만드십시오.

이바 티스 SQL에 대한 더 나은 제어를 얻기 때문에 제가 가장 좋아하는 것입니다.

개발자 Express Persistence Objects 또는 XPO 가장 잘 알려져 있습니다. 나는 그것을 3 년 동안 사용합니다. 그것은 상업적이며 개발을 위해 다른 (단일 회사)와 묶는 것을 제외하고는 필요한 모든 것을 제공합니다. 그 외에 Developer Express는 .NET 플랫폼의 최고의 구성 요소 및 프레임 워크 제공 업체 중 하나입니다.

XPO 코드의 예는 다음과 같습니다.

using (UnitOfWork uow = new UnitOfWork())
{
  Order order = new Order(uow);
  order.Date = DateTime.Now();
  uow.CommitChanges();
}

나는 그것을 살펴 보는 것이 좋습니다 Castle의 Activerecord 나는 그것에 대한 생산 경험이없고, 방금 샘플 앱을 가지고 놀았습니다. 작업하기가 정말 쉬운 것처럼 보이지만 모든 요구 사항에 맞는지 알기에 충분히 잘 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top