我有一个数据访问层(SAP ABAP,但这里的语言并不重要)我每个实体/数据库表有1个接口,比如
这些接口是由实际的数据库访问类impl和生成的缓存层实现的,这非常简单,因为这些方法实际上没有任何参数,只返回相关的"数据
但是在某些消费者中,我需要对返回的数据进行过滤访问,特别是我需要获取受合约位置约束的所有接口(~50)的数据。
那么,你建议
A)当使用可选的合同位置过滤器/约束扩展每个现有接口(上面列出的~40-50)时,API非常干净,如下所示:
result = lo_data_object_calc->get_contract_positions( <FILTER> ).
如前所述,它需要扩展每个实现,数据访问以及生成的缓存层。
B)另一方面,使用显式过滤器接口IF_DATA_FILTER_CONTRACT_POSITION,我还有另一个围绕数据访问的接口层,我可以生成非耦合过滤impls。我既不需要触及实际的数据访问impl,也不需要触及生成的缓存层。但是,使用会更加笨拙,比如
TRY.
" down-cast from data-interface to filter-interface
DATA lo_object_filter ?= lo_data_object_calc.
lo_object_filter->set_contract_position_filter( <FILTER> ).
CATCH could_not_cast. RAISE i-need-a-filter-impl!
ENDTRY.
result = lo_data_object_calc->get_object_calculations( ).
更新05.08.2014:我决定使用C)创建一个单独的过滤器对象,该对象明确过滤由例如get_contract_positions()。
答案 0 :(得分:1)
我会选择解决方案A. 1.如果以后需要优化数据检索,可以在db-access-class中执行此操作 2.您可以在where子句中使用过滤器,而不必自己编程 3.使用您的接口的其他人必须查找,理解和使用您的过滤器接口/类。如果您在数据访问方法
中包含过滤器作为参数,我认为这样会更容易