ソフトウェア工学

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

4
JSONを持っている場合、Odataの必要性は何ですか?
Odataのポイントと、それがいつ意味をなすかを理解しようとしています。今の私の仕事は、ASP.NETとMVC / WebApiコントローラーを使用してオブジェクトをJSONにシリアル化/逆シリアル化し、javascriptに何かをさせることです。 ODataの利点は、URLから直接クエリできることからわかりますが、クライアントコードとサーバーコードを記述しているので、その必要はありません。 誰かがjavascriptでODayaクエリの結果を解析することはありますか? たぶん、ODataは、JSONが提供しないクエリから詳細な情報を取得するために、すべてのクライアントに汎用エンドポイントを提供することに関するものでしょうか?もし私がデータの提供者だったら、それがodataの目的だと思いますか? REST / JSON / ODATAの目的と使用法を理解してください。
23 javascript  rest  json 

4
文字列を連結して1回呼び出すよりも、println()を頻繁に呼び出すのはどれほど悪いでしょうか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Code Review Stack Exchangeから移行されました。 5年前に移行され ました。 コンソールへの出力はコストのかかる操作であることは知っています。コードを読みやすくするために、長いテキスト文字列を引数として使用するのではなく、関数を呼び出してテキストを2回出力する方がよい場合があります。 たとえば、どれだけ効率が悪いのか System.out.println("Good morning."); System.out.println("Please enter your name"); 対 System.out.println("Good morning.\nPlease enter your name"); 例では、違いは1回の呼び出しのみprintln()ですが、それ以上の場合はどうなりますか? 関連するメモでは、印刷するテキストが長い場合、ソースコードを表示しているときにテキストの印刷に関連するステートメントが奇妙に見えることがあります。テキスト自体を短くすることができないと仮定すると、何ができますか?これは、複数のprintln()呼び出しが行われる場合ですか?誰かがコード行を80文字(IIRC)を超えてはならないと言っていたので、どうしますか System.out.println("Good morning everyone. I am here today to present you with a very, very lengthy sentence in order to prove a point about how it …
23 java  c++  performance  c  io 

4
ドキュメントよりも例を優先してください。それは行動上の問題ですか?
新しいAPIやプログラミング言語、または単純なLinuxのマニュアルページに出会うたびに、私は常に(覚えている限り)それらを避け、代わりに新しい概念の理解を得るために例に頼りました。 無意識のうちに、私はドキュメンテーション/ APIを、それが単純明快で、不可解であるか、または単なる退屈でないときは避けます。プログラミングを始めてから何年も経ちましたが、今では公式の例よりも百万倍優れているので、不可解な/難しい文書を読むことを控えることでより多くの損害を引き起こしていることに気づき、自分の道を修復する必要があると感じていますドキュメントには、他の例よりも多くの記事があります。例が学習のための「主要な」ソースの代わりに「追加された」値として扱われるべきであることに気付いた後でさえ。 プログラマとしてこの悪い習慣を打破するにはどうすればいいのでしょうか?

2
RESTful APIのユーザー権限のレベル
インターネットで一番かわいい猫をランク付けしている会社があるとしましょう。 /cats/ユーザーに最新のかわいい猫を提供するリソースを提供します。 ユーザーは、支払いを行っていないか登録していない場合、上位3匹の猫のみを取得できます。337ドルを支払ってログインしている場合は上位10匹の猫、1337ドルを支払ってログインしている場合は上位100匹の猫。リクエストを行うときに「ユーザーID」があります。 要するに、消費者は/cats/「ユーザーランキング」に基づいて異なる数の猫を取得します。消費側にはユーザー識別子がありますが、消費側にはユーザーレベルの明示的な表現はありません。リクエストを行うときにサブスクリプションをアップグレードできることをユーザーに通知したいと思います。つまり、3匹の猫と3匹の猫しか提供していないため、3匹の猫を区別する必要があります。これは、ユーザーレベルで許可されているためです。 消費者が十分な特権を持っていないためにリソースを制限し、それが制限されていることを区別するためのベストプラクティスは何ですか? クライアントは、ランキングをアップグレードできるかどうかをどのように知っていますか?それはので、彼らは限られたリソースを持っている彼らは権限がありません。ここでのベストプラクティスは何ですか? これは実際のケースを大幅に単純化したものであることに注意してください。また、単に明確にするために-読んでいただければ幸いです。 更新: 検討したオプションは次のとおりです。 クライアントに一度ユーザー権限オブジェクトを保存し、アカウントのログインまたはアップグレードが実行されたときにのみ照会します。 null存在することを示す値をJSONで渡しますが、実際には何も転送されませんでした。したがって、3匹の猫を持つユーザーの場合、10匹の猫は["Garfield","Sylvester","Puss in Boots",null*7] リソース許可ペアを渡す {cats:["Whiskers","Fluffy","Socks"],authCount:3} 一番かわいい猫を可能な限り最良の方法で配達するために、初めてこれを正しく行いたいと思います。
23 rest  http  url  http-response 

4
多くのデザインがRDBMSの正規化を無視するのはなぜですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 意思決定段階では、正規化が最初の考慮事項ではないという多くの設計を見ました。 多くの場合、これらの設計には30を超える列が含まれており、主なアプローチは「すべてを同じ場所に置く」ことでした 私が覚えていることによると、正規化は最初の最も重要なことの1つです。 編集: 優秀なアーキテクトや専門家が非正規化されたデザインを選択し、未経験の開発者が反対を選択するというのは本当ですか?正規化を念頭に置いて設計を開始することに対する議論は何ですか?

7
手動メモリ管理よりも高速なガベージコレクションのデモンストレーション
私は、ガベージコレクションが(理論的には)手動のメモリ管理よりも高速である可能性があることを、多くの場所で読んでいます(実際、自分で書きました)。 ただし、表示することは、伝えることよりもはるかに困難です。この効果が実際に作用することを示すコードを 実際に見たことはありません。 このパフォーマンスの利点を実証するコードを誰かが持っていますか(またはどこにあるかを知っていますか)?

2
SQL IN()対OR
私は今日書いたクエリをWHERE使っていました item_desc = 'item 1' OR item_desc = 'item 2' OR item_desc = 'item 3' OR item_desc = 'item 4' 上記は15分間実行され、何も返されませんでしたが、次の結果は1.5分で結果セットが得られました item_desc IN ( 'item 1' ,'item 2' ,'item 3' ,'item 4' ) これをSQLで実行しましたが、なぜOR(アイテムのリスト)がORステートメントよりもはるかに高速に実行されるのか疑問に思っています。 -編集-SQL Server 2008、この情報を最初から入力していないことをおforびします。 以下は、ORステートメントを使用したクエリ全体です。 DECLARE @SD DATETIME DECLARE @ED DATETIME SET @SD = '2013-06-01'; SET @ED …
23 sql  speed 

6
ネストされたコメントの問題を解決する方法
1つの言語だけでなく、コメントをネストできないように見えます。この問題の良い解決策はありますか?C / C ++およびJavaでの1つの回避策は、単一行コメントのみを使用することですが、より大きなブロックをコメントアウトすることは不可能になります。私はこのようなものに直面しています: </li><!-- <li><!-- Save --> そのため、コメントを手動で確認して編集する必要があります。多くの言語でこれをどのように扱うべきかアドバイスをいただけますか?私にはわからないが、多分、Pythonにコメント'''を含めることができるかもしれない方法でこれを解決できるの#でしょうか?`
23 java  c++  python  c  comments 

7
複雑すぎる方法を避ける-循環的な複雑さ
Cyclomatic Complexityを削減するためにこの方法をどのように実行するかわからない。ソナーは13を報告しますが、10が予想されます。しかし、この方法をそのままにしておいても、ソナーのルールに従う方法に挑戦するだけでは何の害もありません。どんな考えでも大歓迎です。 public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { …

7
本番データベースのデータを安全に修正する
バグが発生し、本番環境でデータを修正する必要がある場合があります。大企業の観点からこれを行う最も安全な方法は何ですか?役立つツールはありますか?この要件を推進するいくつかの考慮事項を以下に示します... 誰がクエリを実行し、何を実行したかを記録する必要があります 理想的には、関心のあるテーブルに対してクエリを実行するためのアクセスを短時間だけ許可する必要があります クエリを実行しているものが何であれ、明示的な許可なしにSQLを長時間実行およびロックすることを許可しないために、クエリについてある程度の知識が必要です。 このプロセスは、DBに依存しないか、少なくともDB2、Oracle、およびSQL Serverを理解する必要があります。 私たちは、アドホックな製品修正クエリが「間違ったこと」を行うリスクを減らし、同時にプロセスにセキュリティ/音声を追加しようとしています。考えやアイデア?
23 database  risk 

4
Pythonライブラリモジュールでデータベース接続を処理する方法
データベースにアクセスするための関数を含むライブラリをPythonで作成しました。これは、サードパーティアプリケーションが適切なAPIを提供しないという事実のために書かれた、サードパーティアプリケーションデータベースのラッパーライブラリです。今では、プログラムロジックが特定の関数を数千回呼び出す関数のネストされた呼び出しを使用するまで、関数呼び出しの期間中は各関数がデータベース接続を開くようにしました。これはあまりパフォーマンスがよくありませんでした。これをプロファイリングすると、オーバーヘッドがデータベース接続セットアップにあることがわかりました(関数呼び出しごとに1回)。そこで、ライブラリモジュールがインポートされたときにデータベース接続が開かれるように、関数内からモジュール自体に開いた接続を移動しました。これにより、許容できるパフォーマンスが得られました。 これに関して、2つの質問があります。まず、データベース接続を明示的に閉じる必要がなくなり、このセットアップでどのように明示的に行うことができるかを心配する必要がありますか?第二に、私がやったことは、優れた実践の領域に近いどこに落ちますか?
23 python 

5
エンドツーエンドテストと単体テストの比較、テストを分離する必要がありますか?
私たちの会社では通常、Webサイト/ Webアプリのエンドツーエンドのテストを必ず作成します。つまり、URLにアクセスし、フォームに入力し、フォームを別のURLに送信して、ページの結果を確認します。これは、フォームの検証、HTMLテンプレートに正しいコンテキスト変数があることなどをテストするために行います。 また、基になるロジックを間接的にテストするためにも使用します。 同僚から、この理由は、エンドツーエンドのテストに合格する限り、任意の時点で基になる実装をリッピングおよび変更できるためだと言われました。 この種のデカップリングが理にかなっているのか、それとも小さなコード単位のテストを書くのを避けるための方法なのだろうか?

6
関数型プログラミングでは、副作用のないローカル可変変数は依然として「悪い習慣」と見なされますか?
内部でのみ使用される関数内に可変ローカル変数を持っていますか(たとえば、少なくとも意図的に副作用がないなど)、まだ「非機能的」と見なされますか? たとえば、「Scalaをvar使用した関数型プログラミング」のコーススタイルチェックでは、使用法が不適切であると見なされます。 私の質問、関数に副作用がない場合、命令型のコードを書くことはまだ推奨されていませんか? たとえば、アキュムレータパターンでテール再帰を使用する代わりに、入力が変更されない限り、ローカルforループを実行し、ローカルミュータブルListBufferを作成して追加することの何が問題になっていますか? 答えが「はい、副作用がなくても常に落胆している」場合、その理由は何ですか?

12
オブジェクト指向設計
次のものがあるとします: +--------+ +------+ | Animal | | Food | +-+------+ +----+-+ ^ ^ | | | | +------+ +-------+ | Deer | | Grass | +------+ +-------+ Deerから継承しAnimal、からGrass継承しFoodます。 ここまでは順調ですね。Animalオブジェクトはオブジェクトを食べることができFoodます。 それでは少し混ぜましょう。Lionを継承するを追加しましょうAnimal。 +--------+ +------+ | Animal | | Food | +-+-----++ +----+-+ ^ ^ ^ | | | | | | +------+ …

3
Option / Maybeが良いアイデアと考えられ、チェックされた例外はそうではないのはなぜですか?
Scalaなどの一部のプログラミング言語には、値を含む場合と含まない場合があるOption型(とも呼ばれるMaybe)の概念があります。 それらについて私が読んだことから、彼らは広くこの問題に対処するより優れた方法であると考えられていますnull。なぜなら、ランタイム中に単に爆発するのではなく、値がない場合を考慮するようにプログラマーに明示的に強制するためです。 一方、Javaでチェックされた例外は悪い考えと見なされるようで、Javaはそれらを実装する唯一の広く使用されている言語のようです。しかし、その背後にある考え方Optionは、例外がスローされる可能性があるという事実にプログラマーに明示的に対処させるために、型にいくらか似ているようです。 Option型にないチェック済み例外には、いくつかの追加の問題がありますか?または、これらのアイデアは私が思うほど似ていないのか、例外ではなくオプションの明示的な処理を強制する正当な理由がありますか?
23 exceptions 

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