Является ли функциональная декомпозиция действительно антипаттерном?

9

Пока я читал «Наихудшие анти-паттерны, с которыми вы столкнулись» , я щелкнул ссылку в этом посте, чтобы попасть на веб-сайт об анти-шаблонах.

И страница http://sourcemaking.com/antipatterns/functional-decomposition заставила меня задуматься.

Насколько плох этот анти-паттерн, и вообще ли он анти-паттерн? Потому что, хотя в настоящее время я занимаюсь в основном ООП-программированием, я все еще чувствую нежелание использовать чистые языки ООП-всего, такие как Java, а также методы проектирования, которые они приносят. И я думаю, у меня все еще есть некоторые черты функционального программирования, пока я пишу код.

И это подняло вопрос, я делаю неправильно, придерживаясь функционального стиля ООП +, или это распространено в промышленности и на самом деле не так уж плохо.

Из опыта я знаю, что функциональный стиль ООП + не полностью совместим с чистыми разработчиками ООП. Но в то же время, хотя у разработчиков ООП есть проблемы с функциональной разработкой ООП +, контраргумент состоит в том, что решения ООП довольно часто чрезмерно спроектированы и слишком сложны в использовании, и, по моему опыту, даже не были немного проще, и на самом деле Введены некоторые слепые зоны для ОЧЕНЬ серьезных ошибок, чтобы скрыть.

Поэтому, хотя я и обсуждал эти темы со своим коллегой, я пришел к выводу, что ни один из способов не является идеальным. И у меня все еще есть вопрос без ответа.

Проблема ООП была также подкреплена ссылкой из другого поста в той же теме. Ссылка смотрит на ООП в стиле Java http://chaosinmotion.com/blog/?p=622

Так каково общее отношение к смешиванию функционального программирования с ООП? И какого баланса разработчик должен стремиться достичь?

кодировщик
источник
1
Ваше название и тело вопроса задают несколько связанных, но совершенно разных вопросов, некоторые из которых звучат риторически. У меня проблемы с выяснением, что именно вы здесь спрашиваете.
черничные
Извините, я не являюсь носителем языка, и мне трудно думать о лучшем названии. Исправления приветствуются.
Кодер
1
Вопрос понятен. Не слушай черничных полей.
Jojo
5
Понятно, что для фанатов ООП все, чего не может достичь ООП, является «антипаттерном». На самом деле, худший из возможных антипаттернов - это чрезмерное злоупотребление самой ООП.
SK-logic

Ответы:

8

Прежде всего, функциональное программирование - это то, чем занимаются все классные ребята. Анти-Паттерн действительно говорил о процедурном программировании (было бы более понятно, если бы техника называлась «процедурная декомпозиция», но это не так), и я думаю, что вы тоже.

Анти-паттерн говорил о плохих способах написания процедурного кода на объектно-ориентированном языке, на другой странице говорилось о плохом написании Java - на самом деле нет такого фантастического языка, чтобы вы могли делать все, что хотите, но не можете написать плохой код.

На практике я видел немного больше инженерии в объектно-ориентированном коде, чем процедурный - немного меньше в разработке и немного больше в разработке.

В вашем случае это будет зависеть от специфики, и я не уверен, что вы на самом деле делаете в процедурном стиле. Это правильно, понятно, тестируемо, легко модифицируется и т. Д.? Критерии оценки кода должны основываться на таких практических соображениях, а не на чистоте одного конкретного стиля. Похоже, что в вашем случае разумные и знающие люди могут не соглашаться (и не соглашаться!) С этими проблемами, и если это так, то, вероятно, нет объективного способа определить правду вопроса.

PSR
источник
2
Ваш ответ начался хорошо, но затем вы стали расплывчатыми и не обязательными. Я прочитал статью о том, что ОП связана с функциональной декомпозицией, и это ужасный антипаттерн, практикуемый процедурными разработчиками, пытающимися внедрить свой стиль программирования в объектно-ориентированную парадигму. Так что нет, это не зависит от специфики.
Роберт Харви
но я не думаю, что Кодер считает, что анти-паттерн - это то, что он сделал лично (и у меня нет особых причин сомневаться в нем). Его вопрос (один из них, на самом деле) заключался в том, может ли процедурное программирование стиля быть в порядке на объектном языке (вероятно, больше похоже на статическую функцию Java, показанную в блоге Java rant). И это зависит от специфики того, что он закодировал. (Я сделал предисловие с «В вашем случае»). Я думаю, что вы читаете вопрос в основном как «Должен ли я программировать как в анти-паттерне?», Что явно было бы плохо, но я думаю, что Кодер знает это.
PSR
4
Даже так: процедурная декомпозиция является допустимой техникой, и отвергать ее как не очень совместимую с ООП - это чистый фанатизм. Пусть расцветают все цветы. Все методы действительны, если используются с умом. Придерживаться одной конкретной методологии совсем не разумно.
SK-logic