2010-01-15 9 views
3

일부 배경 : SQL 데이터베이스를 저장소로 사용하여 데스크톱 응용 프로그램을 개발하고 싶습니다. 한 번에 데이터베이스에 연결된 사용자는 한 명뿐입니다.
유지 관리를 쉽게하기 위해 Busniss Logic에서 GUI를 분리하고 싶습니다. 따라서, 나는 각 Dialog에 대해 DataModule (BL이 구현 된 곳)을 사용하는 것으로 생각했다.TClientDataset 구성 요소는 어디에 있어야합니까?

내 질문에 : TClientDataset 구성 요소를 삽입 할 적절한 위치는 어디입니까? Dialog 또는 DataModule에서 직접?

답변

5

필자는 TDataset-descendants를 항상 datamodule에 배치합니다. 어느 시점에서 양식을 다시 디자인해야 할지를 결정해야합니다. 그래도 데이터 세트를 자유롭게 사용할 수 있습니다. 양식간에 정보를 공유하는 것이 더 쉽습니다. 일반적으로 GUI와 데이터는 별도로 보관하십시오!

2

동시에 하나 이상의 화면에서 TClientDataSet을 사용하지 않을 경우 편의상 DataModule에 TClientDataSet을 배치하는 것이 안전합니다. 그러나 동일한 TClientDataSet에 액세스하는 두 개 이상의 화면이있는 경우 데이터 집합에 커서가 하나만 있고 한 화면의 다른 레코드로 이동하면 다른 화면의 다른 레코드로 이동하기 때문에 문제가 발생합니다. 이 경우 TClientDataset을 데이터를 사용하는 화면에 배치하십시오. 연결은 모든 데이터 세트에서 공유되므로 데이터 모듈에 계속 놓을 수 있습니다.

2

데이터 세트를 데이터 모듈에 넣습니다. 그렇게하면 개의 다른 양식에있는 여러 개의보기가 동일한 데이터 세트, 상세보기 및 그리드의 목록을 가리키며 은 항상 자동으로 동기화됩니다.
는 또한 는 쉽게 비즈니스 규칙을 변경하거나 UI 독립적으로를 재 설계하고, 프리젠 테이션 기능을 갖춘 비즈니스 규칙 및 사용자 인터페이스와 데이터 사이의 간격을 공식화.
다른 데이터에 액세스하는 Forms의 여러 인스턴스가 필요할 경우 항상 여러 DataModule을 인스턴스화하고 각 양식을 관련 데이터에 연결할 수 있습니다.

1

데이터 모듈의 데이터 세트 (폼이나 프레임의 데이터 소스)는 항상 저에게 잘 작동합니다.

+0

왜 TDataSource를 ClientDataSet 옆에 배치하지 않았습니까? –

+2

여러 가지 이유 : 종종 데이터 컨트롤을 포함하는 폼에 영향을주는 TDataSource의 이벤트에 응답하고 싶을 것입니다. DataSource가 데이터 모듈에있는 경우 데이터 모듈은 해당 이벤트가 작동하기 위해 양식에 대해 알아야하므로 더 강력하고 원치 않는 결합이 발생합니다. DataSource를 폼과 데이터 모듈 사이의 "다리"로 생각해야합니다. 두 개 이상의 폼이 해당 데이터 모듈을 사용하기를 원할 수 있으므로 각각의 폼에 자체 DataSource가 연결되어야합니다. – RichardS

1

의 DataSnap 방법 :

  • 데이터 액세스 계층 및을 TDataSetProvider 구성 요소, 플러스 비즈니스 코드
  • 와 BL의 datamodules이 단지 TClientDatasets와 datamodules 있습니다.

당신이 (당신이 ClientDataSet를 다시 사용할 수 있습니다 또는 다른 n 계층 기술) 데이터 스냅을 사용하여 n 계층에 구현을 변경하는 경우이 방법, 당신은 단지 적절한 계층에 BL의 datamodules를 이동해야합니다.

+0

비즈니스 코드가 TClientDataSets가있는 계층에 있으면 안됩니까? – RichardS

+0

그것은 단지 DataSnap 방법입니다. 그런 식으로 클라이언트 데이터 세트는 인터페이스에 남아 있고 공급자 (및 데이터 액세스)는 다른 계층으로 이동합니다. 이 프레임 워크를 사용하여 3-tier 아키텍처로 쉽게 전환 할 수 있습니다 ... ;-) –

+0

흥미 롭습니다. 감사합니다. 그런 식으로 생각하지 않았습니다. – RichardS

관련 문제