Добрый день!
Недавно перечитывал книгу Бертрана Мейера "Объектно-ориентированное конструирование программных систем".
Там все функции классов разделяются на три категории: "конструктор", "аксессор" и "модификатор".
А как же быть с функциями, которые выполняют отложенную\ленивую загрузку\инициализацию?
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();
Хотя, так наверно тоже неправильно, потому что клиент и не должен ничего знать про "отложенную" инициализацию.
Как же быть?
Как лучше делать в таких случаях?