タグ付けされた質問 「programming-practices」

プログラミングプラクティスは、ソフトウェアの開発で一般的に使用される、またはあまり使用されないプラクティスです。これには、アジャイル開発、かんばん、コーディングのショートカットなどが含まれます。

5
実装に依存しないことは本当に価値がありますか?
現在、Tomcat、Spring 4、Spring Security、MySQL、およびJPA w / Hibernateを使用して取り組んでいるプロジェクトがあります。 私は、ORMプロバイダーの基盤となる実装をシームレスに、または少なくとも痛みを軽減するために、JPAを選択しました。これは、実装(JAX-RS)よりも仕様を精神的に使用しているということは、Java開発コミュニティのデフォルトの観点であると言えます。 これが本当にやりがいのある仕事であるかどうか興味があります。Hibernateを直接使用した場合、メインのJPA仕様の一部ではない機能を使用できるため、ある程度のパワーが得られると確信しています。 私の懸念の一部は、YAGNIのアイデアから来ています。私は本質的に特定のスタイルと方法でプログラミングしているため(Hibernateの代わりにJPAを使用)、将来のある時点でORM実装を交換できます。私は製品の寿命にわたってこれが起こることをひどく疑っているので、私は本質的に私はおそらく恩恵を決して享受しないものに努力しています。 あなたの考えは何ですか?JPAのようなものになると、「インターフェースへのプログラミング」は価値がありますか?実際に製品のORM実装全体を交換したことはありますか?とにかくJPAリークのようなものからの抽象化を完全に回避できたことがありますか?個人的には既にデータベーステーブルをクリーンアップするために単一のネイティブSQL呼び出しがあり、JPA仕様に組み込まれているもの(メソッドのプレフィックスの取得/設定、およびMEMBER OFの違い) / IN。これは、基礎となる実装に自分自身をバインドするだけで、回避する機会を与えてくれます。

6
CSVはXMLとJSONの優れた代替手段ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 されたCSVはに対して良いオプションと考えXMLとJSONをプログラミング言語のために? 通常、フラットファイルストレージとしてXMLとJSON(またはプレーンテキストファイル)を使用します。しかし、最近、PHPの CSV実装に出会いました。ただし、Excelファイルの入力にCSVが使用されていることは一般的に見ていますが、プログラミングでは使用していません。XMLやJSONよりも優れているでしょうか?

10
オーバーエンジニアリングは警告サインですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 そのため、いくつかの明確に定義された要件を備えた新しい候補者に、簡単なコーディング演習を提示します。時々、実際に目の前の問題を解決することはできませんが、認識された問題を解決するために過剰に設計されたソリューションを受け取ることがあります-多くの場合、演習の範囲外です。 さて、私の質問は、これは警告サインですか? 編集:議論のかなりの部分は、テストの欠陥に基づいています-これは公平な点です。コメントで説明したように、テストの基本的な前提は、ファイルからデータを賢明な方法で読み取る方法を示すことです(そして、私たちが見るさまざまなアプローチに驚かれることでしょう)。更新間の待ち時間を計算する前の項目。これが機能するためには、データについて特定の前提条件を作成する必要があり、これらの前提条件を探します。また、2時間ですべてのアプローチ(OOアプローチなどを含む)を見たいと明示的に述べています。時間枠。 私見、私がインタビューしたとき、それは私が出くわした中で最も完全な運動でした。 私が熟考している特定のシナリオは、ファイルから読み取るのではなく、候補がマルチスレッドアプリケーションで「ネットワーク」入力を受け入れた場合です。これは明らかに範囲外です。

4
クラスメソッドの数の制限は何ですか?
私が読んださまざまなデザインの本では、クラスに必要なメソッドの数に重点が置かれることがあります(たとえば、JavaまたはC#などのオブジェクト指向言語を考慮)。多くの場合、これらの本で報告されている例は非常に簡潔でシンプルですが、「深刻な」または複雑なケースをカバーすることはめったにありません。 ただし、範囲は5〜8のようです。 プロジェクトでは、属性としてTitle、Desctiption、CreateDateなどの属性を持つクラス「Note」を開発しました。次に、getRelations(メモが別のドキュメントに割り当てられている場合)、getExpiryDate、ect などの基本的なメソッドを作成しました。 ただし、アプリケーションの開発を進めるには、より多くの機能が必要であったため、より多くのメソッドが必要でした。 クラスのメソッドが少ないほど、疎結合になります。これは、モジュール性と再利用性の面で確かに優れた利点であり、さらに編集が容易です。 ちなみに、コンテキストでサブクラスを作成する必要がない場合(または感覚さえある場合)、必要なすべての関数がそのクラスに関連している場合、さらにいくつのメソッドを追加できますか? 15を超えるメソッドを使用する場合は、少し再設計が必要になる可能性があることに同意します。しかし、その場合でも、メソッドまたは継承の一部を削除することがオプションではない場合、適切な方法はどれですか?

2
可変幅タイプは、最新のCの固定タイプに置き換えられましたか?
本日、Code Reviewのレビューで興味深い点に出会いました。@Veedracはにrecommened この回答可変サイズの種類(たとえばことintとがlong)のような固定サイズの種類に置き換えることuint64_tとuint32_t。その答えのコメントからの引用: intおよびlongのサイズ(およびそれらが保持できる値)はプラットフォームに依存します。一方、int32_tは常に32ビット長です。intを使用するということは、コードがプラットフォームごとに異なる動作をすることを意味しますが、これは一般的には望んでいないことです。 共通の型を修正しないという標準の背後にある理由は、@ supercatによって部分的に説明されています。Cは、当時システムプログラミングに通常使用されていたアセンブリとは対照的に、アーキテクチャ間で移植できるように作成されました。 設計意図はもともと、int以外の各タイプがさまざまなサイズの数を処理できる最小のものであり、そのintが+/- 32767を処理できる最も実用的な「汎用」サイズであると思いました。 私については、私はいつも使用intしており、代替案についてはあまり心配していません。私はいつも、これが最高のパフォーマンス、ストーリーの終わりを持つ最もタイプだと思っていました。固定幅が便利だと思った唯一の場所は、ストレージ用またはネットワーク経由の転送用にデータをエンコードする場合です。他の人が書いたコードで固定幅タイプを見ることはめったにありません。 私は70年代に行き詰まっintていますか、それともC99以降の時代に使用する理論的根拠はありますか?

5
巨大な接着方法を避ける方法は?
私の現在の仕事では、古いコードを数回クリーンアップする仕事をしました。多くの場合、コードは迷路であり、その背後のデータはさらに複雑です。私は物事をすてきな、きちんとした、モジュール式の方法にまとめると思います。各メソッドは1つのことを行い、それをうまく行います。それは物事が南に行き始めるときです... 常に、私はきれいなAPIになり、それをすべて結びつける実際の方法はありません。解決策は、最終的にすべての「クリーン」メソッドを呼び出す、大きない「グルー」メソッド(通常は条件ステートメントでいっぱい)を記述することです。 通常、glueメソッドは、クリーンアップしようとしたコード/データのもつれの簡潔なバージョンになります。一般的に読みやすいですが、それでもいらいらします。 そのような方法を避けるにはどうすればよいですか?これはもつれたデータの症状なのでしょうか、それとも私が間違っていることを反映しているのでしょうか?

5
コード内のすべての数字は「マジックナンバー」と見なされますか?
したがって、引数としてメソッドに送信するコード内のすべての数値は、マジックナンバーと見なされますか?私には、そうすべきではありません。いくつかの数字がユーザー名の最小長であるとしましょう。コードで「6」を使用し始めます...それからメンテナンスの問題があり、ここで「6」は魔法の数字です...引数の1つが、たとえばコレクションのi番目のメンバーとして整数を受け入れるメソッドを呼び出している場合、そのメソッド呼び出しに「0」を渡すと、この場合、「0」が魔法として表示されません数。どう思いますか?

9
新しいプログラマーに例外処理を教える方法は?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 例外処理をプログラマーに教える方法を教えてください。他のすべてのこと-データ構造、ASP.NET、WinForms、WPF、WCF-を簡単に教えられます。名前を付ければ、すべてが簡単に教えられます。 例外処理では、try-catch-finallyを教えることは、例外処理の構文的な性質にすぎません。 ただし、教えるべきことは-コードのどの部分をtryブロックに入れますか?catchブロックで何をしますか? 例で説明しましょう。 Windows Formsプロジェクト(小さなユーティリティ)で作業しており、3つの異なるプロジェクトで以下のように設計しました。 UILayer BusinessLayer DataLayer DataLayerで例外(XDocumentをロードすると例外がスローされると言います)が発生した場合(UILayerがBusinessLayerを呼び出し、BusinessLayerがDataLayerを呼び出します)、次のようにしますか? //In DataLayer try { XDocument xd_XmlDocument = XDocument.Load("systems.xml"); } catch(Exception ex) { throw ex; } BusinessLayerで再びスローされ、ログファイルに書き込むUILayerでキャッチされるのはどれですか? これはあなたが例外処理をどのように行っているのですか?

6
効率的なtry / catchブロックの使用法?
catchブロックは、ロジックの記述、つまりフロー制御などの処理に使用する必要がありますか?または、例外をスローするためだけに?コードの効率や保守性に影響しますか? catchブロックにロジックを記述した場合の副作用(ある場合)は何ですか? 編集: catchブロック内にロジックを記述したJava SDKクラスを見てきました。例(java.lang.Integerクラスから抜粋したスニペット): try { result = Integer.valueOf(nm.substring(index), radix); result = negative ? new Integer(-result.intValue()) : result; } catch (NumberFormatException e) { String constant = negative ? new String("-" + nm.substring(index)) : nm.substring(index); result = Integer.valueOf(constant, radix); } EDIT2: 私は、例外の中に例外的なケースのロジックを書くことの利点としてそれを数えるチュートリアルを行っていました: 例外を使用すると、コードのメインフローを記述し、例外的なケースに対処することができます。 catchブロックでロジックを作成する場合としない場合の具体的なガイドラインはありますか?

3
デカップリングとは何ですか?また、どの開発分野に適用できますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 私は最近、デカップリングが質問のトピックであることに気付き、それが何であり、どこで適用できるかを知りたいです。 「どこに適用できる」とは、次のことを意味します。 CやJavaのようなコンパイルされた言語が関係する場合にのみ関係がありますか? ウェブ開発者としてそれを知って勉強すべきですか?

2
フロントエンドで計算を行うのが適切なのはいつですか?
私のチームはWEBベースの財務アプリケーションを開発していますが、同僚と計算をどこで行うべきかという議論が少しありました。純粋にバックエンドで行うのか、それともフロントエンドで行うのですか? 簡単な説明:フロントエンドにはJava(ZK、Spring)を使用し、バックエンドにはProgress 4glを使用しています。筋金入りの数学とデータベースからのデータを含む計算はバックエンドに保持されるため、私はそれらについて話していません。ユーザーが値Xを入力し、値Yに追加され(画面に表示)、結果がフィールドZに表示される状況について話しています。純粋で単純なjQueryのような操作、つまり。 ここで、ベストプラクティスは次のとおりです。 1)JavaScriptを使用して値を追加し、バックエンドに行ったり戻ったりするのを防ぎ、バックエンドで「保存時」にそれらを検証しますか? 2)すべてのビジネスロジックを同じ場所に保持します。したがって、値をバックエンドにもたらし、そこで計算を行いますか? 3)フロントエンドで計算を行います。次に、データをバックエンドに送信し、そこでデータを検証し、計算を再実行します。結果が有効で等しい場合にのみ、ユーザーに表示しますか? 4)他に何か? 注:Javaでいくつかの基本的な検証を行いますが、ほとんどは他のすべてのビジネスロジックと同様にバックエンドにあります。 バックエンドのすべてを再計算することで送信されるデータの増加は問題になりません(XMLサイズが小さい。サーバーと帯域幅はユーザーの操作量の増加に耐えます)。

4
フロントエンドとバックエンド間のトランスポートとしてフラットファイルとデータベース/ APIを使用する
数人の開発者の間で議論がかなり白熱したアプリケーションがあります。 基本的に、Webレイヤーとバックエンドレイヤーに分割されます。Webレイヤーは単純なWebフォームによって情報を収集し、このデータをJSONドキュメント(文字列は.jsonファイル)としてバックエンドが使用する監視フォルダーに格納します。バックエンドは数秒ごとにこのフォルダーをポーリングし、ファイルを取得して、その機能を実行します。 ファイル自体は非常にシンプル(つまり、すべての文字列データ、ネストなし)で、最大で1〜2kで、システムはほとんどの時間をアイドル状態にします(ただし、最大100メッセージまでバーストします)。バックエンド処理ステップは、メッセージごとに約10分かかります。 議論は、ある開発者がファイルシステムをメッセージングレイヤーとして使用することは悪いソリューションであると示唆した場合、リレーショナルデータベース(MySQL)、noSQLデータベース(Redis)、またはプレーンREST APIコールなどを代わりに使用する必要がある場合に出てきます。 Redisは、キュー内のメッセージ処理のために組織内の他の場所で使用されることに注意してください。 私が聞いた議論は次のように分類されます フラットファイルを支持して: フラットファイルは、他のソリューションよりも信頼性が高くなります。ファイルは、「監視」フォルダーから、取得後に「処理」フォルダーに、最後に「完了」フォルダーに移動するためです。とにかく他のものを壊すような非常に低レベルのバグがない限り、メッセージが消えるリスクはありません。 フラットファイルを理解するには、それほど高度な技術は必要ありません- catそれだけです。書き込むクエリはありません。誤ってメッセージをキューからポップして、メッセージが永遠に消えてしまうリスクはありません。 ファイル管理コードは、すべての言語の標準ライブラリの一部であるため、プログラミングの観点からデータベースAPIよりも簡単です。これにより、コードベースの全体的な複雑さと、導入する必要のあるサードパーティコードの量が削減されます。 YAGNI原則州フラットファイルが今うまく動作することを、それを残して、より複雑なソリューションに変更するための実証され必要はありません。 データベースを支持して: ファイルがいっぱいのディレクトリよりもデータベースを拡張する方が簡単です フラットファイルには、誰かが「完了」ファイルを「監視」ディレクトリにコピーして戻すリスクがあります。このアプリケーションの性質(仮想マシン管理)により、これにより壊滅的なデータ損失が発生する可能性があります。 T / Sにより高度な技術を必要とするアプリは、教育を受けていないスタッフが物事を突くだけで何かを台無しにする可能性が低いことを意味します。 特にRedisなどのDB接続コードは、少なくとも標準ライブラリファイル管理機能と同じくらい堅牢です。 DB接続コードは、ファイル操作よりもレベルが高いため、開発者の観点からは(機能的にではないにしても)明らかに単純です。 私が見ることができることから、両方の開発者は多くの有効なポイントを持っています。 これら2人のプロファイル開発者、またはプロデータベース開発者のうち、どちらがソフトウェアエンジニアリングのベストプラクティスに沿っているのでしょうか?

2
コードを見るだけで、APIが何をしているのかを常に知る必要がありますか?
最近、私は自分のAPIを開発しており、そのAPI設計への投資に興味を持ち、API設計を改善する方法に強い関心を持っています。 数回登場した側面の1つは(私のAPIのユーザーによるものではなく、トピックに関する私の観察中の議論による)です。 たとえば、談話レポについてはGitHubでのこの議論を参照してください。 foo.update_pinned(true, true); (パラメータ名、ドキュメントなどを知らずに)コードを見るだけでは、何をしようとしているのか推測できません。2番目の引数はどういう意味ですか?推奨される改善策は、次のようなものにすることです。 foo.pin() foo.unpin() foo.pin_globally() そして、それは物事を明確にします(2番目の引数はfooをグローバルに固定するかどうかでした、私は推測しています)、この場合、後者は確かに改善されることに同意します。 ただし、コードを見ただけでは何をしているのかわからない場合でも、異なるが論理的に関連する状態を設定するメソッドが、個別のメソッド呼び出しではなく、1つのメソッド呼び出しとしてより適切に公開される場合があると思います。(したがって、パラメータ名とドキュメントを調べて調べる必要があります-個人的には、APIに不慣れな場合は常に何をしてもかまいません)。 たとえばSetVisibility(bool, string, bool)、FalconPeerで 1つのメソッドを公開し、次の行を確認するだけです。 falconPeer.SetVisibility(true, "aerw3", true); あなたはそれが何をしているのか分からないでしょう。falconPeer論理的な意味での「可視性」を制御する3つの異なる値を設定しています。パスワードのみで参加要求を受け入れ、検出要求に応答します。これを3つのメソッド呼び出しに分割すると、APIのユーザーは、「可視性」のすべての側面を設定するために1つのメソッドを公開するだけで他のユーザーに設定を忘れさせる「可視性」の側面を設定することになります。さらに、ユーザーが1つのアスペクトを変更する場合、ほとんどの場合、別のアスペクトを変更する必要があり、1回の呼び出しで変更できます。

3
コードを書くとき、コンパイルされたマシンコードについて考える必要がありますか?
たとえば、次のコードがあります。 auto z = [](int x) -> int { if (x > 0) { switch (x) { case 2: return 5; case 3: return 6; default: return 1; } } return 0; }; そして、後でこれを数回呼び出します。asmコードでは、ラムダを使用した外部呼び出しが表示されます。メタプログラミングで勝つかもしれませんが、asmのデバッグとパフォーマンスで負けるのですか?パフォーマンスとデバッグの単純さを確実にするために、最新の言語機能、マクロ、およびその他のメタプログラミングの側面を避ける必要がありますか?

10
プログラマとして苦労しています。アドバイスが必要[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は今何年もの間開発者です。私は自分の仕事にかなり長けており、「仕事を終わらせる」ことができます。 しかし、「仕事をやり遂げる」と「仕事をきちんと行う」には違いがあります。例を使用しましょう。 最近、ウェブサイトをゼロから開発しました。ウェブサイトは正常に動作し、問題はありませんでした。コードを見てみると、もっとうまくやれると思いました。MySQLクエリを削減できたかもしれません。MVCを使用して拡張を容易にすることもできました(現在は拡張する必要があります)。 CodeIgniterを使用してプロジェクトを書き直すことにしました。私はフレームワークが好きです。しかし、MySQLクエリを削減するために高度な結合を学習しなければならなかったため、私は脇道になりました。 そしてこれが問題です。私がきちんと仕事をするたびに、私は絶え間ない学習の輪にいます。また、高度なMySQL参加などのトピックは学習に時間がかかり、実装に時間がかかります。 私は会社に勤めていません。私はすべてを一人でやります。だから、もし私が会社のPHP開発者として働いていたら、SQLを処理する別のチームがあると想像します。 ソロであることは難しいです。そして時々、私の知識は進んでいますが、質問の後に質問をすることがあります。私はおそらく自分の仕事に大きな誇りを持っています。しかし、完全なプロジェクトを処理する会社で働かなければならないとしたら、自分のプライドを満たし、「正しい」ことを確実にするために、より多くのことを学ばなければならないので、プロジェクトに時間がかかると想像できます。 私は新しい年の後に仕事に就く予定です。仕事のセキュリティが必要です。それが、私がこの質問をしている理由です。 自己啓発と自己改善に関して、どのようなアドバイスができますか?心配する必要はありませんか?または、SQLクエリを直接処理しない場合、PHP開発者としての仕事を探していますか?

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