ソフトウェア工学

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

3
RESTでエンティティ関係を作成する:子IDに投稿して親を作成できますか?
現在、従来の顧客データにアクセスするためのREST APIを設計しています。APIの要素の1つは、ユーザーの資産です。アセットは特定のサービスの下に追加されます。バックエンドAPIは、特定のサービスのユーザーにのみアセットを追加します。したがって、User--Asset関係はありませんが、User-[Service]-Asset関係があります。 URIは次のようになります。 /users/{id}/assets/{id}/services/{id} APIを使用すると、新しいエントリを作成するためのアセットIDとサービスIDがわかります。私たちが苦労しているのは、この関係の創造です。 簡単な方法の1つは、関係全体を /users/{id}/assets/ POST /users/{id}/assets {asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"} しかし、URIが示すように実際にアセットを作成するのではなく、アセットとサービスの関係を作成します。 別の方法として、次のように関係をアドレス指定するURIにPOSTすることを検討しています。 POST /users/{id}/assets/{id}/service/{id} {attribute1:"{var}", attribute2:"{var}"} ただし、この場合、リソースパス/users/{id}/assets/{id}はPOSTの前には存在せず、副作用として作成されます。 まだ存在しないリソースパスへのPOSTはまったく許可されていますか? あなたの考えをありがとう、 ジェラール。

6
モデルがデータを検証している場合、不正な入力に対して例外をスローすべきではありませんか?
このSOの質問を読むと、ユーザー入力を検証するために例外をスローすることは不快に思われるようです。 しかし、誰がこのデータを検証する必要がありますか?私のアプリケーションでは、すべての検証はビジネスレイヤーで行われます。これは、クラス自体だけが、各プロパティの有効な値を実際に認識しているためです。プロパティを検証するためのルールをコントローラーにコピーすると、検証ルールが変更される可能性があり、変更を行う場所が2つあります。 ビジネス層で検証を行う必要があるという私の前提は間違っていますか? 私がやること したがって、私のコードは通常、次のようになります。 <?php class Person { private $name; private $age; public function setName($n) { $n = trim($n); if (mb_strlen($n) == 0) { throw new ValidationException("Name cannot be empty"); } $this->name = $n; } public function setAge($a) { if (!is_int($a)) { if (!ctype_digit(trim($a))) { throw new ValidationException("Age $a …

6
並べ替えられていない配列の範囲から最大値を取得しています
私が持っている未ソート配列を。範囲を指定し、その範囲の最大値を返さなければならないクエリがあります。例えば: array[]={23,17,9,45,78,2,4,6,90,1}; query(both inclusive): 2 6 answer: 78 任意の範囲から最大値をすばやく取得するために構築するアルゴリズムまたはデータ構造。(クエリがたくさんあります) 編集: これは確かに実際の問題の単純なバージョンです。配列のサイズは100000まで、クエリの数は100000までにすることができます。そのため、高速なクエリ応答を促進する前処理が必要です。

1
関連するクラスとインターフェースの命名
データソースとしてObjectParserを使用しIObjectParserDataSourceて、厳密に型指定されたオブジェクトにデータを解析するクラスを作成しました(データは、Excelファイル、テキストファイル、配列、クエリ文字列など)。 私の実装例IObjectParserDataSourceは次のとおりです。 TextFileObjectParserDataSource ExcelFileObjectParserDataSource これらのクラス名は本当に長く複雑に感じられます。 それらに名前を付けることができます: TextFileDataSource ExcelFileDataSource しかし、これはある程度のあいまいさをもたらし、IObjectParserDataSource一見しただけでは明確に関連するようにはなりませんでした。これらのデータソースの定義はクライアントコードで行われ、混乱や不確実性の可能性を最小限に抑えたいので、これは重要になります。 このようなシナリオでは、これらのクラスにどのような名前を付けますか?



2
Haskell / Clojureは、実際には粒子シミュレーションなどの動的システムには適していませんか?
以前の質問で、関数型プログラミング言語は物理エンジンなどの動的システムには適していないと言われています。これは、主にオブジェクトの変更にコストがかかるためです。このステートメントはどの程度現実的ですか、そしてその理由は何ですか

1
派生作品のMITライセンス著作権表示
Webプロジェクトの1つ(jQuery 日時プラグイン)で、いくつかのオープンソースMITライセンスソフトウェアを使用することを考えています。 MITライセンスの最初の行は次のとおりです。 著作権(c)[年] [著作権者] プラグインをそのまま(変更を加えずに)含める場合、ライセンスを元の作成者のみに含める必要があることを理解しています(ただし、jsファイルの上部にある実際の著作権表示には年が指定されていません)。 Copyright(c)2013 Keith Wood プラグインを変更すると、著作権表示はどうなりますか? Copyright(c)2013 Keith Wood、2013 [私の名前/会社名] 以前の著者全員を含める必要がありますか、それともそのような通知を処理する別の方法がありますか?

2
C#で「グローバル」変数をカプセル化する方法 /ベストプラクティス
この投稿を改善してみませんか?この質問に対する詳細な回答を提供します。これには、引用と、回答が正しい理由の説明が含まれます。詳細が不十分な回答は編集または削除される場合があります。 C#で、複数のメソッドで使用する必要がある変数をカプセル化するためのベストプラクティスは何ですか?2つのメソッドの上の私のクラスの先頭で単にそれらを宣言することは問題ありませんか? また、設定ファイルのアプリ設定を使用している場合、ゲッターを使用する必要がありますか?このような... private string mySetting{ get { return WebConfigurationManager.AppSettings["mySetting"]; } } ベストプラクティスは何ですか?

6
インターフェイスと抽象メソッドのみを持つ抽象クラスの間に違いはありますか?
抽象クラスがあり、このクラスに抽象メソッドのみがあるとします。この抽象クラスは、同じメソッドのみを持つインターフェースとは異なりますか? 私が知りたいのは、抽象的メンバーのみを持つ抽象クラスと同等のインターフェイスの間に、哲学的、客観的、および基礎となるプログラミング言語の実装に違いがあるかどうかです。

1
ダメラウ・レヴェンシュタインの改善の可能性は?
最近、Wikipediaの疑似コードからDamerau-Levenshtein距離アルゴリズムを実装しました。私はそれが動作します正確にどのように任意の説明を見つけることができなかったとの擬似コードは次のように完全に情報価値がない変数名を使用してDA、DB、i1、そしてj1左のように私は私の頭を掻きます。 Pythonでの実装は次のとおりです。https://gist.github.com/badocelot/5327337 Pythonの実装は、プログラムをウォークスルーして何が起こっているのかを理解し、変数の名前をよりわかりやすい名前に変更するのに役立ちました。私は、私が参照枠を持っているレーベンシュタイン距離を計算するためのワーグナーフィッシャーアプローチに十分に精通していました。 過度に長くなるおそれがあるので、ここに私がダメラウ=レヴェンシュタインを理解する方法を示します。 ミステリー変数: DA(last_row私のコードでは)は、各要素が表示された最後の行を保持する一種のマップです。私のコードでは、それは実際のPython辞書です DB(last_match_col)は、現在の行の文字がb一致する最後の列を保持しますa i1(last_matching_row)は、DA現在の文字の行番号ですb j1更新される前のDB/ の値の単なるコピーlast_match_colです。私のコードでlast_match_colは、更新された場所に移動してこの変数を削除しました 転置コスト: H[i1][j1] + (i-i1-1) + 1 + (j-j1-1) で現在の文字スワップのコスト計算されてbの最後の文字とbであることが知られてa追加または削除のどちらかとの間のすべての文字を処理すること、(最後の試合を)。 コストの要素: H[i1][j1] 転置を見つけると以前の作業が無効になるため、基本コストを転置前の計算のポイントに戻します。 (i-i1-1) 現在の行と現在の文字に一致する最後の行の間の距離であり、これは必要な削除の数です (j-j1-1) 現在の列と一致する最後の列の間の距離、つまり追加の数 余分なもの+ 1は、転置自体のコストです この分析が正しくない場合は、どこに問題があるのか​​を知りたいです。言ったように、アルゴリズムがオンラインでどのように機能するかについての詳細な説明は見つかりませんでした。 改良版? しかし、それを理解して、転置された文字間の追加と削除の両方のコストを計算することには欠陥があるように思われたことに感銘を受けました。1つの追加と1つの削除は置換に相当し、これはチェックしていません。 それがすべて正しい場合、解決策は簡単です。転置された文字間の文字のコストは、追加と削除のどちらか高くなるはずです。できるだけ多くを置換に変換し、残っている追加または削除を追加します。 したがって、コストは次のようになります。 H[i1][j1] + max((i-i1-1), (j-j1-1)) + 1 これがこのバージョンの私のコードです:https : //gist.github.com/badocelot/5327427 いくつかの簡単なテストから、これは正しいようです。たとえば、 "abcdef"-> "abcfad"は編集距離を2(転置 "d"と "f"、 "e"を "a"に変更)しますが、元のアルゴリズムは距離を3(最後の3つ)にします。文字は置換、または1つの転置+ 1つの追加+ …

4
春-構成上の混乱?
Springをどこかで読んだところ、設定よりも便利です。しかし、Springの人々は、構成に対して非常に多くの変更を取り入れているため、XML構成または注釈を使用することに本当に混乱しています。 XMLと注釈の使用について、誰でも確実な方法論または経験則を提案してほしい。 SOの例は、私のような多くの初心者が構成について混乱していることを示しています。 リンク-1 私は、機能の背後を把握していないようだ<context:annotation-config>と<context:component-scan>。 私が読んだものから、それらは異なる注釈(@ Required、@ Autowiredなどと@ Component、@ Repository、@ Serviceなど)を処理しているようですが、私が読んだものからは、同じBeanポストプロセッサクラスを登録しています。 さらに私を混乱させるために、annotation-config属性があります<context:component-scan>... リンク2 私はまだコンポーネントスキャンタグを持っています: <context:component-scan base-package="com.mycompany.maventestwebapp" /> しかし、私は別のタグ(同様のタスクを持っているように見える)も持っています。これは次のタグです。 <annotation-driven /> これら2つのタグの違いは何ですか?他の「奇妙な」ことは、前の例(注釈駆動型タグを使用しない)は、Spring MVCテンプレートプロジェクトを使用してSTSによって作成されたプロジェクトと非常に似ているが、注釈駆動型タグを構成から削除した場合です。ファイルは、プロジェクトが実行され、私に次のエラー与えることはありません:HTTPステータス404を- ... Spring 3.2はプロキシ用にcglibを必要としなくなりましたが、下位バージョンはcglibを使用します。SpringSourceブログからの引用 そのようなプロキシを生成するために、Springはcglibと呼ばれるサードパーティのライブラリを使用します。残念ながら、このプロジェクトは現在アクティブではありません。Spring 3.2では、SpringがデフォルトでJavassistを使用する可能性が非常に高いです。 これらは、Springが構成上の混乱であることを示唆するのに十分ですか?
9 java  spring 

2
REST APIでのAuthorizationヘッダーのカスタム使用
クライアント証明書を使用してクライアントが認証されるREST APIを構築しています。この場合のクライアントは、個々のユーザーではなく、ある種のプレゼンテーション層です。ユーザーはカスタムアプローチを使用して認証され、これが適切に行われたことを確認するのはプレゼンテーションレイヤーの責任です(注:これは適切なアプローチではないことを知っていますが、APIはパブリックではありません)。 リクエストごとに(パスワードではなく)ユーザー名を渡したいのですが、これをどこで行うのかわかりません。Authorizationヘッダーを使用するのは良い考えでしょうか?

5
プルリクエストを送信すると、コントリビューターライセンス契約に同意したことになりますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 一部のソフトウェアプロジェクトには、Contributor License Agreementがあります。この合意により、たとえば、サードパーティの寄稿の著作権を元のプロジェクト作成者に割り当てることができます。GitHubでプルリクエストを送信すると、そのような契約に同意したことになりますか?

2
Goにabs(0)の特別なケースがあるのはなぜですか
私はGoをいじってみましたが、mathパッケージにあるabs関数のこの興味深いコードを見つけました。 http://golang.org/src/pkg/math/abs.go 14 func abs(x float64) float64 { 15 switch { 16 case x < 0: 17 return -x 18 case x == 0: 19 return 0 // return correctly abs(-0) 20 } 21 return x 22 } なぜx == 0の特別なケースが必要なのですか?18行目と19行目を削除するとどうなりますか?
9 go 

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