Я задаюсь вопросом, существует ли утвержденная практика в многопоточном приложении. Если я имею один ДАО на поток или просто делаю один ДАО ориентированным на многопотоковое исполнение одиночным элементом.
Это во многом зависит от используемого вами механизма доступа к данным. Если у вас очень масштабируемый доступ к данным, и много потоков, то использование той или иной формы потокового статического доступа к данным может быть выгодно.
Если у вас нет масштабируемого доступа к данным, ваш провайдер не поддерживает несколько потоков на процесс, или вам просто не нужна масштабируемость в этот момент, использование одноэлементного подхода с соответствующей синхронизацией проще и проще в реализации.
Для большинства приложений в деловом стиле я лично считаю, что одноэлементный подход проще в обслуживании и, возможно, лучше - если не по какой-либо другой причине, то гораздо проще эффективно протестировать его. Наличие нескольких потоков для доступа к данным, скорее всего, не потребуется, так как доступ к данным, скорее всего, не будет узким местом, влияющим на удобство использования (если вы проектируете правильно, и пакетные запросы соответственно)
.Используйте подход, который лучше всего подходит для архитектуры вашего приложения, если только:
1) Ваши объекты доступа к данным требуют больших затрат на создание, и в этом случае вы должны наклоняться к нитевидной безопасной одиночке.
2) Ваши объекты поддерживают мутирующее состояние, как в Active Record pattern. (Неизменяемое состояние конфигурации DAO, как и пороги таймаута, не учитывается.)
.