あなたがかつて好きだったプログラミングの習慣から、気が変わったものは何ですか?[閉まっている]


99

私たちがプログラミングするとき、私たちは皆、私たちが使用し、信頼しているプラ​​クティスとパターンを開発します。ただし、時間の経過とともに、理解、成熟度、さらにはテクノロジーの使用状況さえも変化するにつれ、以前は優れていたと考えていた一部のプラクティスが適切ではない(または適用されなくなった)ことに気付きました。

かつて私が頻繁に使用していたプラクティスの例は、近年変更されましたが、シングルトンオブジェクトパターンの使用です。

私自身の経験と同僚との長い議論の結果、シングルトンは必ずしも望ましいとは限らないことに気づきました。シングルトンは、モックのような手法を阻害することによってテストをより困難にし、システムのパーツ間に望ましくない結合を生み出す可能性があります。代わりに、私は現在、シングルトンの性質と存在を気にしない、または知る必要のあるシステムの部分から隠すオブジェクトファクトリー(通常はIoCコンテナーを使用)を使用しています。代わりに、そのようなオブジェクトへのアクセスを取得するためにファクトリ(またはサービスロケータ)に依存しています。

自己改善の精神でのコミュニティへの私の質問は次のとおりです。

  • 最近どのようなプログラミングパターンや実践を再考して、今は避けようとしていますか?
  • それらを何に置き換えることに決めましたか?

回答:


159


//Coming out of university, we were taught to ensure we always had an abundance 
//of commenting around our code. But applying that to the real world, made it 
//clear that over-commenting not only has the potential to confuse/complicate 
//things but can make the code hard to follow. Now I spend more time on 
//improving the simplicity and readability of the code and inserting fewer yet 
//relevant comments, instead of spending that time writing overly-descriptive 
//commentaries all throughout the code.



+1。私はこれと同じ答えを投稿しようとしていました。数週間前に、古いプログラミングの割り当ての一部をアーカイブディスクで見つけました。それはすべて同じように見えました。コメント行とコード行の比率はほぼ1:1でした。
マイケル・ムーサ、

32
あなたのような音がコメントし、誤って、あまりありませんが。コードはそれ自体を語りません。いいえ、ありません。これについては、最新のNT Insiderをよく読んでください。コメントが冗長になると思う場合は、あなたが間違っているか、間違っているかです。大学では、正しいコメント(またはバグ追跡、バージョン管理... *ため息*)を教えていません。コメントが少なすぎる。(そしてより少ない良いもの)
トーマス

5
Code Completeには、コメントの良いヒントと、それをバックアップするデータがあります。
トーマス

20
コメントを記述するために使用されなければならない理由コードは、それが何を行います(それは明白でなければ)、ではないのコードがありません。可能性のある例外は、Carmackのマジックナンバー0x5f3759dfのような、クレイジーなビットトゥウィドル/言語ハックです。
Chris Simmons、

6
@トーマス:私は個人的に問題は、良いコメントを教えることは大学が学生に示すことができるものではないことだと思います。学校のほとんどすべてのプログラムは1回限りのものです。学生は、1年前に作成したコードを振り返って経験したり、まったく理解したりできません。また、下位レベルのクラスは、コーディングコンセプトが非常にシンプルであることを示しています。このレベルでのコメントは、何が起こっているかという理由で、ほとんどの場合面倒です。言い換えれば、それは誰かに水遊びのプールで泳ぐように教えることのようなものです。彼らがその動きを理解することは、単に正しい文脈ではありません。
Dan Lew

117

単一の戻り点。

以前は、各メソッドに単一の戻り点を優先していました。これにより、ルーチンに必要なクリーンアップが見落とされないようにすることができたからです。

それ以来、私はずっと小さなルーチンに移動しました-クリーンアップを見落とす可能性が減り、実際にクリーンアップの必要性が減りました-そして、初期のリターンがコードの見かけの複雑さ(ネストレベル)を減らすことがわかりました。単一の戻り点のアーティファクト-「結果」変数を保持する、フラグ変数を保持する、まだ完了していない状況の条件句-コードが実際よりもはるかに複雑になり、読み取りと保守が難しくなります。早い段階での脱出と、より小さな方法が、進むべき道です。


3
autoptr、scoped_ptr、CComPtrなど、自動的にクリーンアップされるデータ型と組み合わせると、同意します
i_am_jorf 09/07/07

3
コードのクリーンアップは、試してみる{}最後に{}の目的です
バンジョーリティ2009

@banjollity:最終的に{}をサポートしない言語を除く。そして、それをサポートする言語であっても、最終的に{}が実行されるとは限りません。
クリスK

1
@banjollity、Chris:C ++では、クリーンアップがデストラクタの目的であり、極端な状況(スタックの巻き戻し中にデストラクタが例外をスローする、リスがパワーをカットする)を除いて、実行が保証されます。
David Thornley、2010

4
同意した。ネストされた条件付きをガード句 ftwに置き換えます!
Jonik

111
  • 最初の試行で物事を完璧にコーディングしようとしています。
  • コーディングの前に完璧なオブジェクト指向モデルを作成しようとしています。
  • 柔軟性と将来の改善のためにすべてを設計する。

一言で言えば、オーバーエンジニアリング


6
待って、私はいつも最初の試みでそれを正しく理解します。:)
i_am_jorf 2009

18
本当のお金は、それを初めて微妙に間違ったものにし、それを野生に出すことにあります。次に、人々がぎこちないバージョンに慣れてきたら、傲慢なショーマンシップで急降下し、バグ/非効率を修正してさらに栄光を手に入れましょう!;)
エリック

7
@jeffamaphone-いいえ、ジョン・スキートだけが最初に正しく理解します。
ジョーダンパーマー、

私は「オーバーエンジニアリング」という言葉が好きです
Neilvert Noval

@jeffamaphone-私は最初の試みでも常に正しく理解しています。しかし、さらなる試みが私に必要なものを与えます:)
umbr

78

ハンガリー語表記(フォームとシステムの両方)。私はすべてにプレフィックスを付けていました。strSomeStringまたはtxtFoo。今、私はsomeStringとtextBoxFooを使用します。新しい人が一緒に来て拾う方がはるかに読みやすく、簡単です。追加のボーナスとして、一貫性を保つことは簡単です-camelCaseをコントロールに使用し、役立つ/説明的な名前を追加します。Forms Hungarianには、常に一貫性があるとは限らないという欠点があり、Systems Hungarianはあまり効果がありません。すべての変数をまとめることは、特に最近のIDEの場合はそれほど便利ではありません。


PythonやJavaScriptなどの動的型付け言語ではどうですか?これらの言語でハンガリー語の表記法を使用すると、変数を見るときにどのタイプの変数が期待できるかがわかるので便利です(期待するタイプがある場合-もちろん、動的に型付けされた言語を扱うのは簡単です)静的に型付けされた言語とまったく同じです。)
Dan Lew

4
私は同様ですが、fooTextBoxと文字列が見つかるだけです。numberOfEntries=> int、isGreat => boolなど
rball

ハンガリー語表記を取り除くための+1。私はrballに同意します。fooTextBox、fooService、fooStringが本当に必要な場合。
ブルー

3
@ wuub:適切な名前を付ければ、接頭辞を付ける必要はないはずです。
ケニー・マン

4
ところで、あなたが言ったことは実際のハンガリー人ではありません。
アントニーカーシー

67

「完璧な」アーキテクチャ

私は数年前にTHEアーキテクチャを思いつきました。100%疎結合のレイヤー、デリゲートの広範な使用、および軽量オブジェクトが存在するように、可能な限り技術的に自分自身をプッシュしました。それは技術的な天国でした。

そしてそれはがらくたでした。アーキテクチャの技術的な純粋さが、開発チームの結果を完璧にしようとするのを遅らせ、完全な失敗をほぼ達成しました。

技術的に完全ではないシンプルなアーキテクチャになり、配信率が急上昇しました。


57

カフェインの使用。かつて私は目を覚まし、輝かしいプログラミングの気分になり、コードは私の指から猛烈な流動性で飛んだ。今、それは何もしません、そして、私がそれを持っていないなら、私は頭痛がします。


55
コーヒーをもっと飲む必要があります。それが上手く行かない場合は、喫煙を始めてください。
MusiGenesis 2009

7
ブラッド:Pythonを使用している場合は必要ありません:xkcd.com/353
Peter

素敵なクリスマスストーリーリファレンス!:-)
スティーブ・エコールズ

2
私はその習慣を破って、それを数回再び拾いました(これは今や私の3番目のサイクルです)。暖かい朝に温かいマグカップでコーヒーをコーディングするのに最適なものはありません。
マシューアイセリン

15
「私がアンフェタミンをやめるために間違った週を選んだように見えます。」
ShreevatsaR

50

コードをコメント化します。私は以前、コードは貴重であり、あなたが作成した美しい宝石を単に削除することはできないと思っていました。TODOやNOTEを残さない限り、コメントアウトしたコードを削除します。これは、あまりにも危険なので、コメントアウトしたままにすることはできません。ありました:彼らは最近コメントアウトされましたか?これは開発環境の変更ですか?なぜこの無関係なブロックを行うのですか?

コードをコメントアウトせず、単に削除することを真剣に検討してください。必要な場合は、ソース管理のままです。YAGNIですが。


6
リファクタリング中に古いコードをコメントアウトしましたが、置換コードが機能することを確認するまでのみです。新しいバージョンが完全に機能するようになったら、古いコメント行を削除します。
muusbolla 2009

確かに-私もコードをコメントアウトしていますが、数日間だけです。戻ってきて、見逃している部分があることに気付いた場合、新しいコードが作成される前に削除されます。
コリンマッカイ

4
コメント付きのコードを一度チェックインしたら、それを削除すると言います。コードのさまざまなビットをテストして、壊れたコードをチェックインしたくない場合はよくあります...
DisgruntledGoat

言うまでもなく、バージョン管理はあなたの友達です。
David Thornley、2010

+1私は、彼がリファクタリングまたは書き直したすべてのコードにコメントすることを主張したプログラマーと協力しました。時々私は1k +行のがらくたをスクロールして自分が取り組んでいるものを見つける必要があるので、私は夢中になります。
Evan Plaice

46

#regionディレクティブの乱用/乱用。これはほんの少しのことですが、C#では、以前は#regionディレクティブをいたるところに使用して、クラスを編成していました。たとえば、リージョン内のすべてのクラスプロパティをグループ化します。

今私は古いコードを振り返って、ほとんどがそれらに悩まされています。私はそれがほとんどの場合本当に物事をより明確にするとは思いません、そして時々彼らは単にあなたを遅くするだけです。だから私は今私の心を変え、よくレイアウトされたクラスはリージョンディレクティブなしでほとんどきれいだと感じています。


31
地域が嫌いです。私のチームの人々はそれらを軽薄に使用しています。私はそれらを「悪いコード隠し手」と呼びます。
rball 2009

9
彼らは間違いなくコードのにおいです。
フランクSchwieterman

3
地域が嫌いです。私は現在、関数がほぼ500行であるコードを維持しています。それを管理するために、賢い開発者は10から15の領域にコードのチャンクを配置しました。
SolutionYogi

6
@Solution Yogi:地域があなたの場合、本当の問題だとは思いません:-)
Ed S.

9
控えめに使用すれば、リージョンは問題ないと思います。
グレゴリーヒグリー

39

ウォーターフォールの開発全般、具体的には、何らかの形で標準的であることが期待され、それらの実装が正確で許容可能であることが期待される、完全で包括的な機能および設計仕様を作成する方法。私はそれがスクラムに置き換わったのを見たことがあります。単純な事実は、顧客のニーズと欲求の性質の変化により、固定された仕様が事実上役に立たなくなることです。問題に本当に適切に取り組む唯一の方法は、反復的なアプローチです。もちろん、スクラムは特効薬ではありません。私はそれが何度も何度も誤用され、乱用されているのを見てきました。しかし、それは滝を打ち負かします。


3
それを顧客に伝えてください...私は役に立たない「私は水晶玉を持ったプログラマーなので、低レベルのデザインが6か月でどのように見えるかを正確に知っています」仕様書を書いています:)
イゴールBrejc

36

クラッシュすることはありません。

いい考えですね。ユーザーはクラッシュするプログラムを好まないので、クラッシュしないプログラムを書いてみましょう。ユーザーはプログラムを好きになるはずですよね?それが私が始めた方法です。

最近では、うまくいかなくても、うまくいっているふりをするべきではないと思います。できるだけ早く失敗し、適切なエラーメッセージが表示されます。そうしないと、プログラムは後でいくつかの命令を実行するだけでさらに激しくクラッシュしますが、デバッグに1時間かかるいくつかの説明のないnullポインターエラーが発生します。

私のお気に入りの「クラッシュしない」パターンは次のとおりです。

public User readUserFromDb(int id){
    User u = null;
    try {
        ResultSet rs = connection.execute("SELECT * FROM user WHERE id = " + id);
        if (rs.moveNext()){
            u = new User();
            u.setFirstName(rs.get("fname"));
            u.setSurname(rs.get("sname"));
            // etc
        }
    } catch (Exception e) {
        log.info(e);
    }
    if (u == null){
        u = new User();
        u.setFirstName("error communicating with database");
        u.setSurname("error communicating with database");
        // etc
    }
    u.setId(id);
    return u;
}

ここで、ユーザーにエラーメッセージをコピーして貼り付けて送信するように依頼する代わりに、ログに飛び込んでログエントリを見つけなければなりません。(また、無効なユーザーIDを入力したため、ログエントリはありません。)


ログが問題を生成するのに対して、ユーザーが実際のエラーメッセージを提供する可能性はどのくらいですか?(この特定のケースでは非常に低いですが、ユーザーがエラーメッセージを引用することはほとんどありません!)彼らはそれらを読んでもいますか?
アラファンギオン2009

1
ランダムユーザーがエラーメッセージを送信する可能性は低いですが、可能性はゼロではなく(自明な例:独自のアプリを使用することもあります)、何をコピー/貼り付けするかを時間とともに実際に学習するユーザーもいます。私はあなたが(あなたがすべき)ログべきではない言っていないんだけど、アプリが壊れているとき、それがされて壊れました。エラーメッセージを表示することは、ユーザーの名が「データベースとの通信エラー」(またはさらに悪いことにnull、空の文字列)であると偽るよりもはるかに優れており、ユーザーに正直です。
gustafc 2009

2行目にNullReferenceExceptionがあります
09

ありがとう、oɔɯǝɹ、修正しました。(そこでビットlulzierでしたが:例外と他の「クラッシュ」を避けるために、すべてのこの悩み、そしてまだそれが無条件に墜落した。)
gustafc

33

デザインパターンを認識したら、それを適用するのが理にかなっていると思いました。

私が実際に外国のプログラミング言語からスタイルをコピーしていることを少しも知りませんでしたが、私が使用していた言語は、はるかにエレガントで簡単なソリューションを可能にしました。

複数の(非常に)異なる言語を使用することで私の目が開かれ、自分以外の問題に対する他の人の解決策を誤って適用する必要がないことを実感しました。Rubyのような言語で適用されたファクトリーパターンを見ると、身震いします。


2
ルビを知らないことを許しませんが、なぜファクトリーパターンを使用しないのですか?
Mike Chamberlain、

ここではルビイストではありませんが、実装は実装に依存しないようにする必要がありますが、ルビは動的であり、何でもモックまたはスタブできます。したがって、実際には実装に依存していません。
ステファン・

27

強迫的なテスト。私はかつてテストファースト開発の猛烈な支持者でした。一部のプロジェクトではそれは非常に理にかなっていますが、それが実行不可能であるだけでなく、機能のすべての単一部分のユニットテストを作成するという教義にずるずる従うことは多くのプロジェクトにとって有害で​​あることに気付きました。

本当に、何にでも従順であることは有害です。


22
フジツボにとってはとてもうまくいきます。
MusiGenesis 2009

テストカバレッジは、利益に比例する必要があります。あなたがすることは何でも本当に利益を示さなければなりません。100%のカバレッジはあなたにそれほど多くを与えるつもりはありません。生命維持/ミサイル発射シナリオにない形式の80または90との違い。
スペンス、

テストではなくユニットテストへの+1依存。
Preet Sangha

25

これは小さなことですが、中括弧の位置(同じ行または次の行)を気にすること、コードの最大行長、変数の命名規則、およびスタイルの他の要素を提案しました。誰もが私よりもこのことを気にかけているようですので、私が現在取り組んでいる人の流れに沿って進みます。

編集:もちろん、これは例外ですが、私が最も気になる人(またはグループのスタイルを設定する立場にある人)です。その場合、私はやりたいことをします!

(これは一貫したスタイルがないことと同じではないことに注意してください。コードベースの一貫したスタイルは読みやすさにとって非常に重要だと思います。)


5
誰かがこれに反対票を投じましたが、それは実際的な見方だと思います。最高のコードスタイリングとは何ですか?重要ではありません。同じファイルを上下に調べて複製します。
フランクSchwieterman

12
最高のコードスタイリングは、そのショップの標準的なものです。
David Thornley、

そのため、Visual Studioの自動フォーマットオプションが気に入っています。他の開発者がコードをどのように記述したかは関係ありません。私はクイックフォーマットを行うだけで、その正確な方法はほとんどの場合です。
corymathews 2009

5
@cory:再フォーマットしたばかりのファイルのバージョン間の違いを示すバージョン管理ソフトウェアの機能を台無しにしていないのですか?
スティーブメルニコフ2009

だからこそ、私は一種のpythonを学ぶことに惹きつけられています...タブストップが何に設定されているかを心配する必要があるだけで、スタイルを固定する必要はありません。それは一種の説得力があります。
クリスK

24

おそらく、私が考えを変えて以来、最も重要な「プログラミングの実践」は、私のコードが他の誰よりも優れているという考えです。これはプログラマー(特に初心者)に共通です。


20

ユーティリティライブラリ。私は、さまざまなヘルパーメソッドとクラスを使用してアセンブリを持ち歩き、いつの日か他の場所で使用できるという理論に従っていました。

実際には、私は機能が細かく整理されていない多数の名前空間を作成しました。

今、私はそれらを作成したプロジェクトにそのまま残します。おそらくそれを必要としないでしょうし、もし必要なら、いつでも後で再利用可能なものにそれらをリファクタリングすることができます。ときどき、// TODOでフラグを付けて、共通のアセンブリに抽出できるようにします。


12
。「でも、あなたは同じ問題を3回解決するために必要なするまで汎用ルーチンの作成について考えていないの線に沿って何かだった良い引用符(私は現時点では、元のを見つけることができません)があります
DaveR

9
「ストライク3回でリファクタリング」-Martin Fowlerによるリファクタリング3つのルール、 58ページ
Nick Dandoulakis 2009

20

私がコーディングした以上の設計。しばらくすると分析麻痺になります。


44
私はときどき、「考えすぎていることに気づいたら、立ち止まって行動します。やりすぎに気づいたら、立ち止まって考えてください」というフレーズをときどき呼びます。
Neil N

それはいいですが、多すぎますか?
Hamish Grubijan

UML(役に立たないモデリング言語)への依存度が高すぎる。それは時々その用途があります。しかし、誰かがクラス図を描き始め、「図からコードを生成するのはどれほど素晴らしいことだ」という利点を説くのを見たら、ランニングシューズをひもで締めます。さらに、Visual Studioには組み込みの対話型クラスダイアグラムジェネレーターがあり、すべて自動的に実行され、オブジェクトエクスプローラーのように動作します。
Evan Plaice

15

ビジネスロジックを実行するためのDataSetの使用。これは、コードをデータベースに緊密にバインドします。また、DataSetは通常SQLから作成されるため、物事がさらに壊れやすくなります。SQLまたはデータベースが変更されると、データセットが触れるすべてのものに細流化する傾向があります。

オブジェクトコンストラクター内でビジネスロジックを実行する。継承とオーバーロードされたコンストラクタを作成する機能により、メンテナンスが困難になる傾向があります。


15

変数/メソッド/テーブル/ ...の名前の省略

名前の長さに制限を設けていない言語で作業しているときでも、私はこれをいつも使用していました(おそらく255かそれくらいだったでしょう)。副作用の1つは、(非標準の)省略形を説明するコード全体に散らばった多数のコメントでした。そしてもちろん、名前が何らかの理由で変更された場合...

今、私は物事を本当の意味で、わかりやすい名前で呼ぶことにしています。標準の略語のみを含みます。無駄なコメントを含める必要はありません。コードははるかに読みやすく、理解しやすくなっています。


はい、これらのタイプの宣言が大好きです:void Foo(x1、y、x2、y2、p、r、j)... WTF ?!
Ed S.

またはさらに悪いことに(そして、はい、私は実際にこれを見ました)Foo(int arg0, String arg1, float arg2)など
Mac

14

エンタープライズライブラリなどの既存のデータアクセスコンポーネントを、ヘルパーメソッドのカスタムレイヤーでラップします。

  • それは誰の生活も楽にしない
  • バグを含む可能性のあるそのより多くのコード
  • 多くの人々は、EntLibデータアクセスコンポーネントの使用方法を知っています。社内のデータアクセスソリューションの使用方法を知っているのはローカルチームだけです

14

1984年にSmalltalkを読んでいるときに最初にオブジェクト指向プログラミングについて耳にしましたが、1992年にcfront C ++コンパイラを使用するまでoo言語にアクセスできませんでした。1995年についにSmalltalkを使用するようになりました。技術、そしてそれがソフトウェア開発を節約するだろうという考えに賛成しました。

今、私はooをいくつかの利点を持つ1つの手法と見なしていますが、それはツールボックスの1つのツールにすぎません。私はほとんどの作業をPythonで行っており、クラスメンバーではないスタンドアロン関数を作成することが多く、以前はクラスを作成していたタプルまたはリストにデータのグループを収集することがよくあります。データ構造が複雑な場合や、データに関連付けられた動作が必要な場合でも、クラスを作成しますが、それに抵抗する傾向があります。

時間があるときに、Coojureでいくつかの作業を行うことに実際に関心があります。oo機能は提供されませんが、正しく理解すればJavaオブジェクトを使用できます。私はooが死んだようなことを言う準備はできていませんが、個人的には、以前はそうであったファンではありません。


13

C#では_notation、プライベートメンバーに使用します。今は醜いと思います。

それから私はthis.notationプライベートメンバー用に変更しましたが、それを使用することに一貫性がないことに気付いたので、それもドロップしました。


29
私はまだ_notationを使用していて、すばらしいと思います。
Arnis Lapsa 2009

3
_notationが嫌いです。私は、パブリックメンバーにはThisNotationを、プライベートメンバーにはthisNotationを使用しています。
Callum Rogers、

私も嫌いです。それは私を混乱させます:(
Broken_Window

4
同意しません。名前の管理がとても簡単になります。プロパティまたはパブリック/内部メンバーにはPascalCaseを使用し、プロパティを通じて公開されるメンバーには_UnderscorePascalCaseを使用し、メソッド/コンストラクターおよびプライベートメンバーのパラメーター名にはcamelCaseを使用します。'this'キーワードは、現在のクラスの参照をクラス外に渡す必要がある場合、またはクラス内で自動生成されたメンバー(名前、コントロールなど)にアクセスする必要がある場合にのみ必要です。
エヴァンプライス

@エヴァン:私は最後の部分を除いて、あなたが説明していることを正確に行います。メソッドやプロパティを呼び出すときに、thisまたはMe(それぞれC#およびVB.NET)を使用する傾向があります。IMO。コードが後で読みやすく、理解しやすくなります。特に、その特定のスコープ内に4つ以上のオブジェクトがある場合に便利です。
Alex Essilfie、2011

11

実装する前に、大学が推奨する設計方法を使用するのをやめました。カオス的で複雑なシステムでの作業は、私に態度を変えることを余儀なくさせました。

もちろん、私はまだコードの調査を行っていますが、特にこれまで触れたことのないコードに触れようとしているときは、通常、できるだけ小さな実装に焦点を当てて最初に何かを始めようとします。これが第一の目標です。次に、徐々にロジックを調整し、デザインを単独で表示します。プログラミングは反復プロセスであり、アジャイルなアプローチと多くのリファクタリングで非常にうまく機能します。

コードは、最初はどのように見えるかと最初に思ったすべてのものを調べるわけではありません。毎回起こります:)


10

私は以前、契約ごとの設計に大きく関わっていました。これは、すべての関数の最初に多くのエラーチェックを置くことを意味しました。契約は、懸念の分離という観点からは依然として重要ですが、コードで実行してはならないことを強制しようとするのではなく、ユニットテストを使用してそれが何を実行するかを確認しようとします。


私はこのようにプログラムするように教えられました。もちろん、私はHSの数学の先生から教えられていたので、彼は彼の機能をすべて自己検証したいと思ったのは理にかなっていると思います。
アレックス、

10

より簡潔だったので、多くのメソッド/クラスでstaticを使用しました。私がテストを書き始めたとき、その実践は非常に速く変わりました。


10

チェックされた例外

紙の上で驚くべきアイデア-契約を明確に定義し、間違いや、例外条件のチェックを忘れる余地はありません。初めて聞いたときに売り切れました。

もちろん、それは実際にはそのような混乱になった。今日では、主な機能の1つとしてレガシーチェック例外を非表示にするSpring JDBCのようなライブラリを使用できるようになりました。


9

価値のあるものは、1つの特定の言語でのみコーディングされました。私の場合、私はCがこれまでで最高の言語であり、他の言語で何かをコーディングする理由がなかったと思っていました...

それ以来、私は多くの異なる言語とそれらが提供する利点/機能に感謝するようになりました。小さなものをすばやくコーディングしたい場合は、Pythonを使用します。大規模なプロジェクトに取り組みたい場合は、C ++またはC#でコーディングします。脳腫瘍を開発したい場合は、Perlでコーディングします。


8

何らかのリファクタリングを行う必要があるとき、すぐに始めて新しいデザインを実装し、接続が機能するまで接続を修正する方が速くてきれいだと思いました。その後、一連の小さなリファクタリングを行って、ゆっくりと、しかし確実に新しいデザインに向けて進む方がよいことに気付きました。


これが私に
噛ま

8

おそらく、私のコーディングプラクティスや他のコーディングプラクティスで変わった最大の点は、アプリケーションの動作と機能の基礎として、インターネットからダウンロードされた外部のクラスとライブラリを受け入れることです。私が大学に通っていた当時の学校では、独自のコードを使用して物事を改善する方法を見つけ、問題を解決するために言語に依存するように勧められました。ユーザーインターフェイスとサービス/データの消費のすべての面での進歩により、これはもはや現実的な概念ではなくなりました。

言語によって決して変更されない特定のことがあり、このコードをより単純なトランザクションでラップし、記述する必要のあるコードの行数を減らすライブラリがあることは幸運です。データベースへの接続は常に同じです。DOM内の要素を選択しても変わりません。サーバー側のスクリプトを介してメールを送信することは決して変更されません。この時間を何度も書く必要があるため、アプリケーションのコアロジックを改善するために使用できる時間を無駄に費やしています。


7

すべてのクラスメンバーを初期化しています。

私はすべてのクラスメンバーを明示的に、通常はNULLで初期化していました。私はこれに気づきました:

  • 通常、すべての変数が読み込まれる前に2回初期化されることを意味します
  • ほとんどの言語では自動的に変数をNULLに初期化するため、これはばかげています。
  • ほとんどの言語で実際にわずかなパフォーマンスヒットを強制します
  • より大きなプロジェクトでコードを膨らませることができます

4
ただし、すべてのクラスメンバーを初期化しないことによる影響が、a $$に実際に食い込むことがあります。
muusbolla

クローン作成によって新しいインスタンスを作成するプロトタイプベースの言語を使用している場合を除きます。すべてのメンバーを初期化することで、本当に多くの問題を回避できます。
Wojciech Bederski 2009

6

あなたと同じように、私もアプリのさまざまなコンポーネント間の結合を減らすためにIoCパターンを採用しました。各コンポーネントをできるだけ独立させておけば、メンテナンスと部品交換がはるかに簡単になります。また、NHibernateなどのより多くのオブジェクトリレーショナルフレームワークを利用して、データベース管理の作業を簡素化しています。

一言で言えば、私は「ミニ」フレームワークを使用して、ソフトウェアをより迅速かつ効率的に構築するのを支援しています。これらのミニフレームワークは多くの時間を節約し、正しく実行すれば、アプリケーションを将来的に維持するのが非常に簡単になります。勝利のためのプラグアンドプレイ!


-1 IoCとフレームワークの急増に我慢できない。優れたIoCとフレームワークの分離=不必要な複雑さ
ポールホリングスワース

デカップリングを称賛しながら、いまだにIoCや他のフレームワークを嫌うことができるでしょうか。それは、多くのIoCフレームワークと設計パターンがそもそも行うことです。
ajawad987 2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.