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
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