Mam wiele metod, które są powszechnie stosowane wszędzie. W tej chwili plik kodowy nosi nazwę globals, co oznacza, że są one… w rzeczywistości… globalne.
Nie podoba mi się to.
Chcę pogrupować je w klasę i przekazać interfejs. Zrobię tylko jeden przykład, ale nie wpadam tutaj w pułapkę singletona.
Po pierwsze, jak powinienem nazwać klasę. Chcę uniknąć nazwy globals, ponieważ obawiam się, że opiekunowie nie zrozumieliby złego pomysłu.
Ponadto, jak powinienem rozważyć podzielenie takiego zestawu metod, aby zachowanie mogło się zmienić i dostosować?
Zestaw metod zawiera rzeczy takie jak:
- Tabele przeliczeniowe
- Interakcja ze schowkiem
- Zarządzanie wbudowanymi czcionkami
- Typowe metody rysowania
- Zapewnienie interfejsu z dostępem do często używanych zasobów
Odpowiedzi:
Przestrzeń nazw może być
[application].Common.Shared
Klasy można nazwać:
Zerwałbym klasy, bo brzmi, jakby robili różne rzeczy.
źródło
Jeśli masz zamiar zrobić jedną instancję, właściwie masz singletona. Ponadto rzeczą, do której ludzie normalnie odnoszą się, jeśli mówią o pułapce singletonów, jest to, że singletony są globalne, a większość klas lepiej nie być globalna. Więc równie dobrze możesz mieć singletona. Jeśli potrafisz rozsądnie przekazać interfejs obiektom, które mogą chcieć go nazwać, to nie jest tak naprawdę globalny.
Ponadto umieszczenie tego wszystkiego w jednym pakiecie metod globalnych utrudnia zmianę zachowania i dostosowanie, ponieważ nie tylko każda zmiana jednej metody wymaga nowej podklasy, ale każda kombinacja zmian wymagałaby własnej podklasy.
Poleciłbym posiadanie singletonów dla każdego, który naprawdę jest globalny (wezmę słowo, że wszyscy są) i pewnego rodzaju rejestr lub fabryka, która daje instancję (co oznacza, że możesz wdrożyć jako singleton lub nie, ponieważ interfejs będzie nie składać obietnic). Nazwałbym ich na podstawie tego, co robią z perspektywy dzwoniącego.
źródło
Zwykle umieszczam tego typu rzeczy we własnych nazwach zespołów, takich jak „foo.Common”, w przestrzeniach nazw takich jak „foo.Common.Collections” lub „foo.common.UI” itd., A następnie mogę odwoływać się do zestawu w dowolnym projekcie Potrzebuję ich.
źródło