Jak byście nazwali metodę, która pobiera identyfikatory użytkowników mogących zrobić X? Coś w stylu GetIdsOfUsersThatCanDoX
byłoby ok? Mam problem z tym, kiedy użyć liczby pojedynczej a kiedy mnogiej. I w ogóle może można jakoś prościej nazwać tę metodę?
Niech serwis będzie miało w nazwie X a metoda niech nazywa się GetUsers
To pewnie zależy w jakiej klasie jest taka metoda.
Może w sumie za bardzo patrzę na nazwy metod pod kątem typów zwrotnych, ale metoda IEnumerable<int> GetUsers()
zwracająca idki jakoś mi dziwnie wygląda :/
A czy jest możliwe zastosowanie jakiejś konwencji? Czy w danej klasie, w danym module, w danym projekcie, w danym języku programowania/technologii są jakieś konwencje, co do których podejrzewałbyś, że mają zastosowanie do nazwy tej metody?
Wydaje mi się, że taka metoda narusza zasadę mówiącą, że funkcja powinna robić jedną konkretną rzecz. Tutaj mamy do czynienia z trzema czynnościami — wybraniem użytkowników według wzorca, implementacji konkretnego wzorca i pobrania ID użytkownika. Jak dla mnie, należy zacząć od metody selectUsers
, która pobiera funkcję testującą w parametrze; funkcja ta zwraca listę obiektów użytkownika, z których można pobrać ID. W pseudokodzie to będzie tak:
base.selectUsers(user -> user.canDo(x)).map(user -> user.getId());
Hmm, ale ze względów wydajnościowych chyba trzeba czasami tę zasadę SRP złamać. selectUsers(user -> user.canDo(x))
wygląda, jakbyśmy pobierali z bazy danych wszystkie encje i potem na każdej encji wywoływali metodę filtrującą. No chyba, że jakieś języki mają biblioteki umożliwiające translację czegoś takiego na SQL.
I wiem, że pobieranie samych idków zamiast pełnych encji często nie ma sensu, ale pytam o kwestie językowe :P
IEnumerable<UserId> findCertificateSigners(...)
findDocumentAuthors(...)
itp.
To, że to user, czy userid to możesz mieć w typie. Wiec nie trzeba powtarzać i podkreślać.
No własnie, wystarczy że zwrócisz np. Traversable<UserId> i będzie wiadomo że to id usera a nie User ;)
@nobody01: To już zależy od języka i stopnia optymalizacji, który chcesz zastosować. W Common Lispie masz makra, dzięki czemu możesz przetłumaczyć daną składnię na SQL w czasie kompilacji. W Javie, trzeba by chyba konstruować takie zapytania w czasie działania programu. Tylko kto używa Javy jeśli tak zależy mu na wydajności? Kto w ogóle potrzebuje takich optymalizacji w dzisiejszych czasach?
@nobody01:
nobody01 napisał(a):
Jak byście nazwali metodę, która pobiera identyfikatory użytkowników mogących zrobić X? Coś w stylu GetIdsOfUsersThatCanDoX
byłoby ok?
GetUsersWithXPriviledge albo GetUsersWithXAccess