我正在研究一些代码来处理一组事件。根据具体的类型,这些事件可以以不同的方式持续存在。我目前有iEvent接口抽象事件,它们可以被持久化的每种方式的iBackend接口,以及每个后端的一组小接口(iFileEvent,iDBEvent等),该接口定义了转换方法到从事件本身。每个具体事件类都实现iEvent以及它支持的任何能力接口组合。C++设计实体和经理抽象
当解序列化由后端实现(文件,数据库等)执行时,这一切都可以正常工作,因此他们知道从现有内容创建的具体事件类型,从而可以使用具体事件类公共方法来创建它们。然而,我现在正处于需要对新事件进行系列化并且有点困惑的地步。
的问题是,我没有提供具体的类型,每个后端,因为它们只获得给予iEvent由于iBackend接口。
我可以抛出一个dynamic_cast,或者我可以只使用一个rtti比较(或一个更便宜的版本)和一个static_cast,但我不确定是否有更好的方法来进行能力查询,不要以任何这些建议来解决这个问题。
我希望在具体事件类型和用于在每个后端保持它们的数据结构之间进行转换的具体情况可以通过后端中用于每种类型事件的一组方法来实现,但我不喜欢这样根本不是......而是针对类和后端气味的每种组合的一组转换装饰器,就像类爆炸的恶劣情况一样。
似乎毫无意义的添加类时,所有我需要的是事件类说明他们支持为每个后端......这使我觉得铸造选项是唯一的出路接口。
因此,在总结,我正在寻找咨询到这个更好的解决方案。