2009-06-03 13 views
0

좋아, 그래서 내 응용 프로그램에서 몇 가지 모듈이 있습니다. 하나는 ProductCatalogue라고하고 다른 하나는 Contracts라고합니다. 이제 계약의 당사자가 주문할 수있는 제품과 같은 다수의 제품과 관련된 계약이 필요합니다. ProductCatalogue 모듈 내에서 우리는 그래서이다른 모듈의 DAL에 어떻게 액세스해야합니까?

Public Function GetProductsForContract(contractId) 
    Set GetProductsForContract = GenerateProductsList("SOME SQL") 
End Function 
과 같은 함수를 작성 할

Public Function GetProducts() 
    Set GetProducts = GenerateProductsList("SOME SQL") 
End Function 

Private Function GenerateProductsList(selectQuery) 
    Dim list : Set list = New List 
    Dim results : results = GetResultsFromDB(selectQuery) 
    '... for each row 
     Dim product : Set product = New Product 
     product.Id = results(field, index) 
     list.Add(product) 
    'loop ... 
    Set GenerateProductsList = list 
End Function 

지금, 나는 계약과 관련된 모든 제품을 얻으려면 다음과 같은 기능을 가진 ProductDAL 클래스가

제 질문은이 기능을 어디에 두어야합니까? 보이는 것보다 훨씬 복잡하기 때문에 기존 GenerateProductsList() 함수를 사용하고 싶습니다. 거기에 내 질문은 "어디 GetProductsForContract 넣어"해야합니까?

내 옵션 :

1) ProductDAL에 넣어.
이 문제는 ProductDAL이 갑자기 계약이 무엇인지 알게되어서 GetProductsForAllContracts, GetProductsForLiveContracts 등의 기능이 가득 찬 것을 볼 수 있습니다. (다른 모듈이 제품에 액세스하려고 할 때) 나머지 계약 코드와 함께 이러한 기능을 유지하고 싶습니다.

2) ContractDAL에 넣고 ProductDAL.GenerateProductsList를 공개로 설정하십시오.
정말 공개해야합니까?

3) SQL 데이터 집합을 가져 와서 제품 목록을 반환하는 유일한 책임이있는 새 클래스를 만듭니다.
실제로 2와 같지 않습니까?

4) 잘못했는지 확인하십시오.
잘 모르겠습니다. 보여줘. 나를 붙들어 라.

편집 : 또한 AddProductToContract, RemoveProductFromContract는 어떨까요? 새로운 ContractProductManager 클래스를 사용하고 있지만 GenerateProductsList()에 액세스하는 가장 좋은 방법은 무엇입니까

답변

1

앱에 대해 더 알지 못하면 대답하기가 어렵습니다. 제품 및 계약서가 동일한 데이터베이스에 있고 항상 존재한다면 2 개의 DAL을 갖는 것이 임의적 인 분리라고 생각합니다. 이미 데이터베이스에서 제품과 계약간에 관계가 있으므로 DAL에서 두 제품을 분리하는 데 아무런 이득도 얻지 못합니다. 이 새로운 메소드를 두 클래스 중 하나 인 imho에 배치 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 하나의 데이터베이스 만 가지고 있지만 앱이 거대하여 다양한 섹션 (제품, 계약서, 연락처, 문서 등)에 대한 DAL이 다른 이유가 있습니다. – jammus

관련 문제