Называя метод «делай X, если нужно»

23

Какой хороший способ назвать метод, который проверяет, нужно ли делать X, и делает ли он это в случае необходимости?

Например, как назвать метод, который обновляет список пользователей, если в систему вошли новые пользователи? UpdateListIfNeededкажется слишком длинным, в то время как просто UpdateListподразумевает, что каждый раз выполняется дорогая и ненужная операция. EnsureListUpdatedвариант тоже.

C # имеет bool TryXXX(args, out result)шаблон (например int.TryParse(str, out num)) , чтобы проверить , если X является возможно и сделать это, но это немного отличается.

dbkk
источник
1
Просто рекомендация, методы, подобные этому, будучи благонамеренными, следует создавать с осторожностью. По пути они, как правило, попадают в несвязанный код под видом «на всякий случай» или «добавление вызова к нему в X () исправило ошибку, но я не уверен, почему». Если у вас есть дисциплина, чтобы звонить только RefreshUserList()во время LoginUser()и LogoutUser(), а не во время, скажем GetUser()(где список должен быть уже обновлен), то обязательно примените приведенный ниже совет.
Кевин Маккормик

Ответы:

25

Я склонен использовать Ensure. Это означает, что нужно позаботиться о чем-то, однако это необходимо сделать. Если это уже хорошо, просто проверьте это, и мы сделали. В противном случае, сделай это. В любом случае, просто убедитесь, что это сделано .

Мейсон Уилер
источник
13

Мое предпочтение UpdateList. Если ничего не нужно делать, пусть будет так. Расходы всегда должны быть сведены к минимуму, поэтому, если UpdateListвы делаете больше, чем нужно, что-то не так в его реализации.

По сути, это глагол, который говорит вам, что метод должен делать. CalculateXвсегда должен пересчитывать X. GetYдолжен всегда возвращать Y, но выполнять работу по его извлечению только при необходимости. Аналогично, UpdateZзапрашивает обновление Z, предполагая, что это сделано наиболее эффективным способом.

Мэтт С
источник
2

Позвони мне, может быть"

Кооптировал из фрагментов Haskell, которые я видел, попробуйте

UpdateListMaybe();
Марк Канлас
источник
2
Полагаю, если бы я лучше понимал Хаскелл, это могло бы иметь больше смысла. Следствие: если это используется на языке, отличном от Haskell, его будут понимать только те, кто знает Haskell.
Роберт Харви
2
Шесть лет спустя, я другой программист, с немного большим знанием вещей Haskell. Я больше не поддерживаю этот ответ, хаха. Я предполагаю, что моя идея в то время состояла в том, чтобы использовать слово «возможно», чтобы показать, что функция обрабатывает какую-то опциональность. Я до сих пор иногда так делаю (например, Option [A] => B называется MaybeToB)
Марк Канлас