Мы работаем над инструментом репликации, который периодически реплицирует разные папки с клиентского компьютера на серверный.
Когда необходимо реплицировать определенную папку, на стороне клиента создается реплицирующий объект (нашим сервисным модулем), который отправляет содержимое файлов, присутствующих в папке, по сети на сервер.На сервере создается соответствующий принимающий объект (наш сервисный модуль), который получает файлы.
Nutshell:
Абстракция на стороне клиента - объект репликации (работает в егособственный поток), чья ответственность заключается в отправке файлов.Серверная абстракция - получение объекта (работает в своем собственном потоке), ответственность за получение содержимого и создание / обновление файлов.
Теперь появилось дополнительное требование, когда нам нужны определенные счетчики, такие как общее количество отправленных байтов,общее количество полученных байтов, время последней репликации ... для каждой реплицируемой папки.Эти счетчики должны сохраняться до тех пор, пока наш сервис работает (нет необходимости сохранять это при перезагрузке нашего сервиса / машины).
Чтобы включить эти изменения, мы обсуждаем два подхода.
Обратите внимание - Счетчик необходимо поддерживать в течение циклов репликации.
Approach1 : повторное использование объекта
Сделать часть счетчиковрепликации, получение объектов и поддерживать объекты получения и репликации, пока служба жива.Теперь для потока можно использовать любой из следующих подходов:
Поддерживать живой объект и поток (поток переходит в спящий режим).Теперь во время следующего цикла репликации объект и поток (пробуждают поток) используются повторно.
Разрешить потоку выйти, сохранив реплицирующий, принимающий объект.Теперь во время следующего цикла тиражирования;репликация, получение объекта воссоздает поток или получает поток из пула потоков.
Approach2 : инкапсуляция
инкапсулирует счетчики вотдельный класс.Теперь каждый раз, когда создается / получает объект для репликации папки.Либо
- Передайте встречный объект, corr.в папку в качестве аргумента для конструктора получения / репликации объекта.
ИЛИ
- При получении / репликации объект запрашивает у диспетчера объект-счетчик, соответствующий папке.
Среди подходов1 и подход2 лучшеа почему?