MVC模式中的dynamic_cast问题
在一个MVC框架中, 有如下大量类似代码
void ViewA::some_action(Model* model):
ModelA m = dynamic_cast<ModelA*> model;
void ViewB::some_action(Model* model)
ModelB m = dynamic_cast<ModelB*> model;
问题表面上很明显, view和其对应model类有特定的数据/信息游离于接口之外
感觉这个设计有问题, 如何处理这个"特定信息"?
[解决办法]
信息不足啊,mvc模式中,尽量让c充当v和m的中介,需要逻辑处理的地方可以放到c里面去做
[解决办法]
为什么不修改Model的接口呢?如果考虑接口扩展性,我觉得可以参考COM的做法,在Model中提供一个函数接口用于不同版本的Model操作接口“QueryInterface”,而在“QueryInterface”可以使用static_cast避免RTTI,以提高整体运行效率。
[解决办法]
type laundering问题描述
http://www.research.ibm.com/designpatterns/pubs/type-laundering.html
解决问题的方法(multicast模式)
http://www.research.ibm.com/designpatterns/pubs/ld-events.html