100分,求一解决方案,论题为如何泛化服务
问题描述:现有一接收数据包服务,定制了三个类 cappmain、ciocp、cdatabase,其中ciocp和cdatabase聚合形成cappmain,现在cappmain有一个init()方法,可以初始话ciocp实例和cdatabase实例,ciocp是完成端口的封装,包含的方法有recvdata(),cdatabase用于创建oledb对象,用于操作数据库,其中提供了一个方法createsql()和writetodb(),现在的问题是,recvdata方法中包含验证数据包合法性的程序和解包的程序,而createsql中含有创建存储过程的语句,writetodb中包含调用特定的存储过程的语句,现在要求,以com方式对这个服务进行泛化,并且提供三个方法,要求,不管在什么方法下,只要传入三个函数指针,就可以进行特定的解包、创建存储过程、和写库,大家考虑考虑如何做?
推荐阅读
没明白你的意思,你自己不是已经说了如何做了吗?
使用三个com组件,分别实现接口iappmain、iiocp、idatabase,要实现不同的数据协议和存储过程的联合,实现特定的支持iappmain接口的com组件即可。
不过我以为你的这个设计不好,应为iappmain的功能只是生成另外两个com组件的实例,所以iappmain的init应该改为hresult init( [in] clsidref clsidiocp, [in] clsidref clsiddatabase );在init的实现中通过调用createinstance直接动态创建另外两个com组件的实例,因此是包容,不是聚合,但是仍可以用聚合的外貌对人,不过有违com的祖讯。


讨论区