Wpis z mikrobloga

@sarveniusz: Mam pytanie nie koniecznie związane z samym tematem wpisu, ale bardziej z koncepcją jak powinna być rozwiązana jedna sprawa.
Przy prawidłowej drodze proponujesz wprowadzenie interfejsu AreaCalculableInterface. Tylko, że posiada on tylko jedną metodę do wyliczania powierzchni. Niby fajnie, że mamy interfejs, ale i tak każda klasa musi być sztukowana. Jak powinno zostać zrealizowane uniwersalne ustawianie wszystkich wartości związanych z wielkością figury?
@stash: Kolejna z zasad Interface segregation principle nakazuje tworzenie własnie takich sztukowanych interfejsów, zamiast jednego dużego, aby nie wystąpiła sytuacja, w której klasa implementuje interfejs, ale niektóre z metod są kompletnie nieużywane. W interfejsie powinny być tylko metody ściśle ze sobą powiązane.

Jak powinno zostać zrealizowane uniwersalne ustawianie wszystkich wartości związanych z wielkością figury?


Nie bardzo rozumiem o co pytasz. Do klasy abstrakcyjnej(bazowej) powinna być wydzielana tylko wspólna logika dla wszystkich
@sarveniusz: Pozwolisz, że jeszcze o coś dopytam.
Stosujesz "...". Nie wiem jak to nazwać w dokumentacji nie znalazłem nazwy dla tej konstrukcji. Na przykład w tym miejscu.

public function sum(AreaCalculabeInterface ...$shapes): float
Możesz powiedzieć dlaczego to jest dobre zastosowanie dla tej konstrukcji? W środku sprawdzasz i tak, czy każdy element dziedziczy po wybranym interfejsie to dlaczego nie wymuszać przekazywania tablicy?
Jak powinno zostać zrealizowane uniwersalne ustawianie wszystkich wartości związanych z wielkością figury?

Nie bardzo rozumiem o co pytasz. Do klasy abstrakcyjnej(bazowej) powinna być wydzielana tylko wspólna logika dla wszystkich pochodnych, a tutaj czegoś takiego raczej nie mamy.


@sarveniusz: Chodzi mi tutaj właśnie o rozwinięcie tego przykładu. Nie koniecznie przez stworzenie klasy abstrakcyjnej, ale może przez rozbudowę interfejsu? To może zadam inaczej pytanie. Jak powinno zostać zrealizowane zgodnie z zasadą open/close możliwość
@Kuzguwu: Pewnym sposobem, bardzo pokrętnym i oczywiście nie w pełni załatwiającym problem jest wprowadzenie narzędzi do tworzenia metryk kodu. Nawet jak kod nie będzie w pełni spełniał wszystkich dobrych praktyk to przynajmniej powinien być łatwiejszy do zrozumienia ponieważ nie będzie pozwalał tworzyć ogromnych konstrukcji.
@Kuzguwu: Bardzo dziwne jest dla mnie to o czym piszesz. Macie czas żeby dwie osoby robiły CR, ale brakuje czasu żeby robić wewnętrzne szkolenia, aby nie tworzyć lipnego kodu? Jak czytam Twój opis to jakby każdy dev sobie rzepkę skrobał bez jakiegoś większego pomyślunku w odniesieniu do całego zespołu.
@stash: Faktycznie sprawdzenie dodatkowo w ciele metody czy element z $shapes jest instancją AreaCalculabeInterface w tym wypadku jest zbędne. Co do operatora ...: http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

Chodzi mi tutaj właśnie o rozwinięcie tego przykładu. Nie koniecznie przez stworzenie klasy abstrakcyjnej, ale może przez rozbudowę interfejsu?


Możliwości rozbudowy interfejsu tutaj nie widzę, jedynie dodanie nowego, chyba, że widzisz tutaj coś powiązanego z obliczaniem pola?

Jak powinno zostać zrealizowane zgodnie z zasadą open/close możliwość
Zależy w jaki sposób chcemy tę zmianę rozmiaru zrealizować, bo jeśli to jest jakieś skalowanie to można zrobić interfejs. Jednak wiesz i tak w niektórych miejscach musisz użyć konkretnych klas, po to aby na przykład stworzyć odpowiednie obiekty, a jeśli dobrze rozumiem to chciałbyś zrobić uniwersalny interfejs do wszystkiego, a to się raczej nie uda :)


@sarveniusz: Tak jak piszesz chodzi mi o analogię do obliczania powierzchni żeby też tak łatwo
@Kuzguwu: Taki hint: Wymuście żeby sprint nie kończył się w piątek ani w poniedziałek. Niby każdy dzień tygodnia wygląda tak samo, ale taka prosta zmiana potrafi bardzo dużo pomóc w kwestii dowożenia oraz jakości samych rozwiązań.
@sarveniusz: zawsze mnie zastanawiało, co kieruje ludźmi z takimi nazwiskami, ze ich nie zmieniają, ale nigdy nie miałem okazji zapytać, bo osobiście nie spotkałem nikogo do dzis. Nie chcę Cię w żadnym razie obrazić, ale nie doświadczałeś przykrości w szkole czy w pracy? Nie chcesz zmienić nazwiska? Takie nazwisko musi wywoływać uśmiech czy to w kolejce w rejestracji do lekarza czy w urzędzie czy w szkole ( tu stawiam, ze najgorzej,