Какую библиотеку / фреймворк вы сочли слишком сложной для решения проблемы? [закрыто]

12

... и закодировали функционал "вручную"?

В качестве довольно метафорического примера, вам вряд ли понадобится библиотека для решения квадратных уравнений, хотя такие библиотеки существуют, и кто-то относится к ним серьезно.

В качестве более сомнительного случая, в зависимости от обстоятельств, я могу отказаться от jQuery (например, когда мне не нужно поддерживать некоторые браузеры каменного века): это упрощает некоторые вещи, но добавляет еще один уровень сложности и ненадежности в DOM. А чрезмерное использование jQuery приводит к абсурдным проблемам, таким как недавно обнаруженная на SO: как мне назначить пустой href aтегу с jQuery? Оказалось, что это был вопрос HTML, даже не JavaScript.

Еще один абсурдный случай, который для многих неочевиден, - это использование какого-либо шаблонизатора / языка, созданного поверх другой шаблонизирующей системы: PHP. Третий уровень шаблонизации?

И еще один: иногда просто выплевывать XML (образно) printfгораздо проще, чем делать это с каким-то чудовищным механизмом XML.

Есть ли другие случаи из вашего опыта?

mojuba
источник
4
Как и любой другой инструмент, вы используете jQuery там, где это уместно. Вы не используете молоток и зубило, чтобы открыть входную дверь, если у вас есть ключ.
Роберт Харви
1
@ Роберт Харви: конечно, но при разработке программного обеспечения у нас часто возникают проблемы с распознаванием ключей и молотков. Вот о чем этот пост.
Моджуба
Имейте в виду, что независимо от того, насколько сложна популярная библиотека, для других людей ее легче понять, чем для вашей "простой" библиотеки, потому что они к ней привыкли.
Луи Коттманн
@ Роберт, Харви, твоя дверь должна быть в гораздо лучшей форме, чем моя.
Джимми Хоффа

Ответы:

14

Большая часть корпоративной библиотеки MS и большинство сторонних элементов управления .net оставили меня с этим чувством после некоторого использования.

Ваш пробег может отличаться

Билл
источник
2
Согласовано - большая часть библиотеки Enterprise сбивает с толку или не является интуитивно понятной, с парадом сторонних библиотек, которые работают лучше. Но, конечно, если вы ударите Microsoft по названию, это должно быть "наилучшей практикой"
Watson
в первые дни entlib делал некоторые вещи, которые было довольно сложно сделать или выяснить с ранними фреймворками ... в наши дни это, по-видимому, в основном обратная совместимость с ранними днями или частично запеченными решениями, которые вы увидите в будущих выпусках во многих лучшая форма.
Билл
13

Windows Communication Foundation

Тот факт, что на домашней странице есть изображение швейцарского армейского ножа, подводит итог для меня. Представьте себе, что конфигурация XML примерно в четыре раза длиннее реального кода, который вы пишете, и все еще очень трудно писать SOAP-сервисы, которые могут взаимодействовать между C #, Java, PHP, Python и всеми теми другими языками, которые «предполагалось» быть совместимым с ...

Во всех будущих проектах я просто буду придерживаться REST.

Дин Хардинг
источник
2
WCF 4.0 вообще не требует файла конфигурации XML. У меня нет опыта взаимодействия с другими технологиями (кроме использования WCF в качестве клиента, который работает хорошо), но я могу сказать, что нашел его простым и интуитивно понятным. Несмотря на то, что я начал использовать его, не читая каких-либо книг и не проходя каких-либо тренировок (и с соблюдением сроков), я смог взяться за дело.
Аллон Гуралнек
4
Я переименовал «WCF» в «WTF».
MetalMikester
1
@Allon: я признаю, что я не пробовал WCF 4.0, вполне возможно, что они сделали значительные улучшения в этой области ...
Дин Хардинг
12

Одна из проблем, с которыми я сталкивался, когда люди «крутят свои собственные», заключается в том, что, хотя их подход зачастую быстрее и проще, он также более вероятен хрупок, имеет ошибки, неполон и / или содержит недостатки безопасности. ,

Простой пример: использование printf для вывода XML может быть в 10 раз проще, чем использование библиотеки:

printf("<xml>%s</xml>", str);

но вы помните, чтобы избежать специальных символов в str? Например ' <' и ' &'? Некоторые люди могут сказать «нет, я не сделал» и продолжить писать это:

printf("<xml><![CDATA[%s]]></xml>", str);

Но он все равно будет испускать битый XML, если в нем strесть подстрока " ]]>". Крайний случай - конечно. Но все же действительный сценарий, который может привести к неожиданным проблемам с серьезными последствиями.

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

Майк Кларк
источник
11

Log4Net

Библиотека хорошая, но документация ужасная. То, что я хотел сделать, было излишним.

Я использовал Trace вместо.

Роберт Харви
источник
1
Роберт, ты меня тоже побил, это негодяй! Я просто смотрю на log4net и думаю: «Ух ты, эти слушатели классные. Теперь, как мне это использовать?» и тогда я думаю, что к тому времени, когда я это выяснил, я мог бы написать свой собственный.
JohnL
5
На самом деле - я должен был бы уважительно не согласиться - это не становится проще, чем log.error ().
Уотсон
3
@ Уотсон: Если это действительно так просто, зачем вам нужна структура?
Роберт Харви
Я использую альтернативу Object Guy, которая занимает минуты, чтобы сконфигурироваться, будучи оттолкнутой ненужной сложностью Log4Net.
cjmUK
7

SharePoint

Не поймите меня неправильно, SharePoint - это круто, если вам нужно большинство вещей, с которыми он поставляется (и это идет с большим количеством!), Но если вы не знаете, что делаете, или вам это нужно только один или два Вещи, это МАССИВНО не стоит усилий и комплектации.

Райан Хейс
источник
6

ASP.NET WebForms - Хотя, как веб-разработчик .NET, это было моим трудом в течение длительного времени, так как я начал использовать инфраструктуру MVC (и из среды PHP / Smarty Template) - вы понимаете, что иногда есть только лучшие способы сделать веб-разработку и абстракция, которую он использует, излишни и неплотны .

Уотсон
источник
Я думаю, что вы имеете в виду ASP.NET WebForms, в отличие от ASP.NET MVC. Верный?
Эрик Кинг,
@Eric - да, правильно, я должен это исправить!
Уотсон
3

Почти во всех случаях, когда я делал это, я сожалел об этом:

  • Использование функций PHP oci_ * вместо библиотеки-обёртки оказалось плохим решением из-за удобства сопровождения кода. Портирование всего кода на Zend_Db значительно упростило разработку поддержки кода базы данных.
  • Мой собственный компонент сетки ajax, который занимал слишком много времени для дальнейшего развития, учитывая, как быстро развиваются некоторые другие компоненты сетки. В настоящее время я портирую все это на сетку Ext JS, потому что с ней доступно огромное количество сторонних функций.
  • Отказ от библиотек, таких как prototype и jquery, приводил к повторным появлениям кросс-браузерных проблем, которые зачастую трудно отследить. Порт Ext JS решил мои межбраузерные проблемы. Это волшебство, даже если это обширная структура, на понимание которой у меня ушли недели.

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

Джори Себрехтс
источник
+1. И это помогает, если эти библиотеки с открытым исходным кодом. Загрузите исходный код во все библиотеки, которые вы используете, если вы еще этого не сделали. Чтение исходного кода библиотеки - отличный способ диагностировать и исправлять проблемы, а также возможность учиться у кода других программистов (предположительно довольно высокого качества).
Майк Кларк
2

System.Text.RegularExpressions

Regex такой сложный и такой медленный. Я очень редко использую Regex и обычно пишу свой собственный анализ текста и сопоставление.

Иногда я нахожу Regex полезным для действительно сложного соответствия.

Крис Персикетти
источник
Вы правильно компилируете регулярное выражение [или, может быть, System.Text.RegularExpressions работает медленнее, чем Perl & co. реализация]?
Maciej Piechotka
3
Regex может быть относительно медленным по сравнению с ручным разбором строк, но это быстрее, чем думают многие, и обычно более чем достаточно для большинства практических приложений.
Майк Кларк
2
Я не думаю, что это на самом деле жалоба на реализацию .NET, в частности, поскольку в этом нет ничего особенно сложного или медленного (на самом деле, я считаю, что это одна из самых быстрых доступных реализаций). По крайней мере, это был мой опыт. Конечно, регулярные выражения в целом легко становятся сложными, и люди, безусловно, склонны использовать их в совершенно неподходящих местах.
Дин Хардинг
2

Не то чтобы Delphi4PHP нуждался в плохой прессе, но я попробовал это (версия 2.0), и мне было очень трудно согнуть его. Я хотел использовать его для создания веб-приложения в стиле youtube, чтобы клиенты могли просматривать обучающие видео, но оно было слишком громоздким, и когда я попытался объединить фреймворки PHP (VCL4PHP, Zend, Smarty и Recess), я столкнулся с неизбежным переименованием. все, потому что в PHP 5 нет пространства имен.

Это, как говорится, я не катил свои собственные в конце. Я использовал только что извлеченные из своих ошибок и решил сделать это очень простым и использовать CodeIgniter и FlowPlayer (с JQuery).

У меня есть желание, что независимо от того, какие фреймворки делают из PHP 5 живым, PHP 6 будет иметь несколько потрясающих фреймворков, которые на самом деле могли бы хорошо играть вместе.

Питер Тернер
источник
2

Weka

Я много занимаюсь машинным обучением, и если мне когда-нибудь понадобится что-то простое, например, Наивный Байес или логистическая регрессия, я люблю бросать Веку. Он имеет хорошие реализации некоторых довольно сложных алгоритмов машинного обучения, но API является жестким, чрезмерно разработанным, чрезмерно объектно-ориентированным Java-интерфейсом старой школы (pre-generics). Вещи, которые раздражают меня об этом:

  1. Он катит свой собственный массив с изменяемыми размерами, который больше не использует, гарантируя занятую работу, конвертируя туда и обратно.

  2. Множество последовательных связей, где методы должны вызываться в определенном порядке, и если вы действительно не будете внимательно относиться к RTFM, вы не сможете это реализовать.

  3. Каждый экземпляр должен быть объектом Instance, и я должен явно объявить с объектом Attribute, будь то номинальный или числовой. Это приводит к большому количеству занятой работы по преобразованию данных в форму, которую хочет Weka. Это особенно раздражает, так как Weka API генерирует так много исключений, что компиляция кода не означает, что он все равно будет работать. Если бы я разрабатывал API, я был бы либерален в том, что я принимал (может быть, просто взял массив Object) и просто анализировал данные, чтобы выяснить, что я получил и что с этим делать правильно.

dsimcha
источник
2

На конкретный проект я отказался от EJB3. Это дало мне внедрение зависимостей и обработку транзакций, управляемых контейнером. Но он вводит огромные зависимости (например, JBoss) и делает систему трудной для написания автоматических тестов. Теперь я сократил это до внедрения зависимостей в конструктор JPA +.

Конор
источник
1

Выкладывание HTML на порт отладки в приложении. Мне нужен был простой способ получить текущие данные (с автоматическим обновлением). Вытащить библиотеку для форматирования было бы хорошо, но было проще просто распечатать ее.

Я также отказался от библиотеки для другого: мы используем большую, сложную библиотеку XML в большинстве наших вещей. Потратив 4 часа один день на то, чтобы заставить его работать в новом приложении, я просто сказал «упаковай вещи» и взял TinyXML. Это далеко не так мощно, но требуется гораздо меньше усилий, чтобы сделать простые вещи.

Майкл Кон
источник
1

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

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

И компоненты базы данных Delphi. Я ненавижу их. Всегда есть. Поэтому я создал свой собственный интерфейс базы данных, который работает так, как я хочу, чтобы он работал (и точно так же, как тот, который я сделал для PHP, облегчая кодирование на разных языках).

По сути, когда мне дают возможность, я обычно делаю свою собственную библиотеку.

GrandmasterB
источник
Я знаю, что Вы имеете ввиду. Я могу показать вам целый арсенал домашнего STL, абстракции БД, целых языков с их компиляторами или интерпретаторами, а что нет. Это обычно не приветствуется вашими коллегами и руководством, но какой программист никогда не писал компилятор, даже если никто не заботился об этом?
Моджуба
0

Ооо, так много. Я работал над несколькими гибкими проектами с использованием API с открытым исходным кодом. Здорово, когда они работают, но часто мы страдаем от фетиша разработчиков за то, что они вводят все виды сторонних API, некоторые неясны, некоторые нет, просто потому, что они хотят использовать в них один или два класса. Конечный результат - смесь кода и взломанных систем. Они передают его, утверждая, что это лучший код за всю историю, уходят, а плохие слюни, взявшие его, обнаруживают непонятный, недокументированный беспорядок, полный проблем с зависимостями и хаков.

drekka
источник