我正在设计一个分布式文件系统,其中一个核心类是FileSystem类,如下所示:
class FileSystem {
public:
exists(Path*);
insert_file(File*);
insert_block(Block*);
remove(Path*);
list();
update_file(File*);
update_block(Block*);
get_file(Path*);
get_block(Block*);
move(Path*, Path*);
copy(Path*, Path*);
...
... // More and more methods
};
我成功地重构了这个项目,但是,我不能重构这个类,每当我需要添加一个行为(装饰器或子类型),我最终使我的设计更加复杂。另一个问题是这个类的依赖数量(路径,块,文件等不包括在代码片段中)。
主要原因是这个FS类有太多的职责,但我仍然找不到一种方法来将这个文件系统类拆分成不同的类。我想知道是否有任何模式来处理这种情况,如果没有,你会如何处理这个巨大的类?
1条答案
按热度按时间8wigbo561#
请看一下C++核心准则C.4:
仅当函数需要直接访问类的表示形式时,才使其成为成员
在上面的例子中,不清楚Filesystem有什么内部状态,但我猜是最小的。任何可以由其公共接口表达的函数都应该是自由函数。另一种说法是,任何不涉及保持类不变的函数都不应该是接口的一部分。
我猜文件系统仅由其当前文件夹表示。
一个成员函数维护一个不变式的例子是
chdir
,如果你对它感兴趣的话,它也可以是一个自由函数,返回一个新的FileSystem,使得类基本上是不可变的,这是非常可取的,参见Guideline Con.1。以上其他函数都可以用公共接口表示,所以应该是非成员函数: