Имя функции для создания чего-то, если это еще не там

Я полагаю, что Вы представляете ложную дихотомию. Это не эти только две опции.

я согласовываю с г-ном D4V360, кто предложил, чтобы, даже при том, что Вы используете тег привязки, у Вас действительно не было привязки здесь. Все, что Вы имеете, является специальным разделом документа, который должен вести себя немного отличающийся. <span> тег является намного более соответствующим.

5
задан foraidt 6 August 2009 в 11:47
поделиться

11 ответов

Как насчет GetOrCreate ()

18
ответ дан 18 December 2019 в 05:15
поделиться

Серьезно:

issetFoo();

Писать:

AreWeThereYetFoo(); helloFoo(); booFoo();
-4
ответ дан 18 December 2019 в 05:15
поделиться

Я называю их RequireFoo () .

1
ответ дан 18 December 2019 в 05:15
поделиться

В моем классе Foo я бы имел GetExistingOrNew (идентификатор Guid) Это вернет существующий Foo, если он существует, или возвратит New Foo.

0
ответ дан 18 December 2019 в 05:15
поделиться

Если ясно, что будет существовать только один объект Foo, я бы назвал его CreateFoo (), потому что можно ожидать, что несколько вызовов создадут объект только один раз.

Если у вас есть возвращая значение, я бы просто назвал его GetFoo (), потому что ленивая загрузка (вероятно) является деталью реализации и, как таковая, не должна быть очевидна в интерфейсе.

Если можно создать несколько объектов Foo, и их не возвращают, значит, я не уверен. Поначалу ситуация выглядит довольно странно.

1
ответ дан 18 December 2019 в 05:15
поделиться

Почему бы и нет:

private FooType m_foo;

public FooType Foo
{
   get
   {
      if (this.m_foo == null)
      {
         this.m_foo = new Foo();
      }
      return this.m_foo;
   }
   set
   {
      this.m_foo = value;
   }
}
3
ответ дан 18 December 2019 в 05:15
поделиться

Итак, вы хотите быть творцом, верно? тогда ...

LetThereBeFoo();

хе-хе-хе

, чтобы проверить, существует ли он

IsThereFoo();
3
ответ дан 18 December 2019 в 05:15
поделиться

Это обычно известно как ленивое создание . Как насчет LazyGetFoo ()?

3
ответ дан 18 December 2019 в 05:15
поделиться

Я бы выбрал EnsureFoo () .

6
ответ дан 18 December 2019 в 05:15
поделиться

ОБНОВЛЕНИЕ

В наши дни я знаю лучше, поэтому применил бы разделение командных запросов (CQS). CQS говорит, что метод должен либо изменять состояние, , либо возвращать результат, но не оба одновременно.

В результате мой текущий стандарт:

Foo GetFoo(id); // Throws if Foo cannot be found for id
Foo FindFoo(id); // Returns null if the Foo cannot be found.
void CreateFoo(id[, args]); // Creates a Foo with supplied args.

OLD POST - IGNORE

Часто я использую этот стандарт:

GetFoo(); // Always returns a Foo, so creates if there isn't one already.
FindFoo(); // Returns null if the Foo cannot be found.

Особенно полезно при доступе к данным, когда вы загружаете сотрудника или что-то на основе ключа, и он может существовать, а может и не существовать.

Чтобы быть конкретным, это задокументировано стандарт кодирования. Каждый, кто работает с кодовой базой, знает этот стандарт и реализует его одинаково. Вот как мы можем обойтись этими красивыми короткими именами, которые носят довольно общий характер.

13
ответ дан 18 December 2019 в 05:15
поделиться

Я думаю, что достаточно CreateFoo (). В документации должно быть указано, что функция делает в разных сценариях. Посмотрите на некоторые из API файлового ввода-вывода, например CreateFile (...) из Win32 API. На основе параметра он создаст новый файл или откроет существующий, если он существует. Ваш не обязательно должен быть основан на параметрах, но его поведение может отличаться в зависимости от состояния программы. По сути, я думаю, что ваше могло бы быть в том же духе.

2
ответ дан 18 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: