どのライブラリ/フレームワークが、問題を解決するには複雑すぎると思われましたか?[閉まっている]


12

...そして、機能を「手動で」コーディングしましたか?

かなり比phor的な例として、二次方程式を解くためのライブラリはほとんど必要ありませんが、そのようなライブラリは存在し、誰かがそれらを真剣に受け止めます。

より疑わしいケースとして、状況によっては、jQueryを捨てる場合があります(たとえば、一部の石器時代のブラウザをサポートする必要がない場合)。そして、jQueryを使いすぎると、最近SOで見られたような不合理な問題につながります。jQueryで空のhrefをaタグに割り当てるにはどうすればよいですか?それは、JavaScriptでさえなく、HTMLの質問であることが判明しました。

別の不条理なケースでありながら、多くの人にとって非自明なのは、別のテンプレートシステムPHP上に構築されたテンプレートエンジン/言語を使用していることです。テンプレーティングの第三レベル?

そして、もう一つは:時々だけでXMLを吐き出し(figurally)printfいくつかの巨大なXMLエンジンでそれを行うよりもはるかに簡単です。

あなたの経験から他のケースはありますか?


4
他のツールと同様に、適切な場所でjQueryを使用します。あなたが鍵を持っているなら、あなたは正面ドアを開けるためにハンマーとノミを使用しません。
ロバートハーベイ

1
@Robert Harvey:もちろんですが、ソフトウェアエンジニアリングでは、キーとハンマーの認識に問題があることがよくあります。それが投稿の目的です。
mojuba

人気のあるライブラリがどんなに複雑であっても、カスタムの「シンプルな」ライブラリに慣れているため、他の人にとっては理解がはるかに簡単であることに留意してください。
ルイコットマン

@RobertHarveyあなたのドアは私のドアよりもずっと良い形でなければなりません。
ジミー・ホッファ

回答:


14

MSエンタープライズライブラリの多くと.netのほとんどのサードパーティコントロールは、少し使用した後、この感覚を残しました。

あなたのマイレージは異なる場合があります


2
合意-エンタープライズライブラリの大部分は混乱している、または直感的ではなく、より良い仕事をするサードパーティライブラリのパレードがあります。しかし、もちろん、タイトルでMicrosoftを平手打ちした場合、それは「ベストプラクティス」でなければなりません。
ワトソン

初期のentlibは、初期のフレームワークではやらなかったり、理解するのが難しい作業をしていました...最近では、ほとんどの場合、初期のバージョンとの後方互換性や、将来のリリースで見られる部分的に焼き付けられたソリューションのようですより良い形。
ビル

13

Windows Communication Foundation

ホームページにスイスアーミーナイフの写真が載っているという事実は、私にとってすべてをまとめたものです。XML構成は、実際に記述するコードの約4倍の長さであり、C#、Java、PHP、Python、および「想定される」他のすべての言語間で相互運用可能なSOAPサービスを記述することは依然として非常に困難ですと相互運用可能...

今後のすべてのプロジェクトでは、RESTのみを使用します。


2
WCF 4.0では、XML構成ファイルはまったく必要ありません。私は他の技術との相互運用性の経験はありません(WCFをクライアントとして使用することは別として、うまく機能します)が、簡単で直観的であることがわかりました。本を読んだりトレーニングをしたりせずに(そして会期日までに)使用し始めたにもかかわらず、私はすぐに使い始めました。
アロングラネネク

4
「WCF」の名前を「WTF」に変更しました。
MetalMikester

1
@Allon:私はWCF 4.0を試したことがない認めるよ、それは...彼らはその地域で大幅な改善を行っていることは十分に可能だ
ディーン・ハーディング

12

「自分で転がす」人々で私が経験した問題の1つは、アプローチがより高速で単純である一方で、脆弱であり、バグがあり、不完全であり、および/またはセキュリティ上の欠陥を含む可能性が高いことです。 。

単純な例:printfを使用してXMLを出力する方が、ライブラリを使用するよりも10倍簡単になる場合があります。

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

で特殊文字をエスケープすることを覚えていましたstrか?たとえば、「<」と「&」?一部の人々は「いいえ、私はしませんでした」と言って、これを書くことを続けるかもしれません:

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

ただしstr、サブストリング " ]]>" が含まれている場合、壊れたXMLを引き続き出力します。エッジケース-確かに。しかし、深刻な結果をもたらす予期しない問題につながる可能性のある有効なシナリオです。

「自分で転がす」のが適切な場合が多くありますが、適切な時期を特定するには多くの経験と知識が必要な場合があります。そのため、私はプログラマーに、自己実装ルーチンではなく、確立されたライブラリ(利用可能な場合)を使用することを推奨することがよくあります。


11

Log4Net

ライブラリは優れていますが、ドキュメントは恐ろしいものです。私がやりたかったことはやり過ぎでした。

代わりにTraceを使用しました。


1
ロバート、悪党だから君も俺を倒した!私はlog4netを見て、「すごい、これらのリスナーはクールだ。今はどうやって使うのか..?」そして、私がそれを手に入れたときまでに、自分で書くことができたと思う。
-JohnL

5
本当に-私は敬意を払って同意する必要があります-それはlog.error()よりも簡単になることはありません。
ワトソン

3
@ワトソン:本当にそんなに簡単なのに、なぜフレームワークが必要なのですか?
ロバートハーベイ

構成に数分かかるObject Guyの代替手段を使用しますが、Log4Netの不必要な複雑さによって先送りされています。
cjmUK

7

共有ポイント

誤解しないでください。SharePointに付属しているもののほとんどが必要な場合(そして多くの場合付属しています!)、SharePointは素晴らしいです。物事、それは大いに努力と構成の価値はありません。


6

ASP.NET WebForms-.NET Web開発者として長い間私のパンとバターでしたが、MVCフレームワークを使用し始めてから(そしてPHP / Smarty Template環境から来ました)、あなたは時々より良いものがあることに気づきましたWeb開発を行う方法とそれが使用する抽象化は、やり過ぎで漏れやすいものです。


ASP.NET MVCとは異なるASP.NET WebFormsを意味すると思います。正しい?
エリックキング

@Eric-はい、正しいです、私はそれを修正する必要があります!
ワトソン

3

私がこれをやったほとんどすべての場合、私はそれを後悔しました:

  • ラッパーライブラリの代わりにPHP oci_ *関数を使用することは、コードの保守性のために悪い動きであることが判明しました。すべてのコードをZend_Dbに移植することで、データベースコードの保守の開発がはるかに簡単になりました。
  • 独自のajaxグリッドコンポーネントを展開します。これは、他のグリッドコンポーネントのいくつかが進化する速さを考えると、開発に時間がかかりすぎました。現在、すべてをExt JSグリッドに移植しています。これらのグリッドには、大量のサードパーティ機能が利用できるためです。
  • プロトタイプやjqueryのようなライブラリを回避すると、クロスブラウザの問題が繰り返し発生し、多くの場合追跡が困難になります。Ext JSポートは、私のブラウザー間の問題を解決しました。理解するのに何週間もかかった巨大なフレームワークであっても、それは魔法です。

信頼できるサードパーティのフレームワークをいくつか選択し、それらをすべての基盤として使用する方がはるかに良いという結論に達しました。これらのフレームワークは、他の誰かが開発およびデバッグします。これらのフレームワークは、標準化してよく理解すれば、驚くほどの時間の節約になります。


+1。そして、それらのライブラリがオープンソースであれば役立ちます。まだ使用していない場合は、使用しているすべてのライブラリにソースコードをダウンロードします。ライブラリのソースコードを読むことは、問題を診断および修正するための優れた方法であり、他のプログラマー(おそらくかなり高品質)のコードから学ぶ機会でもあります。
マイククラーク

2

System.Text.RegularExpressions

正規表現はとても複雑でとても遅いです。私はめったに正規表現を使用せず、通常、独自のテキスト解析およびマッチングを記述します。

時折、本当に複雑なマッチングに正規表現が役立つと思うでしょう。


正規表現を適切にコンパイルしますか(または、System.Text.RegularExpressionsはPerl&coよりも遅いかもしれません)。実装]?
マチェイピエチョトカ

3
正規表現は、手動の文字列解析に比べて比較的遅い場合がありますが、多くの人が考えるよりも速く、通常、ほとんどの実用的なアプリケーションでは十分に高速です。
マイククラーク

2
これは特に.NET実装に関する苦情ではないと思います。特に複雑で遅いものは何もないからです(実際、利用可能な高速実装の1つであることがわかりました)。少なくとも、それは私の経験です。もちろん、正規表現は一般的に簡単に複雑になり、人々が完全に不適切な場所でそれらを使用する傾向があることは確かです。
ディーンハーディング

2

Delphi4PHPに悪いプレスが必要というわけではありませんが、私はそれを試してみました(バージョン2.0)。私はそれを使用してクライアント用のYouTubeスタイルのWebアプリを作成してトレーニングビデオを表示したかったのですが、面倒でPHPフレームワーク(VCL4PHP、Zend、Smarty、Recess)を組み合わせようとしたときに、避けられない名前に変更しなければなりませんでしたPHP 5の問題には名前空間がないためです。

そうは言っても、私は最終的に自分のことをロールバックしませんでした。私は自分の間違いから学んだばかりを使用し、非常にシンプルに保ち、CodeIgniterとFlowPlayer(JQueryを使用)を使用することにしました。

フレームワークがPHP 5から生き延びたとしても、PHP 6には実際にうまく機能するすばらしいフレームワークがいくつかあると思います。


2

ウェカ

私は多くの機械学習の仕事をしており、単純ベイズやロジスティック回帰のような単純なものが必要なだけなら、Wekaを捨てることが大好きです。かなり複雑な機械学習アルゴリズムの優れた実装がありますが、このAPIは、過度にオブジェクト指向の過度にオブジェクト指向の旧式(pre-generics)Java APIです。それについて私を悩ますもの:

  1. それは、他の何も使用しない独自のサイズ変更可能な配列をロールバックし、忙しい仕事が前後に変換することを保証します。

  2. メソッドを特定の順序で呼び出す必要があるシーケンシャルカップリングがたくさんあり、本当にRTFMを慎重に行わないと、気付かないでしょう。

  3. すべてのインスタンスはInstanceオブジェクトである必要があります。また、公称または数値に関係なく、Attributeオブジェクトで明示的に宣言する必要があります。これは、Wekaが望む形式にデータを変換する多くの忙しい仕事につながります。これは、Weka APIが非常に多くの例外をスローするため、コードのコンパイルがどうにか動作する可能性があることを意味しないため、特に迷惑です。APIを設計している場合、私は受け入れたものに寛大になり(オブジェクトの配列を取得するだけかもしれません)、データを内省して、得られたものとそれを使用する正しいことを理解します。


2

特定のプロジェクトで、EJB3を廃止しました。依存関係の注入とコンテナー管理のトランザクション処理ができました。しかし、それは巨大な依存関係(例:JBoss)を導入し、システムの自動テストの作成を困難にしました。今、私はそれをJPA +コンストラクター依存性注入に取り除いた。


1

アプリのデバッグポートでHTMLを吐き出します。現在のデータを取得する簡単な方法が必要でした(自動更新を使用)。ライブラリを引き込んでフォーマットするのは良かったのですが、printfする方が簡単でした。

また、私は別のライブラリを拒否しました。私たちは、ほとんどのものに大規模で複雑なXMLライブラリを使用しています。1日4時間を費やして新しいアプリで動作するようにした後、「バッグバッグ」と言ってTinyXMLを取り込みました。それほど強力ではありませんが、単純なことをするのに労力はあまりかかりません。


1

最近、アプリケーション内で使用できるスクリプト言語コンパイラに取り組んでいます。私は他のものを使用しましたが、どれも私が彼らがするのに必要なことを正確に行いません。だから私は自分で書いてみませんか?一般的な使用に本当に適しているのは1〜2年前かもしれませんが、それでも構いません。さらに、素晴らしい学習体験です。

もう1つの「独自のロール」ソリューションは、アプリケーションの翻訳に使用されるピースです。既存のライブラリがありますが、私はそれらのどれも好きではありませんでした。だから私は自分で作りました。

そして、Delphiのデータベースコンポーネント。嫌いだ。いつももっている。そのため、私は自分が望むように機能する独自のデータベースインターフェイスを作成しました(PHPで作成したものとまったく同じように機能し、言語間のコーディングが容易になります)。

基本的に、オプションを指定すると、通常は自分のライブラリを作成します。


あなたが言っていることがわかります。自作のSTL、DB抽象化、コンパイラーまたはインタープリターを使用した言語全体、およびそうでないもののすべてを示します。一般的に同僚や経営陣には歓迎されませんが、誰も気にかけなくてもコンパイラーを作成したことがないプログラマーはいますか?
mojuba

0

ああ、たくさんあります。私は、オープンソースAPIを使用して、かなりの数のアジャイルプロジェクトに取り組んできました。彼らが働くときは素晴らしいですが、多くの場合、1つまたは2つのクラスを使用したいという理由で、あらゆる種類のサードパーティAPIを持ち込むためのフェティッシュで開発者に苦しんでいます。最終結果は、コードのミッシュマッシュであり、システムをハッキングしました。彼らはそれを史上最高のコードであると主張し、それを手に入れた貧しい奴隷は、依存関係の問題とハックに満ちた、理解できない、文書化されていない混乱を見つけます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.