2014-04-03 4 views
2

나는 ADOModule, SDACModule, AstaModule의 3 가지 DataModule을 가지고 있습니다. ADO, SDAC, Asta 등 사용하는 DB 구성 요소를 제외하면 모두 동일합니다.DB 구성 요소 또는 새 구성 요소의 시각적 상속?

이러한 모든 DataModule은 동일한 작업을하지만 다른 구성 요소를 통해 수행됩니다. 내 뜻은 - 모든 내부 선택과 임원이 동일하다는 것입니다.

내가 검색 한 내용 :이 DataModule을 모두 하나의 BaseDataModule로 결합하여 ADOModule, SDACModule 및 AstaModule 각각이 BaseDataModule에서 상속 받도록하는 방법입니다.

글쎄, 나는 메소드와 속성을 상속하는 것이 쉽다는 것을 알았지 만, 컴포넌트를 상속하지는 않았다. 그렇게 할 수있는 좋은 방법이 있습니까? 프로젝트 목표 : 코딩 및 복사 붙여 넣기를 최소화하십시오. 이

+0

시각적 상속으로는 수행 할 수 없습니다. 런타임시 모든 데이터베이스 구성 요소를 빌드해야합니다. 당신은 어쨌든 그것을해야합니다. –

+0

일부 부정 행위가있을 수 있습니까? 모든 구성 요소의 메서드를 저장해야하지만 db 구성 요소 만 변경해야합니다. – notricky

답변

0

사용 가능한 몇 가지 옵션이 있지만 다음과 같이 내가 걸릴 접근 방식은 다음과 같습니다 -

  1. 이 당신의 데이터베이스 및 쿼리 구성 요소에 대한 추상 기본 클래스를 만듭니다. 기본 클래스는 필요한 모든 메서드와 속성을 정의해야합니다.

  2. 기본 데이터 액세스 계층을 효과적으로 래퍼하는 각 데이터 액세스 계층에 대한 구체적인 하위 항목을 만듭니다.

  3. 현재 데이터 모듈 코드를 특정 유형의 액세스 레이어가 아닌 추상 구성 요소 유형을 참조하는 비 시각적 단위로 이동합니다.

  4. 이제 액세스 레이어를 쉽게 전환하거나 향후 새로운 레이어를 추가 할 수 있습니다.

이것은 어댑터 (또는 래퍼) 패턴의 전형적인 예입니다.

휠을 다시 발명하지 않으려면 tiOPF, InstantObjects 또는 TMS Aurelius와 같은 OPF/ORM 솔루션을 살펴 보는 것이 좋습니다.이 솔루션은 동일한 기능과 훨씬 더 많은 기능을 제공합니다.

+0

고마워요, 그건 내가 생각하고있는 방법이지만, 더 좋고 더 쉬운 해결책이 있는지 궁금해하고있었습니다. 나는 기본 클래스로 모든 것을 다시 코딩하기 위해 어떤 일을해야하는지 모른다. 감사. tiOPF, InstantObjects 또는 TMS Aurelius - 저는 아직 그 사실을 아직 모릅니다. – notricky

+0

여러 데이터베이스 플랫폼을 대상으로 할 때 실제로 그렇게하기가 어렵지 않고 배당금을 지불해야합니다. 일단 기본 클래스를 작성하면 오후에 새로운 액세스 레이어를 코딩 할 수 있어야합니다. tiOPF의 코드는이를 수행하는 방법에 대한 아주 좋은 예를 제공합니다. 오픈 소스이므로 코드를 볼 수 있습니다. http://tiopf.sourceforge.net/Doc/Concepts/6_TheAdaptorForDatabaseIndependence.shtml –

1

다른 경로를 제안하도록 허용합니다. 다른 특정 데이터 세트 대신 TClientDataset에 기반을 둔 데이터 모듈을 모두 작성하는 것이 좋습니다. 필요한 모든 속성과 메서드를 추가하십시오. 항상 TClientDataset 인스턴스로 작업하십시오.

그런 다음 데이터를 선택하고 SQL 문을 실행하는 방법을 제공하는 데이터 액세스 서비스 인터페이스 (예 : IDataProvider)를 만듭니다. select 메서드는 쿼리 텍스트를 받고 찾은 모든 레코드 (내부 TClientDatasetData 속성)를 보유 할 OleVariant을 반환합니다. 이 OleVariantTClientDataset 인스턴스의 Data 속성에 할당 될 때 DataModule에 채워집니다.

마지막으로 구현 클래스를 IDataProvider으로 작성하십시오. 이러한 클래스는 지원해야하는 특정 데이터 액세스 기술에 따라 다릅니다.

이 아키텍처는 응용 프로그램을 데이터 액세스 방법과 완전히 독립적으로 만듭니다. 앞으로 데이터를 얻는 네 번째 방법이 필요한 경우 IDataProvider의 새 구현을 추가하면 나머지는 계속 작동합니다.

이러한 구현 클래스를 분리 된 패키지에 넣으면 응용 프로그램을 다시 컴파일하지 않고도 해당 패키지를 다른 방식으로로드하여 다양한 데이터 액세스 메소드로 작동하도록 응용 프로그램을 설정할 수 있습니다. 그것이 얼마나 멋진 지 생각해보십시오!

+0

고마워, 나는'TDataSet' 기반을 생각하고 있었지만 시각적 인 외관은 없다. 그리고 제가 아는 바와 같이,'TClientDataset'에는 몇 가지 버그와 문제가 있습니다. 어쩌면 더 잘 시도 된 데이터 세트를 사용할 계획이있을 수 있습니까? @ Andy_D의 생각보다 더 명확한 아이디어이기 때문에 – notricky

관련 문제