2009-06-03 10 views
0

OK, also habe ich ein paar Module in meiner Anwendung. Einer heißt ProductCatalogue und ein anderer heißt Contracts. Wir brauchen jetzt einen Vertrag, der mit einer Reihe von Produkten verbunden ist (z. B. die Produkte, die eine Vertragspartei bestellen darf). Im Produktkatalog Modul haben wir eine ProductDAL Klasse, die die folgenden FunktionenWie soll ich auf die DAL eines anderen Moduls zugreifen?

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 

Jetzt hat, möchte ich alle Produkte mit einem Vertrag verbunden bekommen, so möchte ich eine Funktion schreiben, die wie diese

Public Function GetProductsForContract(contractId) 
    Set GetProductsForContract = GenerateProductsList("SOME SQL") 
End Function 
sieht

Meine Frage ist, wo sollte ich diese Funktion setzen? Ich möchte die vorhandene Funktion GenerateProductsList() verwenden, da sie viel komplizierter ist, als sie aussieht. Dort ist meine Frage "Wo sollte ich GetProductsForContract setzen"?

Meine Optionen:

1) Legen Sie es in ProductDAL. Das Problem mit diesem ist, dass ProductDAL plötzlich bewusst wird, was ein Vertrag ist, und ich sehe, dass dies schnell voll von Funktionen wie GetProductsForAllContracts, GetProductsForLiveContracts usw. (und mehr, wenn andere Module auf Produkte zugreifen wollen) so wirklich Ich möchte diese Funktionen mit dem Rest des Vertragscodes behalten.

2) Setzen Sie es in ContractDAL und machen Sie ProductDAL.GenerateProductsList öffentlich.
Sollte ich das wirklich aussetzen?

3) Erstellen Sie eine neue Klasse, für die eine Methode die alleinige Verantwortung hat, einen SQL-Datensatz aufzunehmen und eine Produktliste zurückzugeben.
Eigentlich ist das nicht das gleiche wie 2?

4) Höre auf, es falsch zu machen.
Ich bin mir nicht sicher, wie. Zeig es mir. Dann halte mich.

edit: Und was ist AddProductToContract, RemoveProductFromContract wo dies geht? Ich lehne mich an eine neue ContractProductManager-Klasse an, aber was ist der beste Weg, um auf GenerateProductsList() zuzugreifen

Antwort

1

Dies ist schwer zu beantworten, ohne mehr über Ihre App zu wissen. Ich würde sagen, dass, wenn Produkte und Verträge in der gleichen Datenbank sind und immer sein wird, scheint wie eine willkürliche Trennung 2 DALs mit. Da Sie wahrscheinlich bereits eine Beziehung zwischen Produkt und Vertrag in der Datenbank haben, gewinnen Sie durch die Trennung der beiden in der DAL nichts. Sie können diese neue Methode in jede Klasse, imho, einfügen.

+0

Danke für Ihre Antwort. Ich habe nur die eine Datenbank, aber die App ist riesig, weshalb es verschiedene DALs für verschiedene Bereiche gibt (Produkt, Verträge, Kontakte, Dokumente, etc.). – jammus