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


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.