读书人

MVC模式中的dynamic_cast有关问题

发布时间: 2012-02-21 16:26:23 作者: rapoo

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

读书人网 >C++

热点推荐