我该如何访问另一个模块的DAL?

时间:2009-06-03 15:10:29

标签: asp-classic class-design data-access-layer

好的,所以我的应用程序中有几个模块。一个叫做ProductCatalogue,另一个叫做Contracts。我们现在需要将合同与许多产品相关联(例如,允许合同的一方订购的产品)。在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设为public。
我真的应该露出这个吗?

3)创建一个新类,其中一个方法负责接收SQL数据集并返回产品列表。
实际上这不是2?

4)别做错了。
我不知道怎么做。给我看看。抱着我。

编辑:另外,AddProductToContract,RemoveProductFromContract怎么样?我倾向于新的ContractProductManager类,但访问GenerateProductsList()的最佳方法是什么

1 个答案:

答案 0 :(得分:1)

如果不了解有关您的应用的更多信息,很难回答。 我会说,如果产品和合同在同一个数据库中并且总是如此,那么拥有2个DAL似乎是一个任意的分离。由于您可能已经在数据库中的产品和合同之间建立了关系,因此您无法通过在DAL中分离两者来获得任何收益。您可以将这个新方法放入任何一个类imho。