Как мне получить доступ к DAL другого модуля? - PullRequest
0 голосов
/ 03 июня 2009

ОК, поэтому в моем приложении есть пара модулей. Один называется 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 ()

1 Ответ

1 голос
/ 03 июня 2009

Сложно ответить, не зная больше о вашем приложении. Я бы сказал, что если продукты и контракты находятся в одной базе данных и всегда будут, наличие двух DAL кажется произвольным разделением. Поскольку у вас, вероятно, уже есть связь между продуктом и контрактом в базе данных, вы ничего не выиграете от разделения двух в DAL. Вы можете поместить этот новый метод в любой класс, imho.

...