Несмотря на то, что синглтон является антипаттерном - он незаменим в разработке.
Конкретно в этом случае, схема такая:
- в синглтоне хранится соединение с базой данных = DbConnection
- querybuilder создается новые объекты себя, но использует DbConnection
Придраться практически всегда можно к любому коду.
Однако хочу Вас похвалить за то, что используете xpath, а не парсите регулярками, как это делает немалое количество людей.