Nazywanie metody „do X, jeśli to konieczne”

23

Jaki jest dobry sposób nazwania metody sprawdzającej, czy X musi zostać wykonane, i czy X to w razie potrzeby?

Na przykład, jak nazwać metodę aktualizującą listę użytkowników, jeśli zalogują się nowi użytkownicy? UpdateListIfNeededwydaje się zbyt długi, a prosty UpdateListoznacza, że ​​za każdym razem wykonywana jest prawdopodobnie droga i niepotrzebna operacja. EnsureListUpdatedjest również wariantem.

C # ma bool TryXXX(args, out result)wzorzec (np. int.TryParse(str, out num)), Aby sprawdzić, czy X jest możliwy i zrobić to, ale to jest nieco inne.

dbkk
źródło
1
Tylko punkt rekomendacji, takie metody, choć dobrze intencjonalne, powinny być tworzone ostrożnie. Po drodze mają tendencję do wbijania się w niepowiązany kod pod pozorem „na wszelki wypadek” lub „dodanie do niego wywołania w X () naprawiło błąd, ale nie jestem pewien dlaczego”. Jeśli masz dyscypliny tylko rozmowy RefreshUserList()w czasie LoginUser()i LogoutUser(), a nie w ciągu, powiedzmy GetUser()(gdzie lista powinna być na bieżąco już), a następnie przez wszystkich środków poniżej stosuje się rada.
Kevin McCormick

Odpowiedzi:

25

Zwykle używam Ensure. Ma to znaczenie upewnienia się, że coś zostało załatwione, jednak należy to zrobić. Jeśli jest już w porządku, po prostu sprawdź i gotowe. W przeciwnym razie zrób to. Tak czy inaczej, po prostu upewnij się, że zostanie to zrobione .

Mason Wheeler
źródło
13

Moje preferencje to UpdateList. Jeśli nic nie trzeba robić, niech tak będzie. Koszt i tak zawsze powinien być minimalizowany, więc jeśli UpdateListrobi się więcej niż to konieczne, coś jest nie tak z jego implementacją.

Zasadniczo jest to czasownik, który mówi ci, co powinna zrobić metoda. CalculateXpowinien zawsze ponownie obliczać X. GetYpowinien zawsze zwracać Y, ale wykonuj pracę tylko w razie potrzeby. Podobnie, UpdateZprosi o aktualizację Z, zakładając, że jest to wykonane w najbardziej wydajny sposób.

Matt S.
źródło
2

Nazywaj mnie „Może”

Co-opted z fragmentów Haskell, które widziałem, spróbuj

UpdateListMaybe();
Mark Canlas
źródło
2
Przypuszczam, że jeśli lepiej zrozumiałem Haskella, może to mieć większy sens. Następstwo: jeśli zostanie użyte w języku innym niż Haskell, będzie zrozumiałe tylko dla tych, którzy znają Haskell.
Robert Harvey
2
Sześć lat później jestem innym programistą z nieco większą wiedzą na temat Haskell. Nie popieram już tej odpowiedzi, haha. Myślę, że moim pomysłem w tym czasie było użycie słowa „może”, aby wskazać, że funkcja obsługuje pewną opcjonalność. Nadal robię to czasami (np. Opcja [A] => B nazywa możeTabB)
Mark Canlas