我们正在开发一个复制工具,它定期将客户机中的不同文件夹复制到服务器计算机上。C++中的数据持久性 - 建议更好的方法
当需要复制特定的文件夹时,客户端会创建一个复制对象(通过我们的服务模块),该对象通过网络将文件夹中存在的文件的内容发送到服务器。在服务器上创建一个相应的接收对象(由我们的服务模块),它接收这些文件。
果壳:
客户端抽象 - 复制对象(在自己的线程中运行),其职责是发送的文件。 服务器端抽象 - 接收对象(在其自己的线程中运行),责任是接收内容并创建/更新文件。
现在,我们需要某些计数器,例如发送的总字节数,接收到的总字节数,最后一次复制时间等等,以便复制每个文件夹。只要我们的服务正在运行,这些计数器就需要保持(不需要在我们的服务/计算机重新启动时保持这一点)。
要纳入这些变化,我们正在讨论两种方法。
请注意 - 计数器需要跨越复制周期进行维护。
Approach1:对象重用
使复制的柜台部分,接收对象,并保持接收只要服务是活的复制对象活着。 现在对于线程,可以采取以下任何一种方法。
保持对象以及线程活着(线程进入睡眠状态)。现在在下一个复制周期中,对象和线程(唤醒线程)被重新使用。
允许线程退出,持续复制,接收对象。现在在下一个复制周期中;复制,接收对象重新创建线程或从线程池获取线程。
Approach2:封装
封装的计数器在一个单独的类。现在每当一个接收/复制对象被实例化用于复制一个文件夹。要么
- 传递计数器对象,更正。作为接收/复制对象构造函数的参数传递到该文件夹。
OR
- 接收/复制对象询问柜台对象科尔的文件夹管理器。
其中approach1 & approach2更好,为什么?