ソフトウェア工学

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

3
大量の_構造化_データを保存するにはどうすればよいですか?
アプリケーションは継続的に(ほぼ毎秒)ユーザーの位置を収集して保存します。 このデータは構造化されています。リレーショナルデータベースでは、次のように保存されます。 | user | timestamp | latitude | longitude | ただし、データが多すぎます。ユーザーごとに、毎日60×60×24 = 86,400レコードになります。ユーザー数が1000であっても、これは毎日86,400,000レコードを意味します。 そして、それは毎日86,400,000レコードだけではありません。これらのレコードが処理され、それらの処理されたバージョンも保存されるためです。したがって、その数に約2を掛けます。 データの使用方法 基本的に、位置データのより粗いバージョンを作成して、より簡単に使用できるようにする予定です。あれは: タイムスタンプ付きの受信データを並べ替えます。 このリストを順番に繰り返して、場所が大幅に変更されたかどうかを判断します(緯度と経度の変化量を確認してください)。 重要ではない場所の変更を出力の単一のエントリとして表します(したがって、出力は場所データのより粗いバージョンです)。 大幅な変更のためにさらに大きな緯度と経度の変更を要求することにより、出力でこのプロセスを繰り返します。したがって、前の出力から生成される出力は、さらに粗くなります。 プロセス全体を必要なだけ繰り返します。 さまざまな解像度を集計してユーザーに送信します。また、後で使用できるように、データのすべての解像度を保存します。 このデータを保存するには何を使用すればよいですか?リレーショナルデータベースまたはNoSQLソリューションを使用する必要がありますか?このアプリケーションを設計するとき、他に何を考慮すべきですか?

3
複数のプロジェクトにまたがって取り組む問題のストーリー準備をモデル化する方法
当社では、複数のチームが同時に複数のプロジェクトのさまざまなコンポーネントに取り組みます。たとえば、あるチームが特定の種類のプロジェクトに特定の種類のソフトウェア(またはハードウェア)を作成し、別のチームが別の特定の種類のソフトウェアを作成する場合があります。Jiraプロジェクトを使用して特定のプロジェクトの問題をホストし、Jiraボードを使用して異なるチームのスプリントを実行します。 私たちはプロジェクト間でコードの重複を回避するという問題に直面し、それらのプロジェクトで使用する一連のコアライブラリを開発しました。プロジェクトに取り組んでいる間に、一部の開発者は、自分が書いたコードの一部がより興味深く、コアライブラリに抽出する必要があること、または使用している一部のコアコードにバグがあり、さらにパラメーター化が必要であること、または新機能...あなたはそれに名前を付けます。 したがって、コアプロジェクトのバックログに入るコアライブラリの問題を作成します。これらの問題はすべて、コアライブラリミーティング(週に1回)でレビュー、優先順位付け、推定され、将来のスプリントでは(プロジェクト固有の問題と共に)優先順位に従って取り組みます。 優先順位付けは問題を並べ替えることで行われ、並べ替えられた問題にsortedラベルを付けます(並べ替えられていない問題を検索できるようにするため)。次に、コアコンポーネントごとに1つの課題をバックログの先頭に手動で配置して、それらを最初に処理します。一部のチームがそのような問題をスプリントに入れる場合、代わりに別のアイテムをバックログの上部に手動でドラッグする必要があります。 これはかなりエラーが発生しやすいです。基本的に、私たちが持っているのは、「未解決」と「進行中」の間の「ソート済み」と「推定済み」の追加の問題ステータスです。これをsortedラベルとボード内での位置で反映することは、かなり面倒でエラーが発生しやすくなります。(たとえば、誰かがスプリントで問題を上下に移動すると、これはコアボードに反映され、数週間前の広範なディスカッションでチームが決定した可能性がある問題の順序を静かにスクランブルします。) これを実装するより良い方法は何でしょうか?

1
Identity ServerはASP.NET Core Identityが提供しないことを何を提供しますか
ASP.NET Coreを使用して新しいWebサイトを作成するときに、全体像を把握しようとしています。私のウェブサイトのユーザーがFacebookやGoogleなどのソーシャルメディアに登録してログインできるようにしたいと考えています。リソースがWebAPIにリソースを要求するときに登録されると、リソース要求をユーザーごとにパーソナライズできるように、ログインしているユーザーを知る必要があります。私はASP.NET Core Identityを試してみましたが、これは必要な機能の多くを提供しているようです(たとえば、外部プロバイダーへの登録、ログイン、Entity Frameworkを使用したデータベースへのこれらの詳細の格納など)。私が本当に望んでいるよりも少し魔法-多くのチュートリアルは、例えばFacebookと話すためにバックグラウンドでどのように機能するかを説明せずにそれを機能させるためのステップをリストしています。 フロントエンドでは、Aureliaを使用したいと考えています。IdentityServerを使用する多数のチュートリアルに気づきました。OpenIDConnectの実装であると理解しています。 IdentityServerに関するビデオを見てきた... IdentityServerでASP.NET Core Identityを使用できることを理解しています。私が得られないのは、それがASP.NET Core Identityを実装するだけでは役に立たないかどうかです。(つまり、Aurelia、ASP.NET Core Identityを統合するためのチュートリアルを見つけることができないようです...)一般的に、ASP.NET Core Identityを使用するだけでなく、Identity Serverをさらに複雑にする利点は何ですか?
9 asp.net  oauth2 

3
データベースのドメインロジックの時代は終わりましたか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 私は最近、2016年にこの意見に出くわしましたが、データベースのドメインロジックにはまだケースがあると言っています。 これは完全に時代遅れだと思いました。その男がまだ90代に住んでいるのか、それとも本当のことなのかと思います。レガシーシステムを脇に置きます。 セキュリティ要件のため、データベースにドメインロジックを含めることについてはどうでしょうか。それは本当にやるべきことですか?
9 database 

2
イテレーターをデザインパターンにする理由
他の同様の構成と比較してIteratorが特別になるのは何だろうと思っていました。そのため、Gang of Fourがデザインパターンとしてリストされています。 イテレーターは、ポリモーフィズム(共通のインターフェースを持つコレクションの階層)と懸念の分離(コレクションの反復は、データの構造化方法から独立している必要があります)に基づいています。 しかし、コレクションの階層を、たとえば数学オブジェクト(整数、浮動小数点数、複素数、行列など)の階層と反復子を、これらのオブジェクトの関連するいくつかの操作を表すクラス(例えば、指数関数)で置き換えるとどうなるでしょうか。クラス図も同じです。 同じように機能する、Writer、Painter、Encoderなどのより多くの類似の例、おそらくより優れた例を見つけることができます。しかし、これらがデザインパターンと呼ばれるのを聞いたことがありません。 では、イテレータが特別な理由は何ですか? コレクション内の現在の位置を格納するために変更可能な状態を必要とするため、より複雑になるのは事実ですか?しかし、その場合、変更可能な状態は通常望ましいとは見なされません。 私のポイントを明確にするために、より詳細な例を挙げましょう。 ここに私たちの設計問題があります: クラスの階層と、これらのクラスのオブジェクトに対して定義された操作があるとします。この操作のインターフェースは各クラスで同じですが、実装は完全に異なる場合があります。同じオブジェクトに複数の操作を適用すること、たとえば異なるパラメーターを使用することが理にかなっていることも想定されています。 これが私たちの設計問題(実際には反復子パターンの一般化)の賢明な解決策です: 懸念を分離するために、操作の実装を関数として元のクラス階層(オペランドオブジェクト)に追加しないでください。同じオペランドに操作を複数回適用する必要があるため、関数だけでなく、オペランドへの参照を保持するオブジェクトで表す必要があります。したがって、オペランドオブジェクトは、演算を表すオブジェクトを返す関数を提供する必要があります。このオブジェクトは、実際の操作を実行する関数を提供します。 例: MathObject派生クラスMyIntegerとを備えた基本クラスまたはインターフェイス(愚かな名前です。たぶん誰かがより良いアイデアを持っています。)がありMyMatrixます。それぞれについて、正方形、立方体などの計算を可能にMathObjectする操作Powerを定義する必要があります。だから私たちは(Javaで)書くことができました: MathObject i = new MyInteger(5); Power powerOfFive = i.getPower(); MyInteger square = powerOfFive.calculate(2); // should return 25 MyInteger cube = powerOfFive.calculate(3); // should return 125

3
高可用性アプリケーションを設計する方法
現在、クラシックなn層アプリケーションがあります:DB / Webサービス/フロントエンド。他のコンポーネントがありますが、基本的なレイアウトです。 アプリケーションの可用性を改善する主な理由は3つあります。 私たちのホストは時々(すべてのように)停止を経験し、私たちは顧客への影響を最小限にしたいので、たとえば、データセンターAがダウンした場合、彼らはデータセンターBをオンにします。 バージョンをアップグレードすると、メンテナンスのためにサイトがシャットダウンされ、通常は数時間かかります(移行スクリプトなど)。ユーザーには、ダウンタイムを最小限に抑えて、よりシームレスな移行を望んでいます(サーバーAのアップグレード中にサーバーBを使用します)。 オプションとして、私たちの顧客は世界中にあり、私たちは彼らの接続が不安定である可能性があるにもかかわらず、可能な限り最高の体験をしてもらいたいと思っています(インドの開発者と一緒に働いた人は誰でも私が何を言っているか知っているはずです)。理想的には、私たちは彼らのオフィスにサーバーを接続できるようにしたい(または彼らの都市の近くのデータセンターを使用できる)ようにしたい、そしてそれは私たちのアーキテクチャにシームレスに統合するだろう。 リモートで99%の可用性を必要とせず、95%も必要としません。ドキュメント管理アプリです。誰も気にしない。ただし、移行には時間がかかる場合があり、世界中にお客様がいるため、お客様が1日のほとんどの時間にわたって仕事をすることができない場合があります。 SQLの部分については、「適切な」DBAがいない場合でも、SQLの可能性(レプリケーション、ミラーリングなど)について知っています。DB側では、このためのリソースを見つけるのは非常に簡単です。セッションやコードの保存など、他のすべてが難しいのは何ですか。Webサービスサーバーがダウンした場合、UIはそれを切り替える必要があることをどのように認識しますか?セッションはどのようにサーバー間で保持されますか? 残念ながら、私たちの誰もこの分野での経験がなく、どこから探し始めればよいかさえわかりません。このためのベストプラクティスはありますか?デザインパターン?ライブラリー(お金がないため、無料で使用できます)? ASP.NetとSQL Serverを使用しており、中央にWCF Webサービスがあります。Windowsサービスはたくさんありますが、ミッションクリティカルではありません。Webサイトを処理する方法がサービスに適用できると思います。 ほとんどのクラウドプラットフォームがこのための組み込みシステムを提供していることを理解していますが、私たちのシステム管理者はすべてを自分で管理し、誰にも依存しないことを望んでいるため、クラウドホスティングは不可能です。

2
RESTベースのアプリケーションのJWT認証のエンタープライズパターン?
JWT仕様では、ペイロードとその送信方法のみが記述されていますが、認証プロトコルは開いたままになっているため、柔軟性が得られますが、残念ながら柔軟性により、アンチパターンや設計ミスが発生する可能性があります。 私はJWT認証のためによく考えテストされたエンタープライズパターンを探しています。これは使用または適応できますが、完全なものを見つけることができませんでした。 私が考えていたのは: Authorizationヘッダーが満たされていない場合、またはJWTトークンが無効であるか、期限切れの場合は、HTTP 401を送信します。 認証するには、/ login RESTチャネルを使用し、JSONオブジェクトとしてユーザー名とパスワードを送信します トークンを存続させるには、/ keepalive RESTチャネルを使用し、N(5)分ごとに呼び出し、新しいJWTトークンを受け取り、呼び出しごとに既存のトークンを置き換えます(トークンはM(15)分後に期限切れになります)。 ただし、私を邪魔するのは、その/ keepaliveチャネルの必要性です。一方、ユーザーが不在の場合(キープアライブが必要かどうかの決定がまだ満たされていない場合)であっても、認証が期限切れになるのを防ぐ必要があります。もちろん、これらは追加の呼び出しであり、プロトコルの追加の複雑さです。興味深いのは、サーバーが自動的にトークンを延長することです。セッションベースの環境では、タイムスタンプをリセットすることで発生しますが、ここではサーバーが新しいトークンを送信する必要があります。毎回ではなく、トークンがR(たとえば10)分で期限切れになると送信されます。ただし、応答本文に配置することは、JSON応答プロトコルを変更することを意味し(したがって、ソリューションは侵襲的で透過的ではありません)、クライアントが処理できる追加のHTTPヘッダーを配置することは、必ずしも良いパターンであるとは限りません。私' 私のオープンポイントに答える、すぐに使えるエンタープライズパターンはありますか?プロトコルドラフトは信頼できるアイデアですか?ゼロからデザインするよりも、すぐに使えるものを使いたいです。

2
REST APIは複数のリソースを単一の複合リソースとして返すことができますか?
REST APIの作成を進めており、現在、次の問題が発生しています。 Foo最初のリソースです。CRUD操作は/foo/URI を介して適用できます。 Bar2番目のリソースです。CRUD操作は/bar/URI を介して適用できます。 Every Fooは0または1に関連付けられていますBar。のBarサブリソースとして扱わないのFooはBar、複数Fooのs 間で同じインスタンスを共有できるためです。ですから、の代わりに独立したURI経由でアクセスする方がよいと考えました/foo/[id]/bar。 私の問題は、かなりの場合、インスタンスを要求するクライアントがFoo関連するインスタンスにも関心があることBarです。現在、これは、1つではなく2つのクエリを実行する必要があることを意味します。1つのクエリで両方のオブジェクトを取得できる方法を紹介したいのですが、そのためのAPIをモデル化する方法がわかりません。これまでに思いついたこと: 次のようなクエリパラメータを導入できます/foo/[id]?include_bar=true。このアプローチの問題は、応答のリソース表現(JSON構造など)が異なるように見える必要がある(たとえば、{ foo: ..., bar: ... }単にシリアライズされたものではなく、コンテナーなどFoo)ため、Fooリソースエンドポイントが「異種」になることです。それは良いことではないと思います。をクエリする場合/foo、クライアントはクエリパラメータに関係なく、常に同じリソース表現(構造)を取得する必要があります。 もう1つのアイデアは、新しい読み取り専用エンドポイントを導入すること/fooandbar/[foo-id]です。この場合、のような表現を返すことは問題ありません。これ{ foo: ..., bar: ... }は、fooandbarリソースの「公式」表現にすぎないためです。ただし、そのようなヘルパーエンドポイントが本当にRESTfulであるかどうかはわかりません(これが質問のタイトルに「can」と書いた理由です。もちろん、技術的には可能ですが、それが良いアイデアかどうかはわかりません)。 どう思いますか?他の可能性はありますか?

2
マイクロサービスと正規モデル
このサイトでマイクロサービスについて読んでいたときに、以下のステートメントに出くわしました。正規スキーマとはどういう意味ですか?ドメインモデルと同じではありませんか? マイクロサービスアーキテクチャパターンは、正規スキーマの概念など、SOAの他の部分も拒否します。

1
gitflowを使用するときにクリーンなgit履歴を維持する-開発時のマージされていないコミット
gitflowを使用すると、release-1.0.0ブランチを作成してそれを両方masterとにマージするとdevelop、両方のブランチでコミットが失われます。 masterrelease-1.0.0マージ先のコミットはありませんdevelop developrelease-1.0.0マージ先のコミットはありませんmaster 代わりに、後にhotfix-1.0.1作成され、にマージmasterマージされているとき、develop、マージにコミットコミットどこ以前に含まれますrelease-1.0.0にマージされましたmaster。したがって、次のようになります。 User 'john doe' is trying to merge the following commits into 'develop' from 'hotfix-1.1.1'. * merge release-1.0.0 to master * merge release-1.1.0 to master * Fix shopping cart critical bug この音が混乱した場合、あなたは簡単にあなたが見るこのeverytieが気づくことができdevelop、通常の背後にあるコミットのカップルであるmaster(たとえ開発し、理論的には、必要があるだけで、それはメインブランチだから先になる。これらのコミットからマージされるrelease-x.x.xまでmaster)。 クリーンな履歴を維持するには、これをどのように処理する必要がありますか?
9 git  gitflow 

3
プライベート関数は、単にまだ抽出されていない機能の内部ユニットである場合があります。では、なぜそれらをテストしないのですか?
モジュールまたはクラスのプライベート関数が、まだ抽出されていない機能の内部ユニットである場合があります。これは、独自のテストに値する場合があります。では、なぜそれらをテストしないのですか?我々はなります彼らは、抽出しているとき場合は/に、後でそれらのためのテストを書きます。では、同じファイルにまだ含まれているテストを書いてみませんか? 実証するには: まず、書きましたmodule_a。それをテストしたいのですが。「プライベート」機能をテストしたいと思います_private_func。私は後で私はとにかく自身の内部モジュールにそれをリファクタリングする可能性がある場合、それのためにテストを書き、ではないだろう、なぜ私は理解していないそしてそれに対する書き込みテスト。 次の機能を持つモジュールがあると仮定します(クラスの場合もあります)。 def public_func(a): b = _do_stuff(a) return _do_more_stuff(b) _do_stuffおよび_do_more_stuffモジュールの「プライベート」機能です。 実装の詳細ではなく、パブリックインターフェイスのみをテストする必要があるという考えを理解しています。しかし、これは次のとおりです。 _do_stuffおよび_do_more_stuffモジュールの機能の大部分が含まれています。それらのそれぞれは、異なる「内部」モジュールのパブリック関数である可能性があります。しかし、それらはまだ進化しておらず、ファイルを個別に抽出するのに十分な大きさではありません。 したがって、これらの関数は機能の重要な単位であるため、これらの関数のテストは適切だと感じます。それらがパブリック関数として異なるモジュールにあった場合、それらをテストしたでしょう。では、別のファイルにまだ(またはこれまでに)抽出されていないときにテストしてみませんか?
9 python  testing 

3
インターフェースが具象クラスに依存することは問題ありませんか?
カスタムエラーハンドラーのJavaでインターフェイスを作成しています。 引数エラーオブジェクトを渡したいのですが、Exceptionクラスの子である必要があります。 定義したクラス名をインターフェイスで使用しても大丈夫ですか? 実装に依存しないという点で、インターフェースを少なくしませんか? 私はこのようなことをやろうとします: public class CustomException { /* ... Implementation ... */ } public interface Interface { void onError(CustomException ex); }

4
Pythonのクラスデコレーター:実用的なユースケース
私は、Pythonクラスデコレータの実用的で非合成の使用例を探しています。これまでのところ、私にとって意味のある唯一のケースは、次のようなプラグインやイベントなど、パブリッシャーサブスクライバーシステムにクラスを登録することです。 @register class MyPlugin(Plugin): pass または @recieves_notifications class Console: def print(self, text): ... 私が考えていた他の正気なケースは、継承、メタクラス、または装飾メソッドの上に構築された可能性があります。クラスデコレータの使用例を教えてください。 ありがとうございました!

3
最もカロリーが均等な食事の取り方を選ぶ
私は1日に5回食事をし、週に7日あるので、各食事に7つのレシピがあり、合計35のレシピがあるとします。各レシピにはカロリー数があります。毎日、食事ごとに1つのレシピが含まれている必要があり、各レシピは特定の食事に固定されています(たとえば、ディナーにパンケーキを用意することはできません)。35のすべてのレシピがソリューションに含まれている必要があるため、週の間にレシピを繰り返すことはできません。 1日あたりのカロリー数が最も均等になるような食事の配置を見つけたいと思います。つまり、毎日消費される総カロリーの差を最小限に抑えたいと思っています。 これは宿題の問題ではありません—実際にはそうです!私はブルートフォースよりも優れたアプローチを思い付くことができず、7!^ 4の組み合わせがあります。


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