ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

15
Try / Catchを論理演算子として使用するかどうかの引数[非公開]
Try-Catchブロックを論理演算子として使用する会社のアプリで素敵なコードを発見しました。 つまり、「何らかのコードを実行し、このエラーがスローされる場合、このコードを実行しますが、それがこのエラーをスローする場合、代わりにこの3番目の処理を実行します」。 表示される「else」ステートメントとして「finally」を使用します。 私はこれが本質的に間違っていることを知っていますが、戦いを始める前に、よく考えられた議論を望んでいました。 また、この方法でTry-Catchを使用するための引数がある場合は、教えてください。 疑問に思っている人にとっては、言語はC#であり、問​​題のコードは約30行以上あり、特定の例外を探しています。すべての例外を処理しているわけではありません。

5
RESTful API。作成/更新されたオブジェクトを返す必要がありますか?
WebApiを使用してRESTful Webサービスを設計していますが、オブジェクトの更新/作成時にどのHTTP応答と応答本文を返すのか疑問に思っていました。 たとえば、POSTメソッドを使用してJSONをWebサービスに送信し、オブジェクトを作成できます。HTTPステータスをcreated(201)またはok(200)に設定し、「New Employee added」などのメッセージを返すか、元々送信されたオブジェクトを返すのがベストプラクティスですか? 同じことがPUTメソッドにも当てはまります。どのHTTPステータスを使用するのが最適で、作成されたオブジェクトまたはメッセージだけを返す必要がありますか?とにかくユーザーが作成/更新しようとしているオブジェクトを知っているという事実を考慮してください。 何かご意見は? 例: 新しい従業員を追加: POST /api/employee HTTP/1.1 Host: localhost:8000 Content-Type: application/json { "Employee": { "Name" : "Joe Bloggs", "Department" : "Finance" } } 既存の従業員を更新します。 PUT /api/employee HTTP/1.1 Host: localhost:8000 Content-Type: application/json { "Employee": { "Id" : 1 "Name" : "Joe Bloggs", "Department" : "IT" } …
36 rest  http 

7
なぜ誰もがコントローラーを1つのフォルダーに入れ、ビューを別のフォルダーに入れるのですか?
私は、aspから曲げてmvcフレームワーク、asp.net mvcまたはnancyに移行する準備をしています。どこに行っても、コントローラー/モジュール用のフォルダーとビュー用のフォルダーが表示されます。これは単にタイプごとに物事を片付けるパブロフの反射ですか、それともより深い知恵が働いていますか?一緒に開く可能性のあるファイルを一緒に保存する概念実証プロジェクトが少しありますが、かなり快適です。これらのファイルは相互に呼び出すことも多いため、短く、脆弱性の低い相対リンクで呼び出すことができます。フォルダーパスがURLパスに自動的に対応しなくなったため、このパターンはmvcによってチャレンジされ、asp.net mvcでは、プロジェクトテンプレートとルーティングがviews \ controllers \ schismを強制します。 このMicrosoftページでは、エリアの概念を紹介しています。これは、この人為的な分離が原因で、扱いにくい大型アプリがどのようになるかを認めたものとして読むことができます。 人々は「懸念の分離」に反対しますが、懸念の分離はすでに別々のソースファイルを持つことで達成されています。密結合されたこれらのソースファイルを取得し、フォルダー構造の反対側に送信することから、具体的なゲインはありませんか? 他の誰かがこれと戦っていますか?任意のヒント?
36 mvc  asp.net-mvc 

3
ヒープと優先度キューの違い
私は常に、ヒープと優先度キューは同義語であると考えていました- insert、findMinおよびdeleteMin操作をサポートする抽象的なデータ構造。 たとえば、Chris OkasakiのPurely Functional Data Structures(第3章)など、いくつかの文献が私と一致しているようです。 一方、ウィキペディアのヒープページでは、ツリーベースのデータ構造として定義されており、ヒープは優先キューの具体的な実装であると述べています。 私は、これを複数のヒープ実装(左翼ヒープ、二項ヒープ、スプレイヒープ)を考えることができるという事実と調和させるのに苦労しています... ヒープを異なるデータ構造で実装できるという単純な事実は、定義により、それが抽象データ構造であることを意味しませんか?そして、その場合、優先度キューと実際の違いはありますか?

3
ビジネスレイヤーでのキャッシュとデータレイヤーでのキャッシュ
私は常に、DALでキャッシングが行われるプロジェクトに取り組んできました。基本的には、データベースへの呼び出しを行うときに、キャッシュにデータが既に存在するかどうかをチェックし、存在する場合は呼び出しを行いません。代わりにそのデータを返します。 私は最近ビジネス層でのキャッシュについて読んだので、基本的にビジネスオブジェクト全体をキャッシュします。すぐにわかる利点の1つは、応答時間の短縮です。 どちらを優先するかはいつですか?およびビジネス層でのキャッシングは一般的な慣行ですか?

4
ジェネリック乱用とは何ですか?
いくつかのコードをレビューしているときに、ジェネリックを使用するように変更する機会に気付きました。(難読化された)コードは次のようになります。 public void DoAllTheThings(Type typeOfTarget, object[] possibleTargets) { var someProperty = typeOfTarget.GetProperty(possibleTargets[0]); ... } このコードは、次のようにジェネリックに置き換えることができます。 public void DoAllTheThings<T>(object[] possibleTargets[0]) { var someProperty = type(T).getProperty(possibleTargets[0]); ... } このアプローチの利点と欠点を研究する際に、ジェネリック乱用と呼ばれる用語を見つけました。見る: 未開始(開発者)をジェネリックから保護する https://stackoverflow.com/questions/28203199/is-this-an-abuse-of-generics https://codereview.stackexchange.com/q/60695 私の質問は2つの部分に分かれています。 このようなジェネリックに移行する利点はありますか?(パフォーマンス?可読性?) ジェネリック乱用とは何ですか?そして、パラメータの種類があり、一般的なすべての時間を使用している乱用は?
35 generics 

8
「2」ではなく「ビット」ごとに4つの状態があると、ストレージ容量が2倍になりますか
素朴ではありますが、かなり簡単な基本的な質問: 2ではなく「ビット」ごとに4つの状態があると、ストレージ容量が2倍になりますか?明確でない場合は、2つの値(ベース2:0、1)だけを表すのではなく、すべての「ストレージ構造」が4つの値(ベース4:0、1、2、3 )。
35 data  storage 


8
条件の割り当ては条件の一部ですか?
Cで2つの文字列を連結する関数を書きたいと仮定しましょう。それを書く方法は次のとおりです。 void concat(char s[], char t[]){ int i = 0; int j = 0; while (s[i] != '\0'){ i++; } while (t[j] != '\0'){ s[i] = t[j]; i++; j++; } s[i] = '\0'; } ただし、K&Rの本では、特にwhileループの条件部分にできるだけ多くを含めて、異なる方法で実装しています。 void concat(char s[], char t[]){ int i, j; i = j = 0; while (s[i] …

8
オブジェクト指向プログラミングを実際に使用するのはいつですか?[閉まっている]
私は基本的に文字列を操作するプログラムをPythonで書いていますが、OOPの原則を使用してそれを行うべきかどうか疑問に思っていました。クライアントは、彼はコードを気にかけず、ただやりたいと言っていました。 私はオブジェクト指向のコードは定義によるクリーナーではなく、逆にオブジェクト指向でないコードは定義によるくだらないものではないことを知っています。私が尋ねている質問は、多少意見に基づいているかもしれませんが、私が知らないいくつかのルールがあるかもしれません。 何をすべきかについてのさらなる情報: .csvファイルを解析し、構成ファイルに基づいてデータを処理します(列は異なる場合があります-列の数や保持するデータなど) 上記の処理されたデータを使用して、新しいカスタム形式のデータ(または上記の値のいくつかに基づいた複数のファイル)を作成します 最後にフォーマットされたデータを使用して、XMLファイルを作成します。 XMLコンテンツに基づいてXMLファイルを複数に分割します アプリケーションはCLIベースでなければなりません もちろん、イベントの記録、CLI引数の解析などのような他のこともあります。 さて、これはまったく大きな/ハードなアプリケーションではなく、ほぼ終了していますが、開発プロセス全体を通して、OOPを使用して行うべきかどうかを自問し続けました。 したがって、私の質問は次のとおりです。アプリケーションでOOPを使用するタイミングをどのように知り、決定しますか。

2
RustはC ++の同時実行機能からどのように分岐しますか?
ご質問 Rustを学ぶために時間を費やすべきかどうかを判断するために、RustがC ++の同時実行機能を根本的かつ十分に改善するかどうかを理解しようとしています。 具体的には、慣用的なRustは、慣用的なC ++の同時実行機能をどのように改善しますか、それとも何らかの相違がありますか? 改善(または相違)はほとんど構文上のものですか、それとも実質的にパラダイムの改善(相違)ですか?それとも別のものですか?それとも、まったく改善(分岐)ではありませんか? 根拠 私は最近、C ++ 14の並行性機能を自分で習おうとしていますが、何かが正しくないと感じています。何か気分が悪い。何が気持ち悪い?言いにくい。 並行処理に関しては、コンパイラが正しいプログラムの作成を実際に支援しようとしていないように感じます。コンパイラではなくアセンブラを使用しているように感じます。 確かに、並行性に関しては、微妙で誤った概念にまだ悩まされている可能性があります。たぶん、私はまだ、ステートフルプログラミングとデータレースの間のBartosz Milewskiの緊張感を理解していません。たぶん、コンパイラーにどれだけの健全な並行方法論があり、OSにどれくらいあるのか、私にはよくわかりません。
35 c++  concurrency  rust  c++14 

5
Java Swingクラスをいつ拡張する必要がありますか?
継承の実装に関する私の現在の理解では、IS-A関係が存在する場合にのみクラスを拡張する必要があります。親クラスがさらに異なる機能を持つより具体的な子タイプを持つことができるが、親で抽象化された共通要素を共有する場合。 私のJava教授が私たちにすべきだと勧めていることのために、私はその理解に疑問を抱いています。彼は、JSwing私たちがクラスで構築しているアプリケーションのために 一つは、すべての拡張する必要がありますJSwingクラス(JFrame、JButton、JTextBox(部品サイズ、部品ラベルなどのような)別のカスタムクラスに、など)と、それらに関連するGUIカスタマイズを指定します これまでのところこれでいいのですが、彼はさらに、すべてのJButtonが独自のカスタム拡張クラスを持つべきであり、唯一の識別要素はラベルであるとアドバイスしています。 たとえば、GUIに2つのボタンOkayとCancelがある場合。彼は、以下のように拡張することを推奨しています。 class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ MainUI mui; public CancelButton(MainUI mui) { setSize(80,60); setText("Cancel"); this.mui = mui; mui.add(this); } } ご覧のとおり、唯一の違いはsetText機能にあります。 それでは、この標準的な慣習はありますか? ところで、これが議論されたコースは、Javaのベストプログラミングプラクティスと呼ばれています [教授からの返信] そこで私は教授と問題について話し合い、答えに挙げられているすべての点を挙げました。 彼の正当性は、サブクラス化がGUI設計標準に従って再利用可能なコードを提供することです。たとえば、開発者が1つのウィンドウでカスタムボタンOkayとCancelボタンを使用している場合、同じボタンを他のウィンドウにも配置する方が簡単です。 理由はわかりますが、それでも継承を利用してコードを脆弱にしているだけです。 後で、開発者はボタンを誤って呼び出して変更setTextする可能性がありOkayます。その場合、サブクラスは単に迷惑になります。

7
エラー抑制に対する引数
私たちのプロジェクトの1つで、次のようなコードを見つけました。 SomeClass QueryServer(string args) { try { return SomeClass.Parse(_server.Query(args)); } catch (Exception) { return null; } } 私の知る限り、このようなエラーを抑制することは、元のサーバーの例外から有用な情報を破壊し、実際に終了する必要があるときにコードを継続させるため、悪い習慣です。 このようなすべてのエラーを完全に抑制するのが適切なのはいつですか?

9
ユニットテストは後でコメントアウトされる傾向があるため、または統合テストはより価値があるため、ユニットテストを作成しないのは合理的ですか?
私は同僚とユニット/統合テストについて話し合っていましたが、彼はユニットテストの作成に対して興味深いケースを作りました。私は大規模なユニットテスト(主にJUnit)の支持者ですが、彼がいくつかの興味深い点を指摘したので、他の人の意見を聞くことに興味があります。 彼のポイントを要約するには: 主要なコードの変更(POJOの新しいセット、主要なアプリケーションのリファクタリングなど)が発生した場合、単体テストは修正されるのではなくコメントアウトされる傾向があります。 ユースケースをカバーする統合テストにより多くの時間を費やすことができます。これにより、より小さなスコープのテストの重要性が低くなります。 これについての考え?統合テストは少なくとも同じくらい価値があるように聞こえますが、私はまだプロユニットテストです(一貫して改善されたコードを生成しているのを見ています)。

2
最初のATMプログラミング言語
最初のATMはキャッシュディスペンサーのようなタスクを実行しました。カーボンと6桁のPINコードを含浸させたパンチカードで動作するオフラインのマシンでした。 カードでの最大引き出し額は10ポンドで、各カードは1回限りの使用カードでした。ATMはカードを飲み込みました。 最初のATMは1967年にロンドンに設置されました。プログラミング言語のタイムラインを見たとき、その10年前には多くのプログラミング言語が作られていました。ハードウェアについても知りませんが、どのプログラミング言語で書かれていますか?(また、どのハードウェアが使用されましたか?) *ジョンシェパードバロン(70年代のATM発明家)の詳細な伝記は見つかりませんでした 更新 私はこの写真を見つけました。これは新聞から1972年にイランで撮影されたものです。 翻訳されたPS: ラッドロン氏(正しい綴りの場合)、バロスのマネージャー(正しい綴りの場合)英国の国際教育研究所の右側、ジムサザーランド氏-コンピュータキオスクのエキスパート。 この論文で見つけた残りのテキストでは、「自動コンピュータキオスク」と呼ばれるこれらの種類のATMがこのモトで宣伝されました。 ラドロン氏(スペルが正しい場合)は、カードを自動コンピューターキオスクの特定の場所に置き、10秒後に現金を引き出します。 さらに2つの質問があります。 1-それらのATMはどのように高速でしたか?(その年に10秒で撤回) 2 -私はそれが有効であるか、彼らが呼ばれた「自動化されたコンピュータキオスク」についての状態、インターネット上の任意のテキストを見つけられませんでしたコンピュータその時には?

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