ソフトウェア工学

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

2
RESTful APIがファイルまたは場所を返すことができるか
これはしばらくの間私を困惑させてきました。 たとえば、システムに基本的なコンテンツを提供し、JSONを消費および生成するREST APIがあります。このエンドポイントでは、画像と説明へのURLを生成し、次のように検索されます:// localhost / myApi / pictures / 1 { id: 1, description: "This is a pretty picture of a daisy", URL: <OUR URL> } これで、OUR_URLは、たとえば// localhost / myApi / files / pictures / 1などのAPI上の場所を指す必要があります。これにより、JPGが返されます(APIの背後にあるアプリケーションがファイルの物理的なコンテンツを読み取り、それをクライアントにストリーミングします。 )。これは、JSON応答を生成する他のAPIとは明らかに異なり、実際のファイルの読み取りとストリーミングによるオーバーヘッドが発生します。 または、OUR_URLがRESTサービスのスコープ外のURLを指すようにして、//localhost/files/pictures/1.jpgがファイルを直接読み取るようにする必要があります。 だから問題は: RESTful APIはファイルを返すことができるのでしょうか、それとも単なる場所を返すのでしょうか?

4
論理的に手続き型のソフトウェアをオブジェクト指向言語で記述する最もクリーンな方法
私は電気技師で、一体何をしているのかわかりません。私のコードの将来のメンテナーを保存してください。 最近、機能が論理的に「手続き型」である(C#の)いくつかの小さなプログラムに取り組んでいます。たとえば、その1つは、さまざまなデータベースから情報を収集し、その情報を使用して一種の要約ページを生成し、印刷してから終了するプログラムです。 これらすべてに必要なロジックは約2000行です。以前の開発者が行っていたように、私はそれらすべてを1つにmain()詰め込んで#regionsで「クリーンアップ」したくありません(シャダー)。 ここに私がすでに満足していないいくつかの試みがあります: DatabaseInfoGetter、SummaryPageGenerator、PrintUtilityなど、機能の粗いビットごとに静的ユーティリティを作成します。メイン関数を次のようにします。 int main() { var thisThing = DatabaseInfoGetter.GetThis(); var thatThing = DatabaseInfoGetter.GetThat(); var summary = SummaryPageGenerator.GeneratePage(thisThing, thatThing); PrintUtility.Print(summary); } 1つのプログラムでは、インターフェイスも使用しました int main() { /* pardon the psuedocode */ List<Function> toDoList = new List<Function>(); toDoList.Add(new DatabaseInfoGetter(serverUrl)); toDoList.Add(new SummaryPageGenerator()); toDoList.Add(new PrintUtility()); foreach (Function f in toDoList) f.Do(); } …

2
ブラウザとネイティブアプリケーションの間の安全な通信
ローカルにインストールされているネイティブアプリケーションブラウザーからのみ取得できるデータを必要とするWebアプリケーションに取り組んでいます。 どのようにしてブラウザーのサンドボックスを回避し、ネイティブアプリケーションと通信できるようにします(データは機密情報である可能性があるため、安全に)。 私が見つけた唯一の例では、ユーザーが手動でいくつかのトークンとファイルを2つの間で移動します。これは、回避したい恐ろしいユーザーエクスペリエンスです。

3
DoctypeはHTML5ドキュメントに必要ですか
最近、就職の面接を受けましたが、質問の1つは「HTML5文書にdoctypeは必要ですか?」というものでした。私は「いいえ」と答えましたが、私は間違っているかもしれないと感じています。w3からは絶対に必要なように見えますが、次のような単純なHTMLを入力すると <html> <body> <input type="color" disabled/> </body> </html> それをHTMLとして保存し、Chromeで開こうとします。新しい色の入力(無効)で完全に機能します。その入力はHTML5と属性です。 だから問題は-私はdoctypeを指定する必要があるかどうか?面接の正解は何でしょうか?
12 html  w3c 

2
ファイル形式の仕様を文書化する方法[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 プロジェクトでは、いくつかの古いゲームや関連ソフトウェアのさまざまな種類のファイル(構成ファイル、保存、リソースアーカイブなど)を扱う必要があります。これらの大部分はまだ文書化されておらず、それらを操作するためのツールも存在しないため、フォーマットをリバースエンジニアリングして、それらを処理するための独自のライブラリを構築する必要があります。 たいへん需要が多いとは思いませんが、成果を公表したいと思います。ファイル形式を文書化するための承認された標準はありますか?見回すと、いくつかのスタイルが使用されています。.ZIPファイル形式の仕様など、非常に冗長なスタイルがあります。XentaxWikiにあるような他のものはもっと簡潔です-それらのいくつかは読みにくいと思います。私が個人的に最も気に入っているのは、PlayStation 2メモリカードファイルシステムの説明です。これには、詳細な説明テキストとオフセットなどのいくつかの「メモリマップ」の両方が含まれます。これは、私のユースケースに最もよく一致します。フォーマットによって多少異なりますが、私が従おうとするいくつかの一般原則があるはずです。 編集:私が何をしたいのかよく説明していなかったようです。例を作ってみましょう。 構成を「バイナリ」ファイルに保存するいくつかの古いソフトウェアがあるかもしれません-一連のビットフィールド、整数、文字列、そしてすべてが結合されてプログラムによって理解されるわけではありませんが、人間が読めるものではありません。私はこれを解読します。このファイルを解析および変更するためのライブラリーを実装するための仕様として、このファイルの形式を人間が読める形式で正確に文書化したいと思います。また、他の人にもわかりやすいといいですね。 そのような文書が書かれるかもしれないいくつかの方法があります。上記のPKZIPの例は非常に冗長で、主にファイル形式をフリーテキストで記述しています。PS2の例では、値のタイプ、オフセット、およびサイズの表と、それらの意味を詳しく説明しています。XentaxWikiにあるような多くの他のものは、変数のタイプとサイズのみをリストし、ほとんどまたはまったくコメントしていません。 この種のドキュメントの書き方に関するガイダンスを提供するコーディングスタイルガイドに似た標準があるかどうかを尋ねます。そうでない場合、私がエミュレートする必要がある有名な優れた例はありますか?そうでない場合、誰かが少なくともいくつかの有用なアドバイスを要約できますか?

2
git rebaseパラメータの理解と記憶
これまでのところ、gitの最も混乱する部分は、別のブランチにリベースすることです。具体的には、混乱を招くのはコマンドライン引数です。 1つのブランチの小さな部分を別のブランチの先端にリベースするたびに、git rebaseのドキュメントを確認する必要があり、3つの主要な引数のそれぞれが何であるかを理解するのに約5〜10分かかります。 git rebase <upstream> <branch> --onto <newbase> 別のブランチへのリベースの種類が与えられた場合、これらの3つのパラメーターのそれぞれが何に設定されるべきかを覚えるのに役立つ良い経験則は何ですか? 私がgit-rebaseのドキュメントを何度も何度も何度も何度も繰り返したが、(退屈な科学的なホワイトペーパーなど)常に理解するのは難しいことを覚えておいてください。そのため、現時点では、他の人を巻き込んで把握する必要があると感じています。 私の目標は、これらの基本的なパラメータのドキュメントを確認する必要がないことです。今のところ、それらを覚えることはできず、すでに大量のリベースを行っています。したがって、これまでに他のすべてのコマンドとそのパラメーターを記憶できたが、でリベースできないことは少し変わっています--onto。
12 git 

4
<body>に<style>を含めるのは間違った考えでしょうか?
以下のコードでは、headではなく、bodyタグを使用して内部スタイルシートを配置しました。単一ページアプリケーションの場合、個別のpagespecific.cssファイルを用意するのではなく、そのページだけに適用できるスタイルにこれを行うことを検討しています。 これをヘッドセクションに配置していないため、これがマイナス面になるシナリオはありますか? &lt;!-- myPartial.html starts here --&gt; &lt;!-- Like to keep styles unique to this html right here in this file --&gt; &lt;div&gt; &lt;style&gt; body { background-color: red; } #myText { color: white; } &lt;/style&gt; &lt;span id='myText'&gt;Hello&lt;/span&gt; &lt;/div&gt; &lt;!-- myPartial.html ends here --&gt;
12 html  css 


4
単一のアジャイル作業項目内の「関連」作業の処理
私は4人の開発者のプロジェクトチームに所属しています。単一の作業項目で発生する余分な作業を処理する方法については、長い間議論を重ねてきました。 この余分な作業は通常、タスクにわずかに関連するものですが、アイテムの目標を達成するために必ずしも必要なわけではありません(意見かもしれません)。例には以下が含まれますが、これらに限定されません。 ワークアイテムによって変更されたコードのリファクタリング アイテムによって変更されたコードに隣接するコードのリファクタリング チケット周辺のより大きなコード領域を再構築します。たとえば、アイテムで単一の関数を変更した場合、クラス全体を再実行してこの変更により適切に対応できるようになることに気付きます。 変更したフォームのUIを改善する この余分な作業が小さい場合は問題ありません。問題は、この追加作業により、元の特徴点の推定を超えてアイテムが大幅に拡張されることです。5ポイントのアイテムは実際には13ポイントかかる場合があります。あるケースでは、振り返ってみると80ポイント以上であった13ポイントのアイテムがありました。 これをどのように処理するかについての議論では、2つの方法が考えられます。 同じ作業項目で余分な作業を受け入れ、誤推定としてそれを書き留めることができます。これに関する議論は次のとおりです。 この種のことを考慮して、スプリントの最後に「パディング」を計画しています。 常にコードを見つけたときよりも良い形にしてください。中途半端な作業をチェックインしないでください。 リファクタリングを後で行う場合、スケジュールを立てることが難しく、完了しない可能性があります。 あなたはすでにコードの奥深くにいるので、あなたは今この仕事を処理するのに最高の精神的な「状況」にいます。後で戻ってきたときにそのコンテキストを失うよりも、今それを邪魔にならないようにして効率的にする方が良いでしょう。 現在の作業項目に線を引き、追加の作業は別のチケットになると言います。引数は次のとおりです。 個別のチケットがあると、新しい見積もりが可能になるため、実際のポイント数について自分自身に嘘をついたり、見積もりの​​すべてがひどいことを認めたりする必要はありません。 スプリントの「パディング」は、チケット要件を完了するための直接的な障壁である予期しない技術的な課題のためのものです。これは、「便利な」だけの副次的なアイテムを対象としたものではありません。 リファクタリングをスケジュールする場合は、バックログの先頭に配置してください。 それが出てきたときにいくぶん恣意的であるように思われるので、私たちが推定においてこのことを適切に説明する方法はありません。コードレビューアは、「これらのUIコントロール(実際にはこの作業項目で変更しなかったもの)は少し混乱します。それも修正できますか?」これは1時間のようですが、「このコントロールが他のコントロールと同じ基本クラスから継承するようになった場合は、この(数百行の)コードをすべてベースに移動して、これらすべてを再配線しないでください。 、カスケード変更など?」そして、それは一週間かかります。 これは無関係な作業をチケットに追加することで「犯罪現場を汚染」し、元の特徴点推定を無意味にします。 場合によっては、余分な作業がチェックインを延期し、開発者間のブロッキングを引き起こします。 追加のものが2 FP未満の場合は同じチケットに入れられ、それ以上の場合は新しいチケットにするなど、一部の人はカットオフを決定する必要があると今言っています。 私たちはアジャイルを使用して数ヶ月しか経っていないので、これをどのように処理するかについて、この辺りの経験豊富なアジャイル退役軍人の意見は何ですか?

4
長い文字列のデータベースに最適なアプローチ
質問と回答をデータベースに保存する必要があります。質問は1〜2文ですが、回答は長くなり、少なくとも1段落、おそらくそれ以上になります。 私が今これを行うことを知っている唯一の方法は、SQLデータベースです。ただし、これまでのところ、これらのデータベースはこのタイプまたはサイズのデータ​​には使用されていないため、これが良い解決策であるとは思いません。これは正しい方法ですか、それともこのデータを保存するより良い方法がありますか?生の文字列を保存するよりも良い方法はありますか?

6
ビジネスルールを文書化する方法
ビジネスルールを文書化する正式で最も一般的に行われている方法は何でしょうか。また、開発成果物のUI仕様をどのように文書化しますか(例:フォームフィールドの文書化、ボタンがフォーム上でどのように動作するか、情報テキストなど)。

2
ドメイン/永続性モデルの分離は、通常これが厄介ですか?
私はドメイン駆動設計(DDD)の概念に飛び込んでいますが、特にドメインと永続性モデルの分離に関して、いくつかの原則が奇妙であることに気付きました。これが私の基本的な理解です: (機能セットを提供する)アプリケーション層のサービスは、その機能を実行するために必要なリポジトリからドメインオブジェクトを要求します。 このリポジトリの具体的な実装は、それが実装されたストレージからデータをフェッチします サービスは、ビジネスロジックをカプセル化するドメインオブジェクトに、その状態を変更する特定のタスクを実行するように指示します。 サービスは、変更されたドメインオブジェクトを永続化するようリポジトリに指示します。 リポジトリは、ドメインオブジェクトをストレージ内の対応する表現にマップする必要があります。 さて、上記の仮定を考えると、以下は厄介なようです: 広告2 :: ドメインモデルは、ドメインオブジェクト全体(すべてのフィールドと参照を含む)をロードしているように見えます。それを要求した関数には必要ない場合でもです。他のドメインオブジェクトが参照されている場合は、それらのドメインオブジェクトとそれらが参照しているすべてのオブジェクトを順にロードしない限り、完全にロードすることさえ不可能かもしれません。遅延読み込みが思い浮かびますが、これは、最初にリポジトリの責任であるドメインオブジェクトのクエリを開始することを意味します。 この問題を考えると、ドメインオブジェクトをロードする「正しい」方法には、各ユースケースに専用のロード関数があるようです。これらの専用関数は、それらが設計されたユースケースで必要なデータのみをロードします。ここで、ぎこちないことが出てきます。最初に、リポジトリの実装ごとにかなりの量のロード関数を維持する必要があり、ドメインオブジェクトはnull、フィールドを運ぶ不完全な状態になってしまいます。後者は、値がロードされなかった場合でも、それを要求した機能によって要求されるべきではないため、技術的には問題になりません。それでも厄介で潜在的な危険です。 広告3 :: ドメインオブジェクトは、リポジトリの概念がない場合、構築時に一意性の制約をどのように検証しますか?たとえばUser、一意の社会保障番号(指定されている)を使用して新しいを作成する場合、データベースに一意性制約が定義されている場合にのみ、リポジトリにオブジェクトの保存を要求すると、最も早い競合が発生します。それ以外の場合はUser、指定された社会保障でを探し、それが存在する場合は、新しいものを作成する前にエラーを報告できます。ただし、制約チェックはサービスに存在し、それらが属するドメインオブジェクトには存在しません。私はドメインオブジェクトが検証のために(注入された)リポジトリを使用することが非常によく許可されていることに気づきました。 広告5 .: 私は、ドメインオブジェクトのストレージバックエンドへのマッピングを、ドメインオブジェクトが基になるデータを直接変更するのと比較して、作業集約的なプロセスとして認識しています。もちろん、具体的なストレージ実装をドメインコードから切り離すことは、必須の前提条件です。しかし、それは確かにそのような高コストで来るのでしょうか? ORMツールを使用してマッピングを行うオプションがあるようです。ただし、ORMの制限に従ってドメインモデルを設計する必要がある場合や、ドメインからインフラストラクチャレイヤーへの依存関係を導入する必要がある場合もあります(たとえば、ドメインオブジェクトでORMアノテーションを使用するなど)。また、私はORMがかなりの計算オーバーヘッドをもたらすことを読みました。 ORSQLのような概念がほとんど存在しないNoSQLデータベースの場合、ドメインモデルで変更されたプロパティをどのように追跡しますsave()か? 編集:また、リポジトリがドメインオブジェクトの状態(つまり、各フィールドの値)にアクセスするためには、ドメインオブジェクトがカプセル化を解除する内部状態を明らかにする必要があります。 一般に: トランザクションロジックはどこに行きますか?これは確かに永続化に固有のものです。一部のストレージインフラストラクチャは、トランザクションをまったくサポートしない場合もあります(インメモリモックリポジトリなど)。 複数のオブジェクトを変更する一括操作の場合、オブジェクトのカプセル化された検証ロジックを通過するために、各オブジェクトを個別にロード、変更、および保存する必要がありますか?これは、データベースに対して単一のクエリを直接実行することとは対照的です。 このトピックについて、いくつかの説明をお願いします。私の仮定は正しいですか?そうでない場合、これらの問題に取り組む正しい方法は何ですか?

2
`function foo(){}`の代わりに `const foo =()=> {}`を使用する理由
たとえば、このReduxビデオでは、講師は常に次のような構文を使用します const counter = (state=0, action) =&gt; { ... function body here } 私は「伝統的な」だけを使用します function counter(state=0, action) { ... function body here } これは実際には短く、IMOはより明確です。小さな「=&gt;」の不規則な右端をスキャンするよりも、「関数」の単語をページのかなり均一で構造化された左端をスキャンする方が簡単です。 以外でthis、意見ではなく客観的になるようにしようとすると、newfangled構文にいくつかの有用な違いまたは利点がありますか?

1
jwtの「aud」と「iss」の違い
より堅牢な認証サービスを実装したいのですが、やりたいことのjwt大部分を占めています。コードの記述方法は理解していますが、予約済みissとaudクレームの違いを理解するのに少し問題があります。1つはトークンを発行しているサーバーを定義し、1つは使用を目的としたアプリケーションを指していることを理解しています。しかし、私の聴衆と発行者が同じものであることを私が理解している方法は、myserver.com来た人myserver.comが承認され認証されるようにトークンを発行することです。2つのクレームの違いはわかりませんが、1つあることは知っています。 で書かれた良い記事がありましたmsdn すべての予約済みのクレームで、発行者とオーディエンスが完全に異なっていたため、最も混乱しました。

2
クッキー対セッション対jwt
Webアプリケーションの認証/承認について読んでいます。誰かが私の現在の知識を確認/修正できますか? Cookie:初期のバージョンでは、一意のクライアントIDを含むテキストファイルと、クライアントについて必要なその他すべての情報(ロールなど) セッション:一意のクライアントIDのみがファイル(Cookieとも呼ばれます)で送信され、それ以外はすべてサーバーに保存されます JWT:すべてがトークンに保存されます(これは、Cookieとも呼ばれるテキストファイルに保存することもできます) フィードバックをありがとう!

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