З якою бібліотекою / рамкою ви вирішили проблему, яку вона вирішує? [зачинено]


12

... і кодували функціональність "вручну"?

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

Як більш сумнівний випадок, залежно від обставин, я можу скинути jQuery (наприклад, коли мені не потрібно підтримувати деякі браузери кам'яного віку): він спрощує деякі речі, але додає DOM ще один рівень складності та ненадійності. І надмірне використання jQuery призводить до абсурдних проблем, таких як недавній раз на SO: як призначити порожній href aтегу з jQuery? Виявилося, це питання HTML, навіть не JavaScript.

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

І ще один: іноді просто виплюнути XML за допомогою (образно) printfнабагато простіше, ніж робити це з деяким жахливим двигуном XML.

Будь-які інші випадки з вашого досвіду?


4
Як і будь-який інший інструмент, ви використовуєте jQuery там, де це підходить. Ви не використовуєте молоток і зубило, щоб відкрити вхідні двері, якщо у вас є ключ.
— Роберт Харві

1
@ Роберт Харві: звичайно, але в інженерії програмного забезпечення у нас часто виникають проблеми з розпізнаванням ключів і молотків. Ось про що йдеться у публікації.
— mojuba

Майте на увазі, що якою б складною не була популярна бібліотека, її на замовлення легше зрозуміти для інших, ніж ваша власна "проста" бібліотека, оскільки вони звикли до неї.
— Луї Котманн

@RobertHarvey ваші двері повинні бути в набагато кращій формі, ніж у мене.
— Джиммі Хоффа

Відповіді:


14

Значна частина бібліотеки підприємств MS та більшість сторонніх керувань для .net залишили мене з цим почуттям після трохи використання.

Ваш пробіг може відрізнятися


2
Погоджено - більша частина бібліотеки Enterprise є заплутаною чи неінтуїтивно зрозумілою, а парад сторонніх бібліотек робить кращу роботу. Але звичайно, якщо ти вдариш Майкрософт за назвою, це має бути "найкраща практика"
— Уотсон

в перші дні entlib робив деякі речі, які було важко зробити або розібратися з ранніми рамками ... в наші дні, здається, це здебільшого зворотна сумісність з першими днями або частково запечені рішення, які ви бачите в майбутніх випусках набагато краща форма.
— Білл

13

Фонд спілкування Windows

Те, що на ній на головній сторінці представлено зображення ножа швейцарської армії, це підсумовує все для мене. Уявіть, що конфігурація XML приблизно в чотири рази довша від фактичного коду, який ви пишете, і все ще дуже складно писати служби SOAP, які є сумісними між C #, Java, PHP, Python та всіма іншими мовами, якими це було "належить" бути взаємодіючим з ...

У всіх майбутніх проектах я просто збираюся дотримуватися REST.


2
WCF 4.0 взагалі не потребує файлу конфігурації XML. Я не маю досвіду взаємодії з іншими технологіями (окрім використання WCF як клієнта, що добре працює), але можу сказати, що я вважав це простим та інтуїтивним. Навіть незважаючи на те, що я почав користуватися нею, не читаючи книг і не маючи ніяких тренувань (і з термінами, які потрібно зустріти), мені вдалося вдарити на землю.
— Аллон Гуралнек

4
Я перейменував "WCF" на "WTF".
— MetalMikester

1
@Allon: Я визнаю, я не пробував WCF 4.0, цілком можливо, що вони зробили значні вдосконалення в цій галузі ...
— Дін Хардінг

12

Однією з проблем, з якими я стикався з людьми, які «перекочують свою власну», полягає в тому, що - хоча їх підхід часто швидший і простіший - це також більше шансів бути крихкими, мати помилки, бути неповними та / або містити недоліки в безпеці. .

Простий приклад: може бути в 10 разів простіше використовувати printf для випуску XML, ніж використовувати бібліотеку:

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

але ти пам’ятав, як уникнути спеціальних персонажів str? Наприклад ' <' і ' &'? Деякі люди можуть сказати "ні, я цього не зробив" і продовжуйте писати це:

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

Але він все одно випромінює зламаний XML, якщо strмістить підряд " ]]>" в будь-якому місці. Корпус краю - впевнений. Але все-таки дієвий сценарій, який може призвести до несподіваних проблем із серйозними наслідками.

Існує багато разів і місць, коли "прокат свого" може бути доречним, але іноді потрібно багато досвіду та знань, щоб визначити, коли це доречно. Ось чому я часто закликаю програмістів віддавати перевагу використанню встановлених бібліотек (де вони доступні) замість самореалізованих процедур.


11

Log4Net

Бібліотека хороша, але документація жахлива. Це було зайвим для того, що я хотів зробити.

Я використовував Trace замість цього.


1
Роберте, ти мене теж побив, ти негідник! Я просто дивлюся на log4net і думаю "вау, ці слухачі круті. Тепер, як я ним користуюся ..?" і тоді я думаю, що до моменту, коли я це зрозумів, я міг написати своє.
— JohnL

5
Дійсно - мені доведеться з повагою не погодитися - це не стає простішим, ніж log.error ().
— Ватсон

3
@Watson: Якщо це дійсно так просто, навіщо вам потрібна рамка?
— Роберт Харві

Я використовую альтернативу The Object Guy, яка потребує декількох хвилин для налаштування, відкладаючи її від непотрібної складності Log4Net.
— cjmUK

7

Поділитись думкою

Не зрозумійте мене неправильно, 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, оскільки для них є величезна маса сторонніх функціональних можливостей.
  • Уникнення таких бібліотек, як прототип та jquery, призводило до неодноразових випадків виникнення проблем із перехресними веб-переглядачами, які часто важко знайти. Порт Ext JS вирішив мої крос-браузерні неприємності. Це магія, навіть якщо це широкі рамки, на які мені знадобилися тижні.

Я дійшов висновку, що набагато краще вибрати декілька надійних фреймворків сторонніх організацій і використовувати їх як основу для всього, що ви робите. Ці рамки розробляє та налагоджує хтось інший, що є неймовірною економією часу, коли ви їх стандартизуєте і добре їх зрозумієте.


+1. І це допомагає, якщо ці бібліотеки є відкритим кодом. Вперед та завантажте вихідний код у всі бібліотеки, якими ви користуєтесь, якщо ще цього не зробили. Читання вихідного коду бібліотеки - це чудовий спосіб діагностувати та виправляти проблеми, а також можливість вчитися у інших програмних програм (імовірно, досить якісних).
— Майк Кларк

2

System.Text.RegularExpressions

Регекс такий складний і такий повільний. Я дуже рідко використовую Regex і, як правило, пишу власний синтаксичний аналіз та відповідність.

Інколи я вважаю, що Regex стане корисним для дійсно складного узгодження.


Ви правильно компілюєте regexp [чи, можливо, System.Text.RegularExpressions повільніше, ніж Perl & co. реалізація]?
— Мацей П'єхотка

3
Regex може бути порівняно повільним порівняно з ручним розбором рядків, але це швидше, ніж думають багато людей, і зазвичай більш ніж досить швидко для більшості практичних застосувань.
— Майк Кларк

2
Я не думаю, що це насправді скарга на реалізацію .NET зокрема, оскільки в цьому немає нічого особливо складного або повільного (адже я вважаю, що це одна з швидших доступних реалізацій). Принаймні, це був мій досвід. Звичайно, звичайні вирази взагалі легко стають складними, і звичайно є тенденція до використання ними людей у ​​абсолютно невідповідних місцях.
— Дін Хардінг

2

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

Це, як було сказано, я не згорнув свого. Я використав щойно вивчені на моїх помилках і вирішив зробити це дуже просто і використовувати CodeIgniter і FlowPlayer (з JQuery).

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


2

Weka

Я багато працюю в машинному навчанні, і якщо мені колись просто потрібне щось просте, наприклад, Наївний Байєс або логістичний регрес, я люблю пірнати Ваку. Він добре реалізує деякі досить складні алгоритми машинного навчання, але API - це надійний переобладнаний надмірно об'єктно-орієнтований API для старої школи (догенерики) Java API. Речі, які мене дратують:

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

  2. Багато послідовних зв'язків, де методи потрібно викликати в певному порядку, і якщо ви дійсно не будете ретельно RTFM, ви цього не усвідомлите.

  3. Кожен екземпляр повинен бути об'єктом екземпляра, і я повинен чітко оголосити об'єктом Attribute, чи є він номінальним чи числовим. Це призводить до безлічі зайнятих перетворенням даних у форму, яку хоче Weka. Це особливо дратує, оскільки API Weka викидає так багато винятків, що компіляція коду не означає, що це все одно спрацює. Якби я розробляв API, я був би ліберальним у тому, що я прийняв (можливо, просто взяти масив Object) і просто проаналізував би дані, щоб зрозуміти, що я отримав і що з цим правильно робити.


2

У конкретному проекті я викинув EJB3. Це дало мені введення залежності та обробку транзакцій, керованих контейнерами. Але це вводить величезні залежності (наприклад, JBoss) і ускладнює систему для написання автоматизованих тестів для. Тепер я зняв його з ін'єкцією залежних від конструктора JPA +.


1

Виплюнення HTML на порт налагодження програми. Мені потрібен був простий спосіб отримати деякі поточні дані (з автоматичним оновленням). Затягнувши бібліотеку для форматування, було б добре, але було легше просто надрукувати її.

Я також відмовився від бібліотеки для іншого: ми використовуємо велику складну бібліотеку XML у більшості своїх матеріалів. Провівши 4 години на день, намагаючись змусити його працювати в новому додатку, я просто сказав "мішок" і задіяв TinyXML. Це не де, як поблизу, як потужний, але потрібно менше зусиль, щоб зробити це простими речами.


1

Останнім часом я працюю над компілятором мови сценаріїв, який я можу використовувати у своїх програмах. Я використовував інших, але ніхто не робить саме те, що мені потрібно. Тож я зрозумів, чому б не спробувати написати своє? Це може пройти рік або два, перш ніж його дійсно підходить для загального використання, але це нормально. Плюс, це чудовий досвід навчання.

Ще одне рішення "прокати моє" - це фрагменти, які використовуються для перекладу моїх програм. Існують бібліотеки, але мені це не подобалося. Тому я зробив своє.

І компоненти бази даних Delphi. Я ненавиджу. Завжди є. Тому я створив власний інтерфейс бази даних, який працює так, як я хочу, щоб він працював (і точно так, як працює той, який я створив для PHP, полегшуючи кодування на різних мовах).

В основному, коли мені надають можливість, я зазвичай закінчую створювати власну бібліотеку.


Я знаю, що ти маєш на увазі. Я можу показати вам цілий арсенал домашньої версії STL, абстрагування БД, цілі мови з їх упорядниками чи перекладачами, і що ні. Це, як правило, не вітається вашими колегами та керівництвом, але який програміст, який ніколи не писав компілятор, навіть якщо про це ніхто не піклувався?
— mojuba

0

О, так багато. Я працював над доволі спритними проектами з використанням apis з відкритим кодом. Чудово, коли вони працюють, але часто ми страждаємо від розробників з фетишем за те, що вони вводять всілякі сторони apis, деякі незрозумілі, деякі ні, просто тому, що вони хочуть використовувати один-два класи в них. Кінцевим результатом є міш-кошик коду та зламані системи. Вони передають його, стверджуючи, що це найкращий код коли-небудь, залиште, а бідні недоброзичливці, які його підбирають, знаходять нерозбірливий, незадокументований безлад, повний проблем залежностей та хак.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.