Показанные реализации отличаются тем, как они конструируют объекты и управляют ими.В первом примере новый репозиторий создается каждый раз, когда свойство вызывается на DataProvider
.Если в репозитории хранится какое-либо состояние (например, кеш выбранных объектов), вы получите совершенно другое поведение, чем во втором примере, потому что это состояние будет каждый раз сбрасываться в состояние по умолчанию.
Из того факта, чтовы сказали, что обе версии работают, я бы рискнул предположить, что объекты репозитория не содержат состояния и являются просто прокси для вызовов базы данных.В этом случае это, вероятно, не будет иметь большой разницы.
Однако , производительность и профиль памяти двух подходов очень различаются.В то время как преждевременная оптимизация - это плохая вещь и часто пустая трата времени, я бы не стал классифицировать это как таковой, потому что создание нового репозитория для каждого вызова свойства может, очевидно, быть проблемой производительности позже, или, что еще хуже, создавать трудные для отслеживания ошибки, если вы представитесостояние в хранилищах.Создание меньшего количества объектов в конечном итоге приведет к меньшим нагрузкам на сборщик мусора, но если вы не создадите миллионы объектов, это будет незначительной разницей.
Таким образом, второй пример - лучший пример для дальнейшего развития,и я не вижу никаких реальных проблем, учитывая это сейчас.