Что подразумевается под локальными и глобальными объектами в этой статье о внедрении зависимостей? - PullRequest
0 голосов
/ 09 ноября 2018

Что означают слова local и global в этой статье о внедрении зависимости?

Пожалуйста, смотрите цитату ниже:

Объекты данных, с другой стороны, создаются динамически, либо в ответ на взаимодействие с пользователем, вызов API, запланированные задачи и т. д. У них обычно короткая, локальная продолжительность жизни. Они несут и манипулировать данными, которые обрабатывает приложение. Они могут объединиться данные и поведение, или быть чистыми, «тонкими» структурами данных.

Важнейшим свойством графа сервис / модуль является то, что он создан статически. Только когда график услуг подключен, приложение обычно готов обслуживать запросы пользователей. Отсюда и сервис объекты / модули являются статическими и глобальными , а также обычно без гражданства.

1 Ответ

0 голосов
/ 10 ноября 2018

Автор различает объекты службы, составляющие приложение, от объектов данных, используемых в приложении. Сервисы являются глобальными, поскольку они обычно доступны (посредством внедрения) для всего приложения. Граф объектов таких сервисов создается при начальной загрузке вашего приложения с помощью DI. После создания этого графа объектов ваше приложение будет использовать одни и те же сервисы на протяжении всего приложения.

Объекты данных, с другой стороны, имеют локальную область видимости. Они создаются динамически по мере необходимости, используются, а затем удаляются.

Например, предполагается, что у вас есть UserRepositoryService и вы хотите зарегистрировать нового пользователя. UserRepsitoryService настраивается и внедряется во все ваше приложение (и, следовательно, глобально), но объект User создается динамически в ответ на запрос о создании нового пользователя. После завершения операции объект User может выпасть из области видимости и быть удаленным.

public class Application {
    private IRepository<User> _userRepo = null;

    // UserRepositoryService injected through DI here
    public Application(IRespository<User> userRepo) { _userRepo = userRepo; }

    ...
    public void CreateUser(String userId) {
        User newUser = new User(userId);  // Data Object Created
        _userRepo.Insert(newUser);                   
    } //  Data Object falls out of scope here
}

Это простой пример, но надеюсь, что это поможет.

...