Cache对象应该直接从文件系统中读取吗?

时间:2011-08-17 20:04:36

标签: c++

我正在构建一个实现tftp协议的服务器。我的作业要求创建最近请求的文件的缓存。我想了解的是关于设计,看一下这个例子:

服务器请求缓存的文件 缓存没有文件 缓存从文件系统读取文件 缓存将文件提供给服务器

如果缓存从文件系统读取,或者服务器是否应该从缓存中读取文件并且文件是否丢失,请从文件系统中读取它并将其放入缓存中吗?

1 个答案:

答案 0 :(得分:5)

从复杂性的角度来看,我肯定会建议缓存从文件系统中读取文件。你的实现会更加清晰。

深入挖掘:你正在触及single responsibility principle。理想情况下,您希望系统的组件做一件事,并且做得好。您要避免的是God object,它可以完成所有操作,因为这会阻止您的代码具有可伸缩性和可重用性。现在让我们来看看你提出的两个选项:


选项1:服务器读取文件系统&保存到缓存。

在这种情况下,服务器是Universe的中心。缓存只是服务器的内存池,没有服务器,它没有什么用处。服务器必须知道文件系统和缓存的所有内容,并且增强系统要求更改服务器。

这一描述就足以说明为什么它打破了单一责任原则。对系统任何组件的任何更改都需要更改服务器 - 这很糟糕。


选项2:缓存读取文件系统。

在此选项中,缓存充当服务器和文件系统之间的完整抽象。服务器不需要知道缓存的工作方式。就此而言,甚至可以有多个级别的缓存!无论它如何工作,服务器都不必关心。服务器使用缓存进行一次使用,即检索文件。

该部门也是双向的。缓存不需要知道如何使用,而仅仅是为了更快地访问文件系统。这允许它在以后用更好的东西切换(如果你决定这样做),并且还使它可以在你创建的其他项目中重复使用。

如果选择2,您的代码将更容易,更清洁。