ソフトウェア工学

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

1
Webアプリケーションで使用されているBootstrapのバージョンを更新し続けるのは理にかなっていますか?
意識しないかもしれない人々に、ブートストラップは土台またはWebサイトやWebアプリケーションを構築する上での出発点として使用することができますHTML、CSSやJSのフレームワークです。 私は現在、フレームワークのバージョン3で設計されたアプリケーションを本番環境に置いていますが、会社のポートフォリオの下にある他のWebサイトと一貫性のあるスタイリングを追加しています。 しかし、私たちはそのWebアプリケーションにいくつかの大規模な追加に着手しようとしているので、アプリケーションで使用されているブートストラップのバージョンを更新する必要がありますか? これにはいくつかの理由があります。1つ目は、バージョン4のブートストラップにはバージョン3との完全な下位互換性がないことです。多くのヘルパークラスが変更、置換、または完全に削除されているため、更新するのは容易ではありません(過度ではありませんが、 package.jsonのバージョン番号を更新し、どちらかを再構築するだけの簡単な問題)。 今、ブートストラップの私の理解は、最初はあなたのウェブサイト/ウェブアプリケーションを地面から離すことについてだったということです。しかし、アプリケーションがそのブートストラップポイントをはるかに超えていることを考慮すると、ブートストラップフレームワークを更新する時間を投資することを検討する必要がありますか? 表面的には、これは明白な答えのある質問のように見えることを知っています-もちろん、あなたは自分のものを最新に保ちます!!!。しかし、Bootstrapを開始の手段として考えている場合、起動して実行した後、なぜフレームワーク自体を更新し続ける必要があるのでしょうか?アプリケーションのニーズに合わせてパーツを既にカスタマイズしています-別の方向に進むことを許可してはいけませんか? フレームワークとしてのBootstrapが実際に開始することである場合(RailsやDjangoのようなフレームワークとは異なり、アプリのライフサイクル全体を通して継続的な生産性について)、ある時点で、スターターフレームワークから離婚すべきではありませんか? (例として、Angularスターターリポジトリのクローンを作成してアプリケーションの構築を開始する場合、4か月後または5か月後に戻って、そのスターターリポジトリの更新を現在アクティブなアプリケーションにマージしようとしますか?) PS。ここで質問するのはこれが初めてです。これがこのフォーラムに適切なタイプの質問でない場合は、事前に謝罪します。

6
POSTの前にプレビューを表示するRESTエンドポイント
RESTバックエンドとHTML + JSフロントエンドを搭載した新しいWebアプリケーションを設計しています。 1つのエンティティを変更するためのPOSTメソッドが1つあり(Configを呼び出しましょう)、アプリケーションの多くの要素の状態にいくつかの副作用があります。POSTが次のように実行されると仮定します。 POST /api/config BODY {config: ....} このため、これらの変更が行われる前にプレビューを表示して、エンドユーザーが何が変更されるかを確認できるようにします。 私が最初に考えたのは、プレビューのGETエンドポイントを作成して、エンティティの新しい状態の本体を送信することです。こちらです: GET /api/preview/items BODY {config: ....} 新しい構成のアイテムの新しい状態が表示される場合があります。 GET /api/preview/sales BODY {config: ....} 新しい構成での販売の新しい状態が表示される場合があります。 アプリケーションの状態を変更しないので、GET動詞を使用することをお勧めします。ただし、GET要求での要求本体の使用は推奨されないようです。 これについて良い習慣はありますか?他の選択肢として、1つの方法で構成をドラフトとして保存し、他の方法で結果を表示することもできますが、追加の手順が必要で、サーバーでドラフトを管理する必要があります。 POST /api/preview/config BODY {config: ....} GET /api/preview/items?idPreviewConfig=1

4
物理エンジンの設計を視覚化する方法は?
私は物理エンジンを作成していますが、全体を把握するのが非常に難しくなっています。多くの場合、休憩後にコードに戻ると、なぜそれが機能しないのか覚えていません。ほとんどの問題は、単純なプログラミングの間違いではなく、物理エンジンの設計上の欠陥です。そのため、プログラミングする前に設計を終了する必要があります。 ただし、物理エンジンの設計全体を紙に書く方法が必要です。さもなければ、明日それを忘れて再び失われます。UMLクラス図は、物理エンジンの設計にはまったく適していません。私はクラスではなくプロセスについて本当に気にします。プロセスの単一ステップ(フレーム)をモデル化しても、多くのステップでのエンジンの最終的な動作を理解するのに役立たないため、ビジネスプロセス図は本当に便利だとは思いません。 したがって、プロセスを追跡するためにどのような図を使用する必要がありますか?物理エンジンを作成するためにどのようなダイアグラムの専門家が使用しますか?

2
For-Case Antipatternとは何ですか?
今日のTDWTFの記事は、著者からの告白から始まります。 For-Caseアンチパターンが何であるかは、比較的最近まで、アンチパターンとして非難する記事が相次いだときまで知りませんでした。おそらくある時点で使用したと思いますが、名前でそれを知らなかったのです。これは、一般にforループ、caseステートメント、解決される問題、または3つすべての組み合わせの誤解を意味する教科書のアンチパターンと考えられています。 それから、読者は、当然のことながら、For-Caseアンチパターンが何であるかを知っているかのように進み、それ以上の説明は必要ありません。 しかし、私はしません!Remyが語る「一連の記事」を見たことはありません。Googleで見つけることができる唯一の重要な参照(Remyの記事以外)は、for-ifアンチパターンに関するRaymond Chenのブログ投稿です。 。しかし、彼は「for-case anti-pattern」も定義していません。 これらの人々が話しているこの「For-Caseアンチパターン」とは何ですか?

2
Cookieの代わりにソケットを使用して個人を識別できないのはなぜですか?
IPアドレスを使用して個々のクライアントを識別することに関して別の質問がありました。IPアドレスが不十分な理由は理解できたと思います。しかし、より多くの情報があり、私が理解していることから、ステートフルなソケットはどうですか?クッキーの代わりに使用される可能性はありませんか?
17 sockets  cookies 

5
リリースフィーバー中に効率的なコードレビューを行う方法
リリースの締め切りは明日です。同僚はこのリリースに不可欠なタスクをやっと完了しました。プロジェクトマネージャーは肩越しに立ち向かい、最終的にビルドを作成するように促しました。重大なものではありませんが、明日リリースされなければ、手放せないものです。そして、事態を悪化させるには、できるだけ早く終了するために必要な自分の仕事があります。それで、あなたは何をしますか?プレッシャーにも関わらず異議を申し立てますか、それともこれを滑らせますか? 私が見つけた1つの方法は、このコミットを別のブランチに一時的にマージし、後で確認できるようにすることです。問題が表面的なものであり、コードレビューを待っている唯一の問題である場合に機能します。しかし、これを処理するより効率的な方法はありますか?たとえば、コードレビューとテストのみを1人で行うことをお勧めしますか?

9
チケットを見積もる際にテスターの時間を含めるべきですか?
チケットの推定時間を作成するとき、テスター(QA)にかかる時間をチケットの推定に含める必要がありますか?以前は、テスターの時間なしで常に見積もっていましたが、常にそれを含めることについて話し合っています。チケットがあと1週間でかかる合計時間を知る必要があるため、現在のスプリント、リリース前の最後のスプリントには意味があります。 チームのリソースを制限する傾向があるため、見積もりは開発者向けの時間であると常に理解していました。同僚は、テスターの時間より前に働いていた場所はどこでも含まれていると言っています。 明確にするために、これは、開発者が適切なカバレッジでユニット、統合、およびUIテストを記述しているプロセスのためのものです。
17 agile  scrum  estimation  qa 

6
長い「列」コードのために短い変数名を犠牲にしますか?
私は適切なプログラミングスキルを習得しようとするCSクラスのアマチュアプログラマーです。これが私のコードの見た目です。コードの端は103列まで拡張されています。 int extractMessage(char keyWord[25], char cipherText[17424], int rowSize, char message[388]) { int keyColumn = 0; int cipherColumn = 0; int offset = 1; int nextWord = 1; int lengthOfWord = 0; int lengthOfCipher = 0; lengthOfWord = length(keyWord); lengthOfCipher = length(cipherText); while (keyWord[keyColumn] != cipherText[cipherColumn]) { cipherColumn++; if (keyWord[keyColumn + …
17 c  coding-style 

3
複数の非同期サービスを並行して呼び出す
互いに依存しない非同期RESTサービスはほとんどありません。それは、Service1からの応答を「待っている」間で、Service2、Service3などを呼び出すことができます。 たとえば、以下のコードを参照してください。 var service1Response = await HttpService1Async(); var service2Response = await HttpService2Async(); // Use service1Response and service2Response 現在、にservice2Response依存せず、service1Response独立して取得できます。したがって、最初のサービスの応答を待って2番目のサービスを呼び出す必要はありません。 Parallel.ForEachCPUバウンド操作ではないため、ここで使用できるとは思わない。 これらの2つの操作を並行して呼び出すために、useを呼び出すことができますTask.WhenAllか?私が使用してTask.WhenAllいる問題の1つは、結果を返さないことです。結果を取得するには、を呼び出したtask.Result後に呼び出すことができます。Task.WhenAllすべてのタスクが既に完了しており、応答を取得する必要があるためです。 サンプルコード: var task1 = HttpService1Async(); var task2 = HttpService2Async(); await Task.WhenAll(task1, task2) var result1 = task1.Result; var result2 = task2.Result; // Use result1 and result2 このコードは、パフォーマンスの面で最初のコードよりも優れていますか?私が使用できる他のアプローチはありますか?

3
RESTful APIでのトークン更新/セッション有効期限の処理
ユーザー認証にJWTトークンを使用するRESTful APIを構築しています(loginエンドポイントによって発行され、その後すべてのヘッダーで送信されます)。一定時間後にトークンを更新する必要がありrenewます(エンドポイントを呼び出して、更新されたトークンを返します) )。 トークンの有効期限が切れる前にユーザーのAPIセッションが無効になる可能性があるため、エンドポイントはすべて、1)トークンがまだ有効で、2)ユーザーのセッションがまだ有効であることを確認することから開始します。クライアントがトークンをローカルに保存するため、トークンを直接無効にする方法はありません。 したがって、すべてのエンドポイントは、クライアントに次の2つの条件を通知する必要があります。1)トークンを更新する時間、または2)セッションが無効になり、システムへのアクセスが許可されなくなったこと。2つの条件のいずれかが発生したときにクライアントに信号を送るエンドポイントの2つの代替案を考えることができます(クライアントがいずれかのオプションに適応できると仮定します): セッションが無効になった場合はHTTP 401コード(無許可)を返し、トークンの有効期限が切れてrenewエンドポイントを呼び出すときは412コード(前提条件失敗)を返します。これにより200(ok)コードが返されます。 セッションが無効であるか、トークンの有効期限が切れていることを通知するために401を返します。この場合、クライアントはすぐにrenewエンドポイントを呼び出し、200を返すとトークンが更新されますが、renew401も返す場合は、クライアントがシステム外にあることを意味します。 上記の2つの選択肢のうち、どちらをお勧めしますか?どちらがより標準的で、理解しやすく、そして/またはよりRESTfulでしょうか?または、まったく別のアプローチをお勧めしますか?どちらのオプションにも明らかな問題やセキュリティ上のリスクがありますか?回答にあなたの意見を裏付ける外部参照が含まれている場合の追加ポイント。 更新 皆さん、本当の質問に焦点を合わせてください- 更新/セッションの無効化を通知するための2つのHTTPコードの選択肢のうち、どちらが最適ですか?私のシステムがJWT とサーバーサイドセッションを使用しているという事実を気にしないでください、それは非常に特定のビジネスルールのための私のAPIの特性であり、私が助けを求めている部分ではありません;)

1
関数型プログラミングでジェネレーター関数は有効ですか?
質問は次のとおりです。 ジェネレーターは関数型プログラミングのパラダイムを壊しますか?なぜですか? はいの場合、ジェネレーターを関数型プログラミングで使用できますか? 以下を考慮してください。 function * downCounter(maxValue) { yield maxValue; yield * downCounter(maxValue > 0 ? maxValue - 1 : 0); } let counter = downCounter(26); counter.next().value; // 26 counter.next().value; // 25 // ...etc downCounterこの方法は、ステートレス表示されます。同様に、downCounter同じ入力で呼び出すと、常に同じ出力になります。ただし、同時に、呼び出しnext()は一貫した結果を生成しません。 この例でcounterはジェネレーターオブジェクトであるため、ジェネレーターが関数型プログラミングパラダイムを破るかどうかはわかりません。そのため、呼び出しnext()はまったく同じで作成された別のジェネレーターオブジェクトと同じ結果を生成しますmaxValue。 同様someCollection[3]に、配列を呼び出すと、常に4番目の要素が返されます。同様next()に、ジェネレーターオブジェクトで4回呼び出すと、常に4番目の要素が返されます。 より多くのコンテキストについては、これらの質問は、プログラミングカタの作業中に提起されました。質問に答えた人は、関数型プログラミングでジェネレーターを使用できるかどうか、およびジェネレーターが状態を保持するかどうかという質問を提起しました。

2
複数の小さなアプリを含む大きなAngular 2アプリを作成する
React(with Redux)とAngular 2を選択するための長い3か月にわたる議論と研究の末、私の会社のフロントエンドチームは、Angular 2を採用することを決定しました(私たちの問題により適しています)。 現在、多くの異なるフロントエンドテクノロジーで構成されているエンタープライズアプリビジネスに取り組んでいます(バックエンド全体をRESTfulにしています)。すべてを置き換えて、将来のトレーニングと品質管理を容易にする単一のテクノロジーが必要でした。 私たちの製品の性質を考えると、それは広大であり、その中には異なるドメインであり、スタンドアロンアプリとして作成できるモジュールがありますが、製品自体は単一のURLに存在します。 例; 私の製品をSuperAppと呼びましょう。 UIとして、SuperAppには標準のログインシステムと、子モジュール/サブ製品へのナビゲーションがあり、ワークフローは次のように表示されます。 SuperApp ユーザーを認証する パスワードを忘れたウィザード 認証なしでアクセスできる公開ページ 認証されたユーザー ナビゲーションシステム ホーム サブ製品1 サブ製品2 サブ製品3 プロフィール ... ... グループ ... ... 上記表現にそのノート、Sub-product1そしてSub-product2全く異なるビジネスドメインを有する、2つの全く異なる領域です。 私が今考えることができるのは、自分自身に関連するコンポーネントとビューのみを持つ単一のAngular 2プロジェクトとしてSuperAppを作成でき、SuperAppは複数の子アプリのロードも担当しているということです。Sub-product1、Sub-product2(自分の有する再び、異なる角度の2つのプロジェクトpackage.json、webpack設定、等)をダムコンポーネントを介して、トップレベルのルーティングを提供するシェルと、これらの子アプリを保持するためのプレースホルダとして機能します。 、いったんSub-product1シェル内にロードされ、それがSuperAppがで上陸したことを現在のルートに、独自のルートを追加します。 分離が必要な理由は、これらのさまざまなアプリ(現在はExtJSを使用して構築されている)が専用のチーム(私たちは500人以上の開発者を抱えている会社です)を持っているためです。グランド親アプリに依存せずに好みに依存します。 しかし、公式のAngularドキュメントやWebでは、ネストされたAngularアプリを持つことができるかどうかはまったくわかりません(子アプリの依存関係が完全に分離されてロードされている間にフレームワークコードが共有される方法で)またはそのような問題を解決するための代替アプローチがあるかどうか。 関連する記事へのガイダンスやリンクも歓迎します。

2
リアルタイムの重いWebソケットベースのWebアプリケーションをアーキテクチャ化する方法は?
リアルタイムの単一ページアプリケーションを開発する過程で、ユーザーに最新のデータを提供するためにwebsocketを徐々に採用しています。この段階で、アプリの構造を破壊しすぎていることに気がつき、この現象の解決策を見つけることができませんでした。 詳細に入る前に、ほんの少しのコンテキスト: webappはリアルタイムSPAです。 バックエンドはRuby on Railsにあります。リアルタイムイベントはRubyによってRedisキーにプッシュされ、その後、マイクロノードサーバーがそれをプルバックしてSocket.Ioにプッシュします。 フロントエンドはAngularJSにあり、Nodeのsocket.ioサーバーに直接接続します。 サーバー側では、リアルタイムになる前に、明確なコントローラー/モデルベースのリソース分離があり、それぞれに処理が関連付けられていました。この古典的なMVCの設計は、ユーザーにWebソケットを介してプッシュを開始した直後に、完全に細断された、または少なくともバイパスされました。これで、すべてのアプリが多かれ少なかれ構造化されたデータを流す単一のパイプができました。そして、私はそれがストレスだと感じます。 フロントエンドでの主な懸念は、ビジネスロジックの重複です。ユーザーがページを読み込むとき、古典的なAJAX呼び出しを介してモデルを読み込む必要があります。しかし、リアルタイムのデータフラッディングも処理する必要があり、クライアントサイドモデルの一貫性を維持するために、クライアントサイドのビジネスロジックの多くを複製しています。 いくつかの調査の後、いくつかの特定のトピックを念頭に置いて、現代のWebアプリのアーキテクチャをどのように設計することができ、どのように設計するべきかについてのアドバイスを提供する良い投稿、記事、書籍などは見つかりません: サーバーからユーザーに送信されるデータの構造化方法 「このリソースは更新されたので、AJAX呼び出しでリロードする必要があります」などのイベントのみを送信するか、更新されたデータをプッシュし、初期AJAX呼び出しでロードされた以前のデータを置き換えますか? 送信されたデータに一貫性のあるスケーラブルなスケルトンを定義する方法は?これはモデル更新メッセージですか、または「blablablablahにエラーがありました」メッセージです バックエンドのどこからでもすべてに関するデータを送信しない方法 サーバー側とクライアント側の両方でビジネスロジックの重複を減らす方法

4
アプリケーションでデプロイするには、読み取り専用データをどのように保存すればよいですか?
私はデスクトップアプリケーションを開発しており、このアプリケーションを実行するにはいくつかの情報が必要ですが、この情報は変更されません(アプリの実行ごとにデータを読み込む必要がありますが、データは変更されません)。データは、アプリを実行しているコンピューターと同じコンピューターに保存する必要があります(クライアント側のストレージ?)。 また、ユーザーがこの情報を簡単に変更できない場合も優れています(ITの知識があまりないと仮定します)。 この種の情報はどのように保存すればよいですか?ローカルデータベース?アプリケーションと共に送信されるXML WPFを使用しています。
17 c#  design  data  wpf 

1
同じアプリケーション内のRESTful HTTPとwebsocket?
アプリケーションがWebSocketライブフィード用に既に開かれている場合、AJAXサーバーとのその他の通信にそれを使用する必要がありますか? 接続はすでに開かれているので、Request/Responseリアルタイムではなく、リアルタイムのリクエストに使用する必要がありますか? RESTful HTTPリクエストのほうがデバッグが簡単だと思うので、リクエストを好む ブラウザでURLまたはカールを使用して、APIが返すものをテストできます。を開くためにコードを記述する必要はありませんWebSocket。 同じアプリケーションにRESTful HTTP APIあるのWebSocketは奇妙でしょうか?
17 rest  ajax  websockets 

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