OK, donc j'ai quelques modules dans mon application. L'un s'appelle ProductCatalogue et l'autre s'appelle Contracts. Nous avons maintenant besoin d'un contrat associé à un certain nombre de produits (par exemple les produits qu'une partie à un contrat est autorisé à commander). Au sein du module Catalogue Catalogue produits que nous avons une classe ProductDAL qui a les fonctions suivantesComment accéder au DAL d'un autre module?
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
Maintenant, je veux obtenir tous les produits associés à un contrat donc je veux écrire une fonction qui ressemble à ceci
Public Function GetProductsForContract(contractId)
Set GetProductsForContract = GenerateProductsList("SOME SQL")
End Function
Ma question est, où devrais-je mettre cette fonction? Je veux utiliser la fonction GenerateProductsList() existante car elle est beaucoup plus compliquée qu'elle n'en a l'air. Là, ma question est "Où devrais-je mettre GetProductsForContract"?
Mes options:
1) Mettre en ProductDAL. Le problème avec ceci est que ProductDAL prend soudainement conscience de ce qu'est un contrat et je peux le voir remplir rapidement des fonctions telles que GetProductsForAllContracts, GetProductsForLiveContracts, etc, etc (et plus quand d'autres modules veulent accéder aux produits) donc vraiment J'aimerais garder ces fonctions avec le reste du code des contrats.
2) Mettez-le dans ContractDAL et rendre publique ProductDAL.GenerateProductsList.
Devrais-je vraiment exposer cela?
3) Créer une nouvelle classe dont une méthode qui a la seule responsabilité d'intégrer un ensemble de données SQL et de retourner une liste de produits.
En fait, n'est-ce pas la même chose que 2?
4) Arrêtez de vous tromper.
Je ne sais pas comment. Montre moi. Alors tiens moi.
edit: En outre, qu'en est-il de AddProductToContract, RemoveProductFromContract où cela va-t-il? Je penche vers une nouvelle classe ContractProductManager, mais quel est le meilleur moyen d'accéder à GenerateProductsList()
Merci pour votre réponse. Je n'ai qu'une seule base de données mais l'application est énorme, c'est pourquoi il y a différentes LAD pour différentes sections (produit, contrats, contacts, documents, etc.). – jammus