Gdzie umieścić wspólne wspólne metody

9

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
Lee Louviere
źródło
Czy są to czyste metody Util, które nie zapisują stanu, czy zapisują stan?
TheLQ,
+1 za nie wpadnięcie w pułapkę singletona.
Caleb,
@TheLQ Niekoniecznie będą zapisywać stan, ale dla wygody będą przechowywać stałe dane (takie jak wykresy konwersji).
Lee Louviere,

Odpowiedzi:

4

Przestrzeń nazw może być [application].Common.Shared

Klasy można nazwać:

ConversionLookup
ClipboardCommunication
FontManager
DrawingUtility

Zerwałbym klasy, bo brzmi, jakby robili różne rzeczy.

Jon Raynor
źródło
1

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.

psr
źródło
1

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.

Muad'Dib
źródło