Есть ли термин для чрезмерного осложнения ООП?


18

Год или два назад я увидел отличную статью об ООП (Java), в которой рассказывалось о прогрессировании простого конкретного регистратора из двух или трех строк кода, а также о теоретическом чрезмерном мышлении неопытного разработчика, который в основном сказал: « О, я должен добавьте это на случай, если мы когда-нибудь захотим этого! К концу статьи этот простой регистратор стал гигантским мусором, который первоначальный разработчик едва мог понять сам ...

Есть ли общий термин для этого типа чрезмерного осложнения? Эта статья (которую я очень хотел бы найти снова) прекрасно показывает концепцию для единичного случая, но я натолкнулся на целые проекты, где разработчики фактически запрограммировали себя в узел, используя слишком много шаблонов, фреймворков, библиотек и другие вопросы. По-своему, это так же плохо (или даже хуже), чем старые приложения для спагетти VB6, которые мы наследуем для замены.

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


25
Да, это называется ООП.
садовник

Ответы:


28

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

На более общем уровне Джоэл Спольски дал дизайнерам, которые слишком усложняют архитектурные проекты, название « астронавты архитектуры ».

Однако, особенно для интервью, я думаю, что более важно знать, как называется противоположность, вкладывать в дизайн только те вещи, которые действительно необходимы, и забыть о нездоровом подходе «на всякий случай» - это называется принципом YAGNI .


Благодарю. Я большой сторонник YAGNI, не был уверен, есть ли общая противоположность.
jleach

Я хотел бы подчеркнуть, что ягни - это то, что действительно нужно сейчас. Вы все равно должны оставить все как есть, даже если известно, что это понадобится позже, пока это не нужно прямо сейчас.
Бент

7
@Bent Я хотел бы также подчеркнуть, что это не означает, что полностью игнорировать вещи / изменения, которые вы точно знаете, произойдут в ближайшей функции ... зная, как программное обеспечение будет расширяться после того, как может помочь вам написать код, который будет более легко рефакторинг по этим осям изменения.
Бакуриу

Я использовал термин «плохая инженерия», а не «чрезмерная инженерия». Я работал с людьми, которые любят добавлять всевозможные функции и расширения «на всякий случай», которые не имеют четких вариантов использования. Если вы не понимаете проблему, которую пытаетесь решить, это просто плохая инженерия.
Джош Джонсон

4

Да, сверхинжиниринг - самый простой термин для описания этого. Я видел сверхмощные, излишне сложные конструкции больше раз, чем помню за эти годы. Много лет назад, проходя курс Microsoft GWBasic, преподаватель неоднократно вбивал метод KISS (Keep it Simple Stupid). Сегодня это так же верно, как и тогда.

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

Итак, чтобы подвести итог, чтобы предотвратить чрезмерное усложнение кода:

1) ПОЦЕЛУЙ (Пусть это будет просто глупо)

2) Следуйте принципам SOLID с практической точки зрения.

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

4) Рассмотреть реализацию решений при их проектировании. Вы не можете просто сказать: «О, это детали реализации», и предположить, что ваш дизайн практичен. Раньше я работал с архитектором, который делал это часто, и, увы, его проекты никогда не работали, и в результате я больше там не работаю.

5) Код, как будто вы тот, кто собирается поддерживать его.


-3

Итак, у вас будет это собеседование, и вы намерены обмануть кандидата, чтобы он продемонстрировал то, что он знает о разработке программного обеспечения, а затем вы скажете: «Нет, вы, вероятно, хотите применить все, что вы знаете, в своем первом задании, иди дальше» Вы, позолоченный сверхинженерный создатель, не представляющий коммерческой ценности!

Я думаю, что было бы безопаснее представить конкретный пример и обсудить преимущества и недостатки применения определенных шаблонов. Чем вы будете запрашивать ответы типа «Зависит, хотите ли вы это быстро? Будет ли это все? Насколько сложна проблема? Какие шаблоны уже существуют?» и вы можете чему-то научиться сами. Это также позволило бы кандидату доказать свое чувство контекста, в то время как это было бы более открытым вопросом. Ожидание и получение конкретного ответа, в лучшем случае, вызовет у вас кого-то такого же серьезного беспокойства, как и у вас. Если вы не получите свой ответ, это может быть кандидат просто считает, что это просто.


4
Извините, но мне было просто интересно, есть ли термин для этого. Я не искал совета о том, как проводить собеседование (или чтобы мой вопрос каким-либо образом воспринимался относительно того, как я буду проводить собеседование). Спасибо за вашу заботу, хотя ...
Jleach

1
Ну, вы действительно написали последний абзац в своем вопросе, который трудно игнорировать, и довольно утверждение. Если вы не цените обратную связь по определенным частям вашего текста, вы можете захотеть быть более строгими в том, что вы записываете.
Мартин Маат
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.