2010-06-09 2 views
1

나는 이것에 대한 간단한 해결책을 찾고 있었는데, NHibernate와 같은 것을 향하여 최선을 다했지만 지금까지 내가 찾은 모든 것이 약간 다른 문제를 해결하려고하는 것 같다. 현재 프로젝트에서보고있는 내용은 다음과 같습니다.간단한 읽기 전용 DAL 생성?

IBM의 핵심 비즈니스 (금융 기관)에 사용되는 타사 소프트웨어 제품군의 기본 저장소로 IBM iSeries 데이터베이스가 있습니다. 우리 팀이하는 일 중 일부는이 데이터의 많은 부분을보고하거나 키 오프하는 응용 프로그램을 작성하는 것입니다. 과거에는 수동으로 ADO.NET 연결 (.NET 3.5 및 Visual Studio 2008 사용 중)을 수동으로 작성하고 쿼리를 수동으로 작성했습니다.

앞으로 나아가고 싶습니다. 개발 팀에서 데이터를 가져 오는 과정을 단순화합니다.

var something = (from t in TableName select t); 

그리고, 이상적으로, 그들은 단지 얻을 것이라고 일부에 IQueryable 또는 생성의는 IEnumerable : 오히려 연결 및 쿼리와 모든마다 만드는 것보다, 차라리 개발자가 단순히 이런 식으로 뭔가를 할 수있을 정도 거라고 엔티티. 이것은 내가 개발중인 새로운 도메인 코어 내부에서 이루어질 것입니다.이 엔티티가 어디에 살며 애플리케이션은 요청/응답 서비스 레이어를 통해 인터페이스 할 것입니다. 한 번 생성되어야 데이터베이스 테이블에 해당

  1. 엔티티 우리는 수동으로 시간이 지남에 업데이트 유지하기 위해 선호하는 것 :주의해야 할

    몇 가지 있습니다. 즉, 열/테이블이 데이터베이스에 추가되면 아무 것도 할 필요가 없습니다. (물론 일부가 삭제 된 경우에는 삭제되지만 괜찮습니다.)하지만 새 열을 사용해야하는 경우 해당 열을 다시 생성하지 않고도 필요한 클래스에 추가 할 수 있어야합니다. 모든 것.

  2. 전체가 선택 전용이어야합니다. 우리는 데이터베이스에서 어떤 것도 깨뜨릴 수 있기를 원하지 않기 때문에 여기서 전체 DAL을 수행하지는 않습니다 (실수로).
  3. 우리는 도메인 객체와 생성 된 엔티티 유형간에 어떤 종류의 매핑도 필요하지 않습니다. 도메인은 그곳에있는 데이터의 일부만을 거의 다루지 않으며, 우리가 필요로하지 않을 대부분의 데이터를 다루며, 시간이 지남에 따라 수동으로 재사용 가능한 맵을 생성합니다. 나는 이미 "리포지토리"클래스가 도메인 객체를 리턴하는 DAL을 논리적으로 분리했다. 나는 리포지토리 클래스 내에서 사용되는 수동 ADO보다 나은 대안을 찾고있다.

의견이 있으십니까? 내가 뭘하는지는 마치 DAL/ORM 도구/튜토리얼 온라인에 대한 정상적인 수요 밖에서는 아무 것도 찾을 수 없었던 것 같습니다. 아니면 뭔가 명확한 것을 간과하고 있을까요? 나는이 도구가 사용 된 몇 가지 프로젝트에 있었던

http://www.codesmithtools.com/

하고, 개발자들은 좋아했다 :

+0

IBM iSeries ... DB2 서버를 의미합니까? – code4life

+0

ADA 연결을 위해 DB2 드라이버 (IBM.Data.DB2.iSeries.dll)를 사용하는 많은 레거시 응용 프로그램처럼 보입니다. 나는 여기에서 "iSeries 팀"에 있지 않기 때문에 나는 (정책의 문제로서) 세부 사항으로부터 보호 받았다. 그러나 나는 과거에 "iSeries"및 "AS400"이라고 불렀다고 들었습니다. 어쩌면 AS400에서 실행되는 DB2일까요? 나는 IBM 데이타베이스 사람이 아니기 때문에 올바른 키워드를 모르겠다. :) – David

+0

당신의 관점에서 보면 수동 ADO는 실제로 지루한'IDataReader' /'IDataRecord' 해석 코드 ? –

답변

1

이 조사 할 수 있습니다.

경고 : 프리웨어가 아닙니다.

+0

+1 : 매우 초기 버전 인이 (2.6)은 무료로 사용할 수 있지만 잘 작동하지만 .net에 대한 의존성이있다. 1.1. –

+0

저는 과거 2.6에서 실제로 사용 했었지만 특별히 흥분하지 않았습니다. 괜찮은 템플릿을 쓸 수 있다면 다시 방문 할 가치가있을 것입니다. – David

0

code4life의 답변에 추가하십시오.

최근 CodeSmith 2.6을 집에서 애완 동물 프로젝트에 사용했습니다.
부분 CRUD 메서드를 사용하여 부분 클래스를 생성하기 위해 템플릿을 조정했습니다.
그런 다음 부분 클래스와 부분 메서드를 확장하여 기본 매핑을 제공했습니다."주문"을 읽을 때 등

유사한 접근 방식은 당신을 위해 작동, 정말, 당신은 단지 CRUD의 R :)이 도움이

희망을 원하기 때문에 간단 할 수있는 관련 "OrderLines"를 참조하십시오.

P. 나는 CS 2.6에서 다른 것 (아마도 MyGeneration)으로 전환 할 필요가있다. 2.6은 64 개 개발 기계로 옮겨 가면서 문제가되는 .Net 1.1에 의존하기 때문이다.

UPDATE

내가 나중에 들었어요.
MyGeneration 메이트가 좋았습니다. 우리는 직장에서 CodeSmith를 사용합니다. 그래서 집에서 2.6으로 나갔습니다 (MyGeneration을 한눈에 볼 수 있었고, 즉시 얻을 수 없었습니다. 그것을주는 것 - 그렇게 CS로 되돌아 가게되었다).

MyGeneration은 기본적으로 CS의 오픈 소스 버전입니다.

는 또한, 항상 코드를 생성하지 왜 - 당신이 & 부분 방법 부분 클래스에 만족 여러분의 마음을 조정할 수 있습니다, 당신이 다시 생성이 과잉이라고 생각 알지만, 경험은 그 중 하나의 나에게 말한다 너는 네가 가지고 있지 않으면 너는 네가 필요로하고, 네가 필요로하고 필요로하는 것처럼 너는 결코 눈치 채지 못할 것이다.

+0

그것은 내 필요에 따라 올 수 있습니다. 그러나 나는 그것을 피하기를 희망합니다. 한 번 코드를 생성하고 수동으로 수정하면 1.1 종속성은 문제가되지 않습니다. 그러나이 시점에서 큰 "if"가됩니다. 그리고 저는 제가 구현 한 것이 무엇이든 쉽게 돌에 새겨 져서 앞으로 몇 년 동안 "끝난 방법"이 될 수 있기 때문에 저의 발판을 실제로 지켜보고 있습니다. – David