Вот общий шаблон:
class Foo {
private Bar _bar;
//here, Foo has a Bar object. If that object has already been instantiated, return that value. Otherwise, get it from the database.
public Bar bar {
set { _bar = value;}
get {
if (_bar == null) {
_bar = Bar.find_by_foo_name(this._name);
}
return _bar;
}
}
}
Короче говоря, это позволяет нам получить доступ к объекту Bar в нашем экземпляре Foo. Эта инкапсуляция означает, что нам не нужно беспокоиться о том, как извлекается Bar, или если foo.bar уже был создан. Мы можем просто использовать объект и позволить внутренностям класса Foo позаботиться об этом.