基于聚合的体系结构问题
Aggregating-based architecture issues
我再次需要你的帮助
我有一个文档查看器应用程序,它可以读取两种不同类型的文档:
- 特别的一个(基于PDF,带有自定义标题)
- Standart one("原始"PDF)
使用原始PDF查看器应该像其他任何查看器一样工作
使用自定义-在打开过程中执行一些额外的操作,
这些操作对原始PDF不可用
这些操作稍后只能在应用程序的菜单中使用。并且仅适用于自定义文档
项目OOP架构(由其他人设计)如下:
class GenericDocument
class PdfLibDocument
class CustomDocumentHighLevel
class CustomDocumentLowLevel
也就是说,每个较高级别的类都包含较低级别的成员:
class GenericDocument
{
SmartPointer< PdfLibDocument > m_document;
...
};
等等
自定义文档具有许多特定功能:
class CustomDocumentLowLevel
{
public:
void DoSomeBlackMagic();
...
// Another black magic
};
出现问题时,我需要将一些低级方法从CustomDocumentLowLevel
"拉"到GenericDocument
(显示在应用程序菜单中),因为我需要将此方法添加到所有四个类中
也许在将来我需要从自定义文档中"提取"更多的方法
在这种情况下,这种软件体系结构似乎是一个糟糕的选择,不是吗
所以我需要找到一种重构代码的方法。我应该用继承代替聚合吗?引入接口?
通常组合比继承更可取,但它似乎不适用于您的情况。为什么不从彼此继承Viewers?制作一个具有简单功能的基础查看器,该查看器可在所有地方使用,然后从中继承专门的查看器,添加新功能。
至于菜单和与其相关的操作,它们应该表示为单独的对象。请检查命令模式。
UI可以从查看器请求可用的命令列表。每个查看器都可以在初始化或构造时填写其内部命令列表,也可以根据您的选择填写。
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- C++,类结构问题
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 生成文件问题(体系结构x86_64的未定义符号:"_main",引用自:主可执行文件的隐式入口/启动)
- 体系结构x86_64的未定义符号:Xcode 5 问题
- 基于聚合的体系结构问题
- 体系结构的未定义符号x86_64:编译问题
- 存档存在问题,该存档不是C中链接的体系结构(x86_64)
- 体系结构x86_64的未定义符号(C++继承问题)
- 将windows c++项目链接到boost命令行体系结构类型问题
- g++:Mac OS X上的链接器问题-体系结构x86_64的未定义符号