use*_*073 6 architecture delphi plugins modular-design
使用Delphi 2010,我需要编写一个程序来支持模块或插件.虽然有点做作,但假设我有一个转换数据文件/文本文件的应用程序.它将支持30种输入格式和30种格式作为输出.第一个版本可能只实现其中的一些格式.我的挑战是我想要一个数据驱动的流程.
例如,假设我有一个PARSE_FILE例程.如果我的输入数据文件格式是'Format_A',那么当我调用PARSE_FILE时,它应该知道使用PARSE_FILE_Format_A,而不是PARSE_FILE例程的其他29个不同版本.
PARSE_FILE只是一个例子.我可能会有60个不同的常用函数,LOAD_FILE,GET_DELIMITER,PARSE_FILE等,但这些函数中的每一个对于30种不同格式中的每一种都会有所不同.我可以使用什么技术,以便在我使用FORMAT_A加载文件时,这60个不同的常用例程中的每一个都使用这60个例程的正确"版本"?
请记住,我只是从5种输入格式开始,稍后会添加其他格式,所以我需要一种集中定义这种"映射"的方法,所以无论在我的代码中使用这些例程,正常的例程版本都会即使我称之为通用版本,也可以使用.
IFileFormatHandler
包含PARSE_FILE函数等.IFileFormatHandler
接口类型放在一个BPL包(即Common.bpl)中,以便所有模块都可以引用通用接口类型.每个插件模块本身也都在自己的BPL包中.(多个文件格式处理程序可以存在于同一个BPL程序包中,但基线示例是每个BPL一个)RegisterPlugin(name: string; instance: IFileFormatHandler)
例如.这会将插件名称和实例注册到内部列表中,主机应用程序可以使用该列表找出可用的插件并调用它们. 归档时间: |
|
查看次数: |
1290 次 |
最近记录: |