我正在构建一个实现tftp协议的服务器.我的作业要求创建最近请求的文件的缓存.我想了解的是关于设计,看一下这个例子:
服务器请求文件到缓存缓存没有文件缓存从文件系统读取文件缓存将文件提供给服务器
如果缓存从文件系统读取,或者服务器是否应从缓存中读取,并且文件是否丢失,请从文件系统中读取缓存并将其放入缓存中?
从复杂性的角度来看,我肯定会建议缓存从文件系统中读取文件.您的实施将更加清洁.
深入挖掘:你正在触及单一责任原则.理想情况下,您希望系统的组件做一件事,并且做得好.你要避免的是一个完成所有事情的上帝对象,因为这会阻止你的代码可扩展和可重用.现在让我们来看看你提出的两个选项:
选项1:服务器读取文件系统并保存到缓存.
在这种情况下,服务器是Universe的中心.缓存只是服务器的内存池,没有服务器,它没有什么用处.服务器必须知道文件系统和缓存的所有内容,并且增强系统要求更改服务器.
仅这一描述就说明了为什么它打破了单一责任原则.对系统任何组件的任何更改都需要更改服务器 - 这很糟糕.
选项2:缓存读取文件系统.
在此选项中,缓存充当服务器和文件系统之间的完整抽象.服务器不需要知道缓存的工作方式.就此而言,甚至可以有多个级别的缓存!无论它如何工作,服务器都不必关心.服务器使用缓存进行一次使用,即检索文件.
该部门也是双向的.缓存不需要知道它是如何被使用的,而仅仅是为了更快地访问文件系统.这允许它在以后用更好的东西切换(如果你决定这样做),并且还使它可以在你创建的其他项目中重复使用.
如果选择2,您的代码将更容易,更清洁.