Мутные функции отложенной (ленивой) загрузки\инициализации
От: zelenprog  
Дата: 27.04.24 07:12
Оценка:
Добрый день!

Недавно перечитывал книгу Бертрана Мейера "Объектно-ориентированное конструирование программных систем".
Там все функции классов разделяются на три категории: "конструктор", "аксессор" и "модификатор".

А как же быть с функциями, которые выполняют отложенную\ленивую загрузку\инициализацию?

    get
    {
        if (_myWidget == null)
        {
            _myWidget = Widget.Load(_myWidgetID);
        }

        return _myWidget;
    }


Получается, что это "неправильные" функции?
И ими нельзя пользоваться?

Ведь действительно, когда смотришь на название такой функции, она вводит в заблуждение.
Может быть есть смысл разделить ее на две функции?

Типа так:
    prepare
    {
        if (_myWidget == null)
        {
            _myWidget = Widget.Load(_myWidgetID);
        }
    }
    get
    {
        return _myWidget;
    }


И в клиентском коде везде явно вызывать две функции при необходимости:
    object.prepare();
    object.get();


Хотя, так наверно тоже неправильно, потому что клиент и не должен ничего знать про "отложенную" инициализацию.

Как же быть?
Как лучше делать в таких случаях?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.