Obecnie myślę o interfejsie do klasy, którą piszę. Ta klasa zawiera style dla znaku, na przykład czy znak jest pogrubiony, pochylony, podkreślony itp. Przez dwa dni debatowałem ze sobą, czy powinienem używać metod pobierających / ustawiających lub nazw logicznych dla metod, które zmieniają wartości na te style. Chociaż wolę nazwy logiczne, oznacza to pisanie kodu, który nie jest tak wydajny i nie tak logiczny. Dam ci przykład.
Mam klasy CharacterStyles
, która ma zmienne składowe bold
, italic
, underline
(i kilka innych, ale zostawię je zachować to proste). Najprostszym sposobem, aby umożliwić innym częściom programu dostęp do tych zmiennych, byłoby napisanie metod pobierających / ustawiających, abyś mógł to zrobić styles.setBold(true)
i styles.setItalic(false)
.
Ale mi się to nie podoba. Nie tylko dlatego, że wiele osób twierdzi, że osoby pobierające / ustawiające przerywają enkapsulację (czy to naprawdę tak źle?), Ale przede wszystkim dlatego, że nie wydaje mi się to logiczne. Spodziewam się stylizować znak za pomocą jednej metody styles.format("bold", true)
lub czegoś podobnego, ale nie za pomocą wszystkich tych metod.
Jest jednak jeden problem. Ponieważ nie możesz uzyskać dostępu do zmiennej elementu obiektu przez zawartość łańcucha w C ++, musiałbym albo napisać duży kontener if-instrukcja / switch dla wszystkich stylów, albo musiałbym przechowywać style w tablicy asocjacyjnej ( mapa).
Nie mogę ustalić, jaki jest najlepszy sposób. W jednej chwili myślę, że powinienem napisać getters / setters, a za chwilę pochylam się w drugą stronę. Moje pytanie brzmi: co byś zrobił? A dlaczego miałbyś to zrobić?
bold
ustawionym na, true
a inne zmienne są niezdefiniowane, metody pobierające dla innych zmiennych powinny zwracać wartość stylu nadrzędnego (który jest przechowywany w innej właściwości), podczas gdy moduł pobierający dla bold
właściwości powinien zwracać true
. Istnieją również inne rzeczy, takie jak nazwa i sposób wyświetlania jej w interfejsie.