Czy rozkład funkcjonalny jest naprawdę antypatternem?

9

Kiedy czytałem Najgorsze anty-wzory, na które się natknąłeś , kliknąłem link w tym poście, aby wylądować na stronie internetowej o anty-wzorach.

I http://sourcemaking.com/antipatterns/functional-decomposition mnie zastanawiał.

Jak zły jest ten anty-wzór i czy w ogóle jest to anty-wzór? Ponieważ, chociaż w dzisiejszych czasach zajmuję się głównie programowaniem OOP, nadal czuję niechęć do czysto wszystkich języków OOP, takich jak Java, a także do praktyk projektowych, które przynoszą. I wydaje mi się, że nadal mam pewne cechy programowania funkcjonalnego podczas pisania kodu.

I to nasuwało pytanie: czy robię źle, pozostając przy stylu OOP + Functional, czy też jest to powszechne w branży i wcale nie jest takie złe.

Z doświadczenia wiem, że styl OOP + Functional nie jest w pełni kompatybilny z programistami OOP +. Ale jednocześnie, podczas gdy programiści OOP mają problemy z opracowaniem OOP + Functional, kontrargumentem jest to, że rozwiązania OOP są często nadmiernie zaprojektowane i zbyt trudne w użyciu, a z mojego doświadczenia nie były ani trochę łatwiejsze, a właściwie wprowadzono pewne martwe punkty dla BARDZO poważnych błędów do ukrycia.

Mimo że rozmawiałem z kolegami na te tematy, doszedłem do wniosku, że żaden ze sposobów nie jest w rzeczywistości idealny. I wciąż mam pytanie bez odpowiedzi.

Problem OOP został również wzmocniony przez link z innego postu w tym samym wątku. Link wygląda na OOP w stylu Java http://chaosinmotion.com/blog/?p=622

Jakie jest zatem ogólne podejście do mieszania programowania funkcjonalnego z OOP? A jaką równowagę powinien osiągnąć programista?

Koder
źródło
1
Twój tytuł i ciało pytań zadają kilka powiązanych, ale całkowicie różnych pytań, z których niektóre brzmią retorycznie. Mam problem z ustaleniem, o co dokładnie tu pytasz.
blueberryfields,
Przepraszam, nie jestem ojczystym językiem i ciężko mi myśleć o lepszym tytule. Poprawki są mile widziane.
Koder,
1
Pytanie jest jasne. Nie słuchaj blueberryfields.
jojo
5
Oczywiście dla fanatyków OOP wszystko, co jest poza zasięgiem OOP, jest „antypatternem”. W rzeczywistości najgorszym możliwym antypatternem jest poważne nadużywanie samego OOP.
SK-logic

Odpowiedzi:

8

Po pierwsze, funkcjonalne programowanie jest obecnie tym, co robią wszystkie fajne dzieciaki. Anti-Pattern naprawdę mówił o programowaniu proceduralnym (byłoby bardziej zrozumiałe, gdyby technika nazywała się „rozkładem proceduralnym”, ale tak nie jest), i myślę, że ty też.

Anty-wzorzec mówił o złych sposobach pisania kodu proceduralnego w języku zorientowanym obiektowo, druga strona mówiła o złym mówieniu o pisaniu w Javie - tak naprawdę nie ma języka tak fantastycznego, że możesz zrobić wszystko, co chcesz, ale nie możesz napisz zły kod.

W praktyce widziałem trochę więcej inżynierii w kodzie obiektowym niż procedury - nieco mniej w inżynierii, a trochę więcej w inżynierii.

W twoim przypadku będzie to zależeć od szczegółów i nie jestem pewien, co faktycznie robisz w stylu proceduralnym. Czy to jest poprawne, jasne, testowalne, łatwe do modyfikacji itp.? Kryteria oceny kodu powinny opierać się na takich praktycznych kwestiach, a nie na czystości jednego określonego stylu. Wygląda na to, że w twoim przypadku rozsądni i kompetentni ludzie mogą nie zgodzić się (i nie!) Co do tych obaw, a jeśli tak, to prawdopodobnie nie ma obiektywnego sposobu na ustalenie prawdziwości sprawy.

psr
źródło
2
Twoja odpowiedź zaczęła się dobrze, ale potem stałeś się niejasny i niezobowiązujący. Przeczytałem artykuł, że OP łączy się z rozkładem funkcjonalnym i jest to okropny antypattern, praktykowany przez programistów proceduralnych, próbujących zmienić swój styl programowania w paradygmat zorientowany obiektowo. Więc nie, to nie zależy od specyfiki.
Robert Harvey,
ale nie sądzę, że Coder uważa, że ​​anty-wzór jest tym, co zrobił osobiście (ani nie mam szczególnego powodu, aby w to wątpić). Jego pytanie (jedno z nich tak naprawdę) dotyczyło tego, czy programowanie w stylu proceduralnym może być OK w języku obiektowym (prawdopodobnie bardziej jak w statycznej funkcji Java pokazanej na blogu Java). I to zależy od specyfiki tego, co napisał. (Przedmowa zrobiłem z „W twoim przypadku”). Myślę, że czytasz pytanie w zasadzie: „Czy powinienem programować jak w anty-wzorcu?”, Co oczywiście byłoby złe - ale myślę, że Coder to wie.
psr
4
Nawet w ten sposób - rozkład proceduralny jest prawidłową techniką, a odrzucenie go jako niezgodnego z OOP jest czystym fanatyzmem. Niech wszystkie kwiaty kwitną. Wszystkie techniki są ważne, jeśli są mądrze stosowane. Trzymanie się jednej konkretnej metodologii wcale nie jest mądre.
SK-logic