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

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

3
Javaで非推奨にするタイミングと削除するタイミング
リファクタリングの努力または継続的な開発の一環として、特定のメソッドまたはクラス全体が何らかの意味で廃止される可能性があります。Javaは@Deprecated注釈をサポートして、問題の機能を処理するより良い方法があることを示します。これは、APIの一部を削除した場合の影響がわからないかもしれないパブリックAPIで特に役立つと思います。非パブリックAPIおよびリビジョン管理システムを使用するプロジェクトの場合(削除は何らかの意味で元に戻すことができます)、廃止された要素を削除するのではなく、廃止するのが適切なのはいつですか?

3
JavaのCollectionインターフェースを使用する正当な理由はありますか?
そのインターフェイスの特定の実装に縛られないように、利用可能な最も一般的なインターフェイスを使用すべきだという議論を聞いたことがあります。このロジックはjava.util.Collectionなどのインターフェースに適用されますか? 私はむしろ次のようなものを見たいです: List<Foo> getFoos() または Set<Foo> getFoos() の代わりに Collection<Foo> getFoos() 最後のケースでは、どの種類のデータセットを扱っているのかわかりませんが、最初の2つのインスタンスでは、順序付けと一意性についていくつかの仮定を立てることができます。DOES のjava.util.Collectionはセットとリストの両方のための論理的な親であることの有用性の外側を持っていますか? コードレビューを行うときにCollectionを使用するコードに出くわした場合、その使用法が正当であるかどうかをどのように判断し、より具体的なインターフェイスに置き換えるためにどのような提案をしますか?

6
チームワークの計画を支援するためにどのソフトウェアを使用していますか?その理由は何ですか?
計画は非常に困難です。私たちは自然に自分の将来を予測するのが得意ではなく、多くの認知バイアスが問題を悪化させています。グループ計画はさらに困難です。不完全な情報、一貫性のない状況の見解、およびコミュニケーションの問題は、困難をさらに悪化させます。 アジャイルメソッドは、グループ計画を整理するための1つのフレームワークを提供します。全員に見える計画(ユーザーストーリー)を作成し、それを小さなチャンク(スプリント)に分割し、レトロスペクティブ分析を提供して計画を改善します。しかし、これらのプラクティスをサポートするための優れたツールを見つけることは難しいことです。 これらの目標を達成するためにどのソフトウェアツールを使用していますか?なぜそのツールを使用しているのですか?どのような成功はしているあなたは、特定のツールを使用していましたか?

7
「ソフトウェアエンジニアリング」ではなく「ソフトウェアクラフツマンシップ」と呼ばれる特定のプラクティスはどれですか。[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 ない新しい発想年の最後のカップル以上のソフトウェアクラフトマンシップへの関心に大きな増加(特に、多くの場合、お勧め書籍クリーンコードの完全なタイトルがあるされているように思わ:アジャイルのAハンドブッククリーンコードソフトウェア職人)。 個人的には、ソフトウェアクラフツマンシップは優れたソフトウェアエンジニアリングであり、最終結果が(エンドユーザーとしても、そのソフトウェアを保守する人としても)楽しめることを保証することに追加の関心を抱いています。物事のより高いレベルは物事を処理します。 類推するために-50年代と60年代に非常に近代的なスタイルで建設された多くの建物があり、それらに住む人々やそれらの建物の経年変化をほとんど考慮していませんでした。これらの建物の多くは急速にスラム街に発展したか、予想される寿命よりもずっと前に取り壊されました。数年の経験を積んだほとんどの開発者は、同様のコードベースを経験しているはずです。 ソフトウェアの職人がソフトウェアエンジニア(おそらく悪いもの)ができない特定のことは何ですか?

12
ブール論理の保守性-ステートメントが必要な場合、ネストしますか?
これらのどれが保守性に優れていますか? if (byteArrayVariable != null) if (byteArrayVariable .Length != 0) //Do something with byteArrayVariable または if ((byteArrayVariable != null) && (byteArrayVariable.Length != 0)) //Do something with byteArrayVariable 私は2番目のものを読み書きすることを好みますが、そのようなことを行うと保守性が悪くなることを完全なコードで読んだことを思い出します。 これはif、最初の部分がfalseであり、すべての言語がそれを行うわけではない場合、2番目の部分を評価しないように言語に依存しているためです。(nullで評価された場合、2番目の部分は例外をスローしますbyteArrayVariable。) それが本当に心配なのかどうかわからないので、質問に対する一般的なフィードバックをお願いします。 ありがとう。

2
DDDの例外
私はDDDを学んでいて、特定の状況で例外をスローすることを考えています。私はオブジェクトが悪い状態に入ることができないことを理解しているので、ここで例外は問題ありませんが、多くの例では、たとえば、データベースに電子メールが存在する新しいユーザーを追加しようとした場合にも例外がスローされます。 public function doIt(UserData $userData) { $user = $this->userRepository->byEmail($userData->email()); if ($user) { throw new UserAlreadyExistsException(); } $this->userRepository->add( new User( $userData->email(), $userData->password() ) ); } したがって、この電子メールを持つユーザーが存在する場合、アプリケーションサービスで例外をキャッチできますが、try-catchブロックを使用してアプリケーションの操作を制御するべきではありません。 これに最適な方法は何ですか?

4
サービスをラップして簡単にする方法
私たちは、3つのメソッドのように必要なだけの巨大なインターフェースを公開するサードパーティのサービスに依存しています。さらに、インターフェースは頻繁に変更されます... プロジェクトのクラスにインターフェイスをラップし、必要なメソッドのみを公開することにしました。 しかし、私は戻り値をどのように処理するべきかわかりません...インターフェイスは型のオブジェクトを返しますStorage。内部StorageModelには、の内部表現であるタイプがありますStorage。 マッパーで何を返しますか:StorageまたはStorageModel?StorageService挿入されたラッパーの依存関係を取得するDataServiceがあります。 現在、私は基本的に次のようにしています: public class StorageService { private readonly IExternalStorageWrapper externalStorageWrapper; public StorageService(IExternalStorageWrapper externalStorageWrapper) { this.externalStorageWrapper = externalStorageWrapper; } public StorageModel GetStorage(int storageId) { return this.externalStorageWrapper.GetStorage(storageId).ConvertToStorageModel(); } } public class ExternalStorageWrapper : IExternalStorageWrapper { public Storage GetStorage(int storageId) { using(var ext = new ExternalStorage()) { return ext.GetStorage(storageId); } …

4
オブジェクト指向プログラミングのメインの責任は何ですか?
私はオブジェクト指向プログラミングに不慣れで、メインの目的が何なのかわかりません。 はい、私はそれがプログラムの「入り口」であると読みましたが、私が理解していないことは、メインに何があるべきかです。そして、その責任は何ですか? メインで記述された何かが別のオブジェクトにカプセル化される可能性がありますが、このアプローチをどの程度使用する必要がありますか? これが私がJavaで書いた最初のメインです。非常にシンプルですが、私の疑問をよりよく理解してくれるかもしれません。「Cat」と「Dog」によって拡張された抽象クラスAnimalがあります。メインを使用してオブジェクトを作成し、ユーザーとの「インターフェース」としても使用しました。実際に、条件付きの指示を使用して、ユーザーが何をしたいかを「ユーザーに尋ねる」ことができます。 私の質問は、インターフェイスが別のオブジェクトにカプセル化され、メインにその責任を与えないという事実から生じました。 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("What type of animal do you want to create? \n dog cat"); String type = input.nextLine(); if ( Objects.equals(type, "dog")){ System.out.println("Enter the animal's age: "); int age = input.nextInt(); // Scans the next token …

5
文字列内にテキストマーカーを配置するのは悪いスタイルですか?代わりはありますか?
私は多くの操作を必要とする巨大な文字列を扱います。 たとえば、次のような文字列を生成します。 パート1 ボート セクションA プログラミング パート2 プログラミング用の分割ボート。 セクションAA セクションSQLエントリ。 文字列が大きすぎて手動ですべての部分をチェックすることはできません。今、私はする必要がありsplit、このstring中stringlistのセクションおよび部品によって。2つのオプションを考えることができます。 正規表現: QStringList sl = s.split(QRegularExpression("\n(?=Part [0-9]+|Section [A-Z]+)")); それはうまくいくように見えますが、時々例外が通り抜けます(IE:Section SQL Entries誤って分割されます) それ以外の場合は、最初の文字列を生成するときにマーカーを配置できます。 🚤💻パート1 ボート 🚤💻セクションA プログラミング 🚤💻パート2 プログラミング用のパーティショニングボート。 🚤💻 セクションAA セクションSQLエントリ。 つまり、文字列の分割が簡単になります。 QStringList sl = s.split("🚤💻")); これらのどちらも良いスタイルやプログラミングの実践ではないことはわかりますが、この時点まで、それについては議論しておらず、代替案も見つけていません。 あなたが私のプロジェクトマネージャーである場合、これらの方法のいずれかを受け入れますか? そうでない場合、私がベストプラクティスとして何をすればよいと思いますか?

4
IDEプロジェクトのリポジトリに何を含める必要があるか
この場合はNetbeansで作成されたプロジェクトを追加したいのですが、この質問はほとんどのIDEで一般的です。それは単に、リポジトリに何を含めるべきかということです。たとえば、Netbeansはnbprojectフォルダーを作成し、eclipseは.settingsフォルダーを作成します。これらをリポジトリに含めた場合、プロジェクト固有の設定を含めるか含めないことの利点/欠点は何ですか。 この場合、それは個人的なプロジェクトなので、他の人がプロジェクトに取り掛かることはないと思いますが、最小限のプロジェクト設定を追加して、プロジェクト自体が別のマシンで簡単に作業を開始できるようにするとよいでしょう。

4
データ構造を使用するアルゴリズムとデータベースを使用するアルゴリズムの違いは何ですか?
一般的な質問 データ構造を使用するアルゴリズムとデータベースを使用するアルゴリズムの違いは何ですか? いくつかのコンテキスト これはしばらくの間私を悩ませてきた質問であり、私はそれについて説得力のある答えを出すことができませんでした。 現在、もちろん、データ構造に深く関わるアルゴリズムの理解を深めることに取り組んでいます。これらは、バッグ、キュー、スタック、優先度キュー、ヒープなどの基本的な構造です。 また、データベースを日常的に使用して、エンドユーザーによって処理および送信された、またはプログラムによって処理されたデータを保存します。データベースのテーブルに基づいて生成される独自のデータ構造を持つDALを介して、データを取得して送信します。 私の質問は、データベースを使用してデータをソートして、昇順/降順で注文したデータを返送するか、データを取得してロジックにロードし、このデータを優先度キューで処理し、ヒープソートするオプションがあるときに発生しますそれのすべて。または、レコードのサブセットをロードするのではなく、データベースを使用してレコードを検索し、バイナリ検索のようなものを使用して、興味のあるレコードを見つけることもできます。 私の考えでは、通信は高価であるため、送信する前に、データベース側でできるだけ多くの操作を実行しようと思います。また、データベースのデータではなく、独自のロジック内で厳密に定義されたアルゴリズムとデータ構造を使用してデータを処理するのはいつですか。 だからここに質問があります... ご質問 データ構造とデータベースの違いは何ですか? データベースのロジックではなく、独自のロジック内でのみ定義されたデータ構造を使用するアルゴリズムをいつ使用しますか? @Harveyの投稿:データベース内のメソッドを使用すると、独自のロジック内のメソッドよりも効率が悪くなりますか? @mirculixxの投稿:メソッドを効率的にするものは何ですか? @Harveyポスト:データベースで行うよりもデータ構造でデータを処理する方が高速ですか? 明確化 @Grant post:私が通常使用するデータベースはリレーショナルであり、これらの質問はそれらを使用することから生まれています。ただし、これらの質問はどの永続フレームワークにも適用できると思います(フレームワークとは、最も一般的な意味での意味です)。 特定の文脈がないと答えが難しいことは知っています。考えられる食べ物、アドバイス、または議論のポイントは、主に私が探しているものであり、最もありがたいです!

3
ソフトウェア開発における「疑似実装」のようなコンセプトはありますか?
私は、技術/スケーラブルな製品を開発するための時間を費やすことなく、製品やデモをすぐに始めるために、人間ベースの計算方法やアルゴリズムを「偽造」する他の手段を使用する慣行を説明するラベルを探しています/分析ソリューション?例:Amazon Turkを使用して、レストランの空のテーブルの数をカウントします。 私はまた、この主題についてもっと知りたいと思っていますが、何を検索すればよいかわかりません。人間ベースの計算は1つの方法にすぎません。疑似実装の一般的な考え方に興味があります。何かアイデア、お勧めの読書?

3
XMLコメントは必要なドキュメントですか?
私はかつて、ドキュメントにXMLコメントを要求するファンでした。それ以来、私は2つの主な理由で考えを変えました。 優れたコードのように、メソッドは自明でなければなりません。 実際には、ほとんどのXMLコメントは無意味なノイズであり、付加価値はありません。 多くの場合、GhostDocを使用して一般的なコメントを生成しますが、これは役に立たないノイズとは次のことを意味します。 /// <summary> /// Gets or sets the unit of measure. /// </summary> /// <value> /// The unit of measure. /// </value> public string UnitOfMeasure { get; set; } 私には、それは明白です。とはいえ、含める特別な指示がある場合は、XMLコメントを絶対に使用する必要があります。 私はこの記事からのこの抜粋が好きです: 時々、あなたはコメントを書く必要があるでしょう。しかし、それは規則ではなく例外であるべきです。コメントは、コードでは表現できないものを表現している場合にのみ使用してください。エレガントなコードを記述したい場合は、コメントを削除し、代わりに自己文書化コードを記述してください。 コードがそれ自体で説明するのに十分でない場合にのみXMLコメントを使用すべきだと思うのは間違っていますか? これは、XMLコメントによってかなりのコードが見苦しく見える好例です。それはこのようなクラスを取ります... public class RawMaterialLabel : EntityBase { public long Id { get; set; } …

3
言語へのプログラミングとRubyでのCコードの作成
コードコンプリート状態あなたが遠かったコードなければならないことへのコードとは対照的に、言語で、それは。つまり、彼らは プログラミングの考え方を、言語によって自動的にサポートされる概念だけに限定しないでください。最高のプログラマーは、自分が何をしたいかを考え、それから自由に使えるプログラミングツールで目的を達成する方法を評価します。(34.4章) これは、手元にある言語の特定の長所と短所に関係なく、すべての言語で1つのプログラミングスタイルを使用することにつながりませんか? または、質問をより答えやすい形式にするには: 問題を可能な限りきちんと言語の詳細にエンコードしようとするべきか、それともネイティブに存在しない厄介な構成要素を実装する必要があるとしても、最もエレガントなソリューション全体を検索するべきかを提案しますか?自分の言語で?


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