我们正在实施一个具有战略模式的系统.
某些特定方法的调用者需要数据的Hashmap,而在某些情况下,它将是用户定义的DTO.有些人需要两者.
我们如何决定使用哪种返回类型,而不是包含Hashmap和DTO的Arraylist?还有更适合的吗?
例:
一些调用者只需要2个字符串并且更喜欢Hashmap.
对同一API的其他一些调用者需要12个适合放入DTO的值.第一个调用者不需要DTO中的所有元素.
第三个调用者需要所有14个值,因此需要两个结构.
Tom*_*icz 10
如果某些调用者需要Map(BTW不使用类似于HashMap接口的具体类型)而其他调用者需要对象,则可能有两个原因:
该方法根据参数返回完全不同的东西(例如,如果设置了标志,则返回特权映射,而如果不是,则返回表示用户自己的对象)
您正在返回同一实体的不同视图
在第一种情况下,您的界面存在严重缺陷,应重新设计.可能你需要两种执行不同任务的方法." 不同的来电者 " 是什么意思?根据谁调用该方法,您决定返回什么?
在第二种情况下,想一个更通用的模型并返回它.然后让客户端将其转换为适当的格式.做这件事有很多种方法:
返回格式不可知类型并提供转换为map和object的方法,以便客户端可以决定.例如,如果您不确定客户端是否更喜欢具有属性的弱类型映射或具有相同属性/字段的强类型对象,请返回简单的包装器toMap和toObject方法.请注意,在这种情况下,内部表示并不重要,客户端始终使用视图,您可以在将来始终添加新格式
返回Model具有两个子类的泛型类:MapModel并ObjectModel在子类中公开适当的getter.千万不能使用instanceof,但访问者模式来代替.在此模型中,您始终返回单个值,客户端必须能够处理每种格式.如果添加新格式(如XmlModel),Model则需要自定义所有使用的位置以处理新类型.但是,在这种情况下,您无需将内部表示转换为不同的格式.
请注意,返回一个Object或任何变体只是在动态语言登陆,你不再有任何静态输入帮助.
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |