ОК, поэтому в моем приложении есть пара модулей. Один называется ProductCatalogue, а другой - Контракты. Теперь нам нужно, чтобы контракт был связан с рядом продуктов (например, с продуктами, которые разрешено заказывать одной из сторон контракта). В модуле ProductCatalogue у нас есть класс ProductDAL, который имеет следующие функции
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
Теперь я хочу получить все продукты, связанные с контрактом, поэтому я хочу написать функцию, которая выглядит следующим образом
Public Function GetProductsForContract(contractId)
Set GetProductsForContract = GenerateProductsList("SOME SQL")
End Function
У меня вопрос, где я должен поставить эту функцию? Я хочу использовать существующую функцию GenerateProductsList (), поскольку она намного сложнее, чем кажется. Там мой вопрос "Где я должен поставить GetProductsForContract"?
Мои варианты:
1) Положите его в ProductDAL.
Проблема в том, что ProductDAL внезапно узнает, что такое контракт, и я вижу, как он быстро заполняется такими функциями, как GetProductsForAllContracts, GetProductsForLiveContracts и т. Д., И т. Д. (И более, когда другие модули хотят получить доступ к продуктам), поэтому я действительно хотел бы сохранить эти функции с остальной частью кода контрактов.
2) Поместите его в ContractDAL и сделайте ProductDAL.GenerateProductsList общедоступным.
Должен ли я действительно разоблачать это?
3) Создайте новый класс, один метод которого несет единоличную ответственность за получение набора данных SQL и возврат списка продуктов.
На самом деле это не то же самое, что 2?
4) Хватит делать это неправильно.
Я не уверен как. Покажи мне. Тогда обними меня.
edit: А как насчет AddProductToContract, RemoveProductFromContract? Я склоняюсь к новому классу ContractProductManager, но как лучше всего получить доступ к GenerateProductsList ()