タグ付けされた質問 「language-agnostic」

このタグは、プログラミング言語または環境に固有ではない質問用です。

26
あなたが遭遇した最悪のアンチパターン[クローズド]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 6年前休業。 ロックされています。この質問とトピックへの回答はロックされています。質問はトピックから外れていますが、歴史的に重要です。現在、新しい回答や相互作用を受け入れていません。 プログラマーとしてのキャリアで出会った最悪のアンチパターンは何ですか? 私はJavaにほとんど関わっていますが、おそらく言語に依存していません。 最悪なのは、メインのアンチパターンと呼んでいるものだと思います。これは、すべてのロジックを含む単一の非常に大きなクラス(場合によっては、一対の小さなクラスを伴う)で構成されるプログラムを意味します。通常、すべてのビジネスロジックが含まれる大きなループがあり、時には数万行のコードが含まれます。

3
トレーサー弾丸を使用するためのいくつかの良い基準は何ですか?
最近、Pragmatic Programmerを初めて読んでいて、Tracer Bulletsの概念に出くわしました。私は過去にこのモデルに従ってコーディングしたことがあり、脳内で作業していた方法を「アジャイル」として提出しただけだと気付きました。 彼らは過去にそれを使用した場所の1つの例のみを示します。状況がトレーサー弾丸の良い候補であると特定された方法は、 多くの不明な点があり、多くの異なる環境があり、GUIがどのように動作するかを確信している人はいませんでした。 この種のプロジェクトは、膨大な数のプロジェクトの開始方法のように見えます。特に、例として、ヘッジファンドの一般的な基幹業務アプリケーションで技術者以外の人々と作業している場合はそうです。 私はそれが何と呼ばれているのか、私にそれを説明することを本当に知らずに、それが単に正しいと感じたのでそれを使用しました。全員を部屋に入れようとして、すべて(または少なくともいくつか)を前もって仕様化してもらうと、それは完全な惨事になることはわかっていましたが、これも一種の感じです... このモデルが最適な方法となる時期について、より具体的な基準を誰かが思い付くことができますか?

5
「純粋な関数」ではなく、外部APIまたはハードウェアと相互作用するメソッドは静的である必要がありますか?
メソッドを静的にするかどうかについて読んだとき、この投稿で要約されているように、メソッドは状態を変更せず、結果がそれ。ただし、この投稿で最も投票数の多い回答には、可能な限り静的メソッドを使用する必要があると記載されています。この投稿の回答の多くは、最も論理的なことは何でもすべきだと言っています。 私の場合、複数の場所で使用され、どのモデルまたはビューモデル(C#MVVMを使用)のメンバーとしても意味がないため、共通のユーティリティクラスに〜15のメソッドがあります。パッケージを使用してさまざまなハードウェアコンポーネントと対話するvoidメソッドがあります(たとえば、National Instruments、OPCクライアントなど)。一部の入力を取得し、APIに対してGETまたはPUTを実行してから応答を返すメソッドもあります。これらのメソッドはHttpClientまたは類似のものを使用します。これらのメソッドは、のような入力に対する単純な演算子ではなくMath.Sqrt()、状態を変更しません。 それで、そのようなメソッド(そしてこの場合、クラス全体)は静的でなければなりませんか?静的メソッドを持つ静的クラスがあることには明らかな利点があります。オブジェクトを作成する必要がないため、安全で高速です。また、これらの静的メソッドはそれぞれ、APIとハードウェアの相互作用のためにより多くの静的メソッドとクラスを使用します。私が目にする唯一の欠点は、TypeMock Isolatorのような有料のフレームワークで単体テストを書かなければならないことです。TypeMock Isolatorなどの有料サービスを使用してモックを作成するのが答えである場合、コストは問題になりません。コンセンサスであればそれで結構です。新しい開発者を獲得したり、プロジェクトが成長したりするときに、適切にスケーリングし、技術的な負債をほとんど残さない決定をしたいだけです。 これをより明確にするためにさらに情報を提供する必要があるかどうかをお知らせください!

3
設計:データベースの変更が原因で下位互換性が失われないようにする方法
これは私のシナリオです、私はこのインターフェースを持っています: public interface hitTheDataBase { public void insertMe(String [] values); public void modifyMe(String [] values); public DataTable selectMe(); } そして、私はインターフェースを実装するこれらの2つのクラスを持っています: public Class hitSqlServer implements hitTheDatabase { public void insertMe(String [] values) { executes insert into table_in_sqlServerBD (col1, col2) values(values[0], values[1]) } public void modifyMe(String [] values) { executes update table_in_sqlServerBD …

3
多言語ファイルのインデント[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 複数の言語を含むファイル(テンプレートファイルなど)で、インデントに関するベストプラクティスはありますか? 私は主にこれを使用します: <div> IF FOO <div> <p>contents> </div> END FOO </div> 言語に関係なく、新しいブロックごとにインデントします。ただし、これにはいくつかの欠点があります。より複雑なファイルでは、どちらかの言語のインデントを壊す可能性があります: <div> IF FOO <div someattribute> ELSE <div otherattribute> END FOO <p>content</p> </div> </div> 私はこれが使用されるのを見たこともあります: <div> IF FOO <div> <p>contents> </div> END FOO </div> つまり。1つの言語のみインデントします。これには常に一貫性があるという利点がありますが、より複雑なファイルでは、ブロックが条件付きであることなど、一部の実装の詳細をほぼ完全に隠すことができます。 ここでの目標は、明らかに読みやすさを最大化することです。

1
ボイラープレートコードの著作権ステータスは何ですか?
商用コードのオープンソースコンプライアンスを確認します。 最近、商用ソースがかなりの数のOSSプロジェクトと照合される例をいくつか見つけました。一致は非常によく似ていますが、正確ではありません。たとえば、約30行のコードに約4つのメソッドがあり、いくつかの変数名が異なり、商用コードにいくつかの余分な行がありますが、実質的に同じです。これは自動生成コードでもコピーパスタでもないと思います。コメントなどが異なるためです。 むしろそれは定型のように見えます-開発者は、Grails(およびこれらの例は常にGrailsで登場するように見えますが、フレームワークである可能性があります)はCRUD操作に特定のスクリプト形式を必要とすると言います(これらの例も主にCRUD操作です)。標準のソースコードスタイルを追加すると、定型文に相当します。たとえそれがオリジナルであったとしても、多くのコードベースで非常によく似たものになってしまいます。 それは私に2つの質問を残します: これは著作権侵害の告発に対する合理的な防御ですか? codeXが定型文であるが、codeYは定型文ではない(言語+フレームワークの専門家ではない)とどのように判断しますか?

4
依存データ構造を最新に保つにはどうすればよいですか?
構文解析ツリー、抽象構文ツリー、および制御フローグラフがあり、それぞれが前のものから論理的に派生しているとします。原則として、解析ツリーがあれば各グラフを作成するのは簡単ですが、解析ツリーが変更されたときにグラフを更新する複雑さをどのように管理できますか?私たちはツリーがどのように変更されたかを正確に知っていますが、管理が難しくならない方法で変更を他のツリーにどのように伝播できますか? 当然ながら、依存グラフは最初のグラフが変更されるたびに最初から再構築するだけで更新できますが、依存グラフの変更の詳細を知る方法はありません。 現在、この問題を解決する方法は4つありますが、それぞれに問題があります。 従属ツリーのノードはそれぞれ、元のツリーの関連ノードを監視し、必要に応じて自身と元のツリーノードのオブザーバーリストを更新します。これの概念的な複雑さは困難になる可能性があります。 元のツリーの各ノードには、それに依存する従属ツリーノードのリストがあり、ノードが変更されると、従属ノードにフラグを設定して、従属ノードの親を含め、ダーティとしてマークします。ルートに。変更のたびに、依存グラフを最初から作成するアルゴリズムとよく似たアルゴリズムを実行しますが、クリーンノードをスキップして各ダーティノードを再構築し、再構築されたノードが実際にダーティノードと異なるかどうかを追跡します。これも注意が必要です。 元のグラフと従属グラフの間の論理的な接続を、おそらく宣言型言語を使用して設計された制約のリストのようなデータ構造として表すことができます。元のグラフが変更された場合、違反している制約と違反を修正するために依存ツリーをどのように変更する必要があるかを見つけるためにリストをスキャンするだけで、すべてデータとしてエンコードされます。 既存の依存グラフがないかのように、依存グラフを最初から再構築し、既存のグラフと新しいグラフを比較して、どのように変化したかを確認できます。違いを検出するために利用できるアルゴリズムがあることを知っているので、これが最も簡単な方法であると確信していますが、それらはすべて非常に計算コストが高く、原則として不要と思われるため、このオプションは意図的に避けています。 この種の問題に対処する正しい方法は何ですか?確かに、このすべてをほぼ簡単にするデザインパターンがなければなりません。この一般的な説明のすべての問題に対して適切な解決策があると便利です。このクラスの問題には名前がありますか? この問題が引き起こすトラブルについて詳しく説明しましょう。この問題は、プロジェクトの2つの部分がグラフを操作するたびにさまざまな場所で発生します。各グラフは、ソフトウェアの実行中に変化する同じものの異なる表現です。これはインターフェースのアダプターを作成するようなものですが、単一のオブジェクトまたは固定数のオブジェクトをラップする代わりに、任意のサイズのグラフ全体をラップする必要があります。 私がこれを試す度に、私は混乱して維持不可能な混乱に終わります。オブザーバーの制御フローは、複雑になると追跡が困難になる可能性があります。あるグラフを別のグラフに変換するアルゴリズムは、通常、レイアウトが明確で複数のクラスにまたがっていない場合に追跡するには十分な注意が必要です。問題は、元のグラフが変更されているときに、単純で単純なグラフ変換アルゴリズムだけを使用する方法がないように見えることです。 当然のことながら、通常のグラフ変換アルゴリズムを直接使用することはできません。ゼロから開始する以外の方法で変更に対応できないためです。代わりの方法は何ですか?おそらく、アルゴリズムは継続渡しスタイルで記述できます。この場合、アルゴリズムの各ステップは、ビジターのように、元のグラフのノードのタイプごとにメソッドを持つオブジェクトとして表されます。次に、さまざまな単純なビジターを組み合わせてアルゴリズムを組み立てることができます。 別の例:JPanelsとレイアウトマネージャーを使用して、Java Swingの場合と同じようにレイアウトされたGUIがあるとします。複雑なレイアウトマネージャーの代わりにネストされたJPanelsを使用することでそのプロセスを簡略化できるため、レイアウト目的でのみ存在し、それ以外の場合は無意味なノードを含むさまざまなコンテナーのツリーになります。ここで、GUIの生成に使用されたものと同じツリーがアプリケーションの別の部分でも使用されていると想定しますが、ツリーをグラフィカルにレイアウトする代わりに、抽象表現ツリーをフォルダーのシステムとして生成するライブラリーを操作します。このライブラリを使用するには、レイアウトノードを持たないバージョンのツリーが必要です。レイアウトノードを親ノードにフラット化する必要があります。 もう1つの見方:可変ツリーを操作するというまさにその概念は、デメテルの法則に違反しています。構文解析ツリーや構文ツリーが通常のように値である場合は、実際には法律違反にはなりませんが、その場合は何も最新の状態に保つ必要がないため問題はありません。それで、この問題はデメテルの法則に違反した直接の結果として存在しますが、ドメインがツリーまたはグラフの操作に関するものであるように思われる場合、一般的にどのようにそれを回避しますか? 複合パターンは、 1つのオブジェクトにグラフを回すとデメテルの法則に従うための素晴らしいツールです。ある種類のツリーを別の種類のツリーに効果的に変換するために複合パターンを使用することは可能ですか?抽象構文木や制御フローグラフのように機能するように、複合解析ツリーを作成できますか?単一責任の原則に違反せずにそれを行う方法はありますか?複合パターンは、クラスが彼らが触れるすべての責任を吸収する傾向がありますが、おそらくそれは戦略パターンと何らかの形で組み合わせることができます。

2
APIを介したドメインモデルの公開
作業しているWebベースのアプリケーション用のシンプルなRESTful APIを構築しています。ドメインモデルを公開するための最良の方法について考えています。 Userクラスがあり、JSONレスポンスにさまざまなユーザープロパティを提供したいとします。セキュリティと帯域幅の問題のため、モデルのすべてのプロパティ(DateCreated、PasswordHashなど)を公開したくないのは明らかです。 私はデータ転送オブジェクトを読みましたが、これが進むべき道かどうか疑問に思っています。私が正しい場合、たとえば、ユーザーモデルをユーザーDTOに渡し、そのDTOが選択したユーザープロパティの公開のみを許可することを確認できます(これは、モデルをパブリックAPIから分離するのにも役立ちます)。 この解決策は適切ですか、またはこれについてより良い方法がありますか? ありがとう。

5
単一の反復ですべてのデータを収集するか、読み取り可能なコードの関数を使用するか
たとえば、最も高いランナー、最も速いランナー、最も軽いランナーを見つけるために必要な一連のランナーがあるとします。最も読みやすいソリューションは次のようになります: runners = getRunners(); tallestRunner = getTallestRunner(runners); fastestRunner = getFastestRunner(runners); lightestRunner = getLightestRunner(runners); ..各関数はランナーを反復処理し、最高の高さ、最高の速度、最低の重量を追跡します。ただし、配列を3回繰り返し処理することは、あまり良い考えではないようです。代わりにそれを行う方が良いでしょう: int greatestHeght, greatestSpeed, leastWeight; Runner tallestRunner, fastestRunner, lightestRunner; for(runner in runners){ if(runner.height > greatestHeight) { greatestHeight = runner.height; tallestRunner = runner; } if(runner.speed > ... } これは読みにくくありませんが、反復で抽出される情報の各部分にさらにロジックがあると、面倒になる可能性があります。 ここの中間点は何ですか?コードを論理ユニットに分割したまま、単一の反復のみを使用するにはどうすればよいですか?

2
大文字と小文字の区別が異なる複数の言語を操作するときはどうしますか?
Djangoを使用してwebappを作成しています。変数の命名に関するPythonの規則はlowercase_with_underscoresですが、JavaScriptの規則はcamelCaseです。さらに、多くの人がCSS識別子に小文字のハイフンを使用するのを見てきました。 他の2つが他を推奨している場合でも、必要に応じて3つすべての命名規則を使用するか、1つを選んでそれを使用することをお勧めしますか?前後に切り替えることは大きな問題ではありませんが、それでも精神的なオーバーヘッドになる可能性があります。

8
C ++の美しいコードとは何ですか?なぜほとんどのプログラマーはそんなに気にかけているのですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 ほとんどのプロジェクトはC ++ APIを使用しているため、APIの制約とプロジェクト自体の制約を扱います。 私はプログラミングの初心者ですが、OOPを使用するのは好きではありません。他のプログラマーが何らかの種類のデータ編成の一貫性を壊すのを防ぐためにプライベートスコープで制限することが非常に重要である理由を明確に誰も説明できなかったためです。 QtやOgre3Dのような素晴らしいものを作ることができるので、私はまだOOPで大丈夫ですが、それらはAPIであり、アプリケーションではなく、それらのコードは完璧である必要があり、誰も作業を批判できません。 ほとんどのプログラマーがAPIではなくアプリを作成しているため、なぜ天才的なコードを設計するような完璧なコードを作成し、これに時間を費やしたいのか、よくわかりません。

9
国際化:何について考えるべきか?
私は、を聞いていたジョンスキートの話最後のStackOverflowのDev日で、彼は国際化に関する私の好奇心をそそりました。 ワッフル作成プログラムが完了しているか、またはまだ進行中で、他の国に配布したいとします。国際化に関してどのようなことを心配する必要がありますか?自明ではないが簡単な落とし穴は何ですか?

7
TDDで常にユニットテストを記述していますか?
私は長い間、TDDスタイルのコードを設計および開発してきました。TDDについて私を悩ませているのは、ビジネスロジックや興味深い動作を含まないコードのテストを作成することです。TDDはテスト以上の設計アクティビティであることは知っていますが、これらのシナリオでテストを記述することは役に立たないと感じることがあります。 たとえば、「ユーザーがチェックボタンをクリックすると、ファイルの有効性をチェックする」という簡単なシナリオがあります。このシナリオでは、通常、以下のようなプレゼンター/コントローラークラスのテストの作成を開始します。 @Test public void when_user_clicks_check_it_should_check_selected_file_validity(){ MediaService service =mock(MediaService); View view =mock(View); when(view.getSelectedFile).thenReturns("c:\\Dir\\file.avi"); MediaController controller =new MediaController(service,view); controller.check(); verify(service).check("c:\\Dir\\file.avi"); } ご覧のとおり、動作を検証するための設計上の決定や興味深いコードはありません。MediaServiceに渡されたビューから値をテストしています。私はいつも書いていますが、この種のテストは好きではありません。これらの状況についてどうしますか?あなたはいつもテストを書いていますか? 更新: 苦情の後にテスト名とコードを変更しました。一部のユーザーは、このような些細なケースのテストを記述して、将来誰かが興味深い動作を追加する可能性があると述べました。しかし、「今日のコード、明日のデザイン」についてはどうでしょう。?私を含む誰かが将来さらに興味深いコードを追加した場合、そのテストを作成できます。ささいなことでなぜ今やらなければならないのですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.