Я просто очень быстро прочитал статью.Он объясняет Шаблон Репозитория.Это помогает инкапсулировать детали реализации реального используемого хранилища.Таким образом, вы можете поменять базовые репозитории без изменения вашего клиентского кода.Базовые детали инкапсулированы в классе Specification
.Вы должны явно передать реализацию этого базового класса в хранилище, например, в метод 'query'.Это тот момент, когда вы, клиент, должны решить, какой репозиторий использовать (или запросить), создав соответствующий экземпляр.
Если у вас есть несколько реализаций, использующих одно и то же имя, они должны находиться в другом пространстве имен, чтобы избежать двусмысленности.Вы правы, если предположите, что компилятор не может разрешить эти конфликтующие ссылки.Обычно вы должны полностью определить тип (например, instantiation, cast): 'new Sql.NewestNewsesSpecification ()' или использовать директиву компилятора 'using' или 'import', чтобы объявить соответствующее пространство имен, чтобы можно было использовать краткую форму: 'newewestNewsesSpecification () '.В статье предполагается, что вы включаете либо пространство имен «Sql», либо пространство имен «Realm».Основная идея заключалась в том, чтобы показать, какие части кода будут меняться при замене основного репозитория (контекста).Если вы включаете оба пространства имен одновременно, вы можете указать псевдоним для одной из реализаций или использовать полностью определенные ссылки, чтобы ссылки больше не были неоднозначными.