好的,所以我的应用程序中有几个模块。一个叫做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()的最佳方法是什么
答案 0 :(得分:1)
如果不了解有关您的应用的更多信息,很难回答。 我会说,如果产品和合同在同一个数据库中并且总是如此,那么拥有2个DAL似乎是一个任意的分离。由于您可能已经在数据库中的产品和合同之间建立了关系,因此您无法通过在DAL中分离两者来获得任何收益。您可以将这个新方法放入任何一个类imho。