問題タブ [system-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
802 参照

oop - システム設計 - 車のクラス構造を作成 - オブジェクト指向

そこで、最近、システム設計に関する 1 つの質問に出くわしました。以下の設計に従って、3 台の車があり、そのうち 2 台はオート パイロット、2 台はオート ローンチが可能です。

問題は、クラス構造をどのように設計するかということです。また、Launch for Suv などのサンプル メソッドを提供し、単体テストを提供します。

ここに画像の説明を入力

だから-それに答えるために、私は以下のようなものを思いつきました:

最後に、Suv を起動したいとしましょう。その場合、LaunchSuv.Launch(); のようなことができます。

  • 私の解決策が正しい方向にあるかどうかはわかりません。もしそうなら、改善の余地はありますか?

参考までに - AutoPilot と AutoLaunch に別々のインターフェイスを用意することにした理由は、常に 3 台のうち 1 台の車が両方の機能要件を備えていないためです。ベース車で両方のメソッドを宣言すると、不要なすべての車に不要な両方のメソッドが含まれます-この理由が良い設計なのか、それほど重要でないのかわかりません!! また、SUV を例に挙げましたが、セダンとクーペについても同様のクラス構造を導き出すことができます。

0 投票する
1 に答える
195 参照

apache - 規模に応じたサービスの設計。必要なサーバーの数

Web サービスを設計する必要があるとします。簡単にするために、LAMP (Linux-Apache-MySQL-PHP) を使用するとします。

N1 秒あたりのユーザー リクエストを正確に処理できることはわかっています。リクエストは基本的に、データベースに対する単純なCRUD操作であり、ファイルのアップロードや複雑な計算はありません。

各リクエストがMms を実行し、 Gb の RAMKを持つサーバーで Mb のメモリを使用するとします。G

そのようなサーバーはいくつ必要ですか? それはただN * K / Gですか?

M の妥当な値は200msです。の妥当な値はK?

この質問では、CPU パワーを考慮する必要がありますか?

追加の考慮事項はありますか?

0 投票する
3 に答える
13534 参照

ios - Swiftでクラス拡張を適切に使用するには?

Swift では、私は歴史的に拡張機能を使用して閉じた型を拡張し、アニメーション、数学拡張機能などの便利でロジックのない機能を提供してきました。ただし、拡張機能はコードベース全体に散在するハードな依存関係であるため、実装する前に常に 3 回考えます。拡張子としての何か。

しかし、最近、Apple が拡張機能をさらに使用することを提案しているのを目にしました。たとえば、プロトコルを個別の拡張機能として実装するなどです。

つまり、プロトコル B を実装するクラス A がある場合、次の設計になります。

そのうさぎの穴に入ると、次のような拡張機能ベースのコードが増え始めました。

私の一部は、プロトコルを別々の拡張機能で実装するときに得られる構成要素が好きです。これにより、クラスの個別の部分が非常に明確になります。ただし、このクラスを継承するとすぐに、拡張関数をオーバーライドできないため、この設計を変更する必要があります。

2 番目のアプローチは... 興味深いと思います。拡張機能に対して指定できるため、各プライベート プロパティに注釈を付けてプライベートとして機能させる必要がないという点が優れています。

ただし、この設計では、保存されているプロパティと保存されていないプロパティ、パブリック関数とプライベート関数も分割されているため、クラスの「ロジック」を理解するのが難しくなっています (より小さなクラスを記述します)。それは、サブクラス化の問題と相まって、私をエクステンション ワンダーランドの玄関口で少し足を止めさせます。

世界の Swift コミュニティが拡張機能をどのように見ているかを知りたいです。どう思いますか?銀の弾丸はありますか?

0 投票する
1 に答える
2591 参照

system-design - 機能分解図とデータフロー図

同じシステムの FDD と DFD の関係は?

0 投票する
1 に答える
215 参照

java - Angular(フロントエンド)+ Java(バックエンド)でサーバー制御のUIディスプレイを備えたデザインシステム

Angular をフロント エンドとして、Java(Spring-Boot) をバックエンドとして使用して、単一ページの Web システムを構築しています。このシステムにはさまざまな役割があり、ユーザーは 1 つの役割に割り当てる必要があります。役割が異なれば、実行できる操作も異なります。

簡単に言うと、システムにはスーパーユーザーと管理者の 2 つの役割があります。このシステムの唯一の機能は、name、retail_price、factory_price の 3 つのプロパティを持つ Product です。スーパー ユーザーは、製品を追加し、これらのプロパティを更新できます。管理者は name と Retail_price を表示できますが、factory_price を表示することはできません。管理者は、retail_price を更新することもできますが、製品を追加することはできません。

この機能制御を Angular で実装するために、現在、HTML でコードをハードコーディングしています。製品ページを表示すると、ログインユーザーがスーパーユーザーに属している場合、追加ボタンが表示されます。製品詳細ページを表示すると、ログイン ユーザーが管理者に属している場合、factory_price は非表示になり、名前フィールドは読み取り専用になります。

明らかに、これらの制御コードはすべて HTML にあり、誰もがそれを読んでロジックを知ることができるため、これは良い方法ではありません。サーバー側でこのロジックを処理できるソリューションとガイダンスを探しています。サーバーは、ブラウザーが表示する必要があるものを返すだけで、フロントエンド (Angular) はサーバーからのコンテンツを表示し、上記のようにこれらすべての制御ロジックを取り除きます。

別の課題は、役割ごとに異なる HTML をどのように処理するかです。たとえば、製品の詳細ページの場合、サーバー側でさまざまな役割の HTML コンテンツを準備し、ログイン ユーザーが製品の詳細ページに移動したら、Restful 呼び出しを送信し、バックエンドから HTML コンテンツを取得して表示します。次に、クライアント側にロジックを含める必要はなく、表示するだけです。役割ごとに異なる HTML テンプレートを使用する必要がありますか?

0 投票する
2 に答える
431 参照

in-app-purchase - In App Purchase バックエンド アーキテクチャ: ユーザー アカウントと「借りたアカウント」のダウンロードからのアプリの保護

私はフロントエンドの開発者で、最初のバックエンドの作成を開始しようとしています (AWS を使用しているので、うまくいけば大惨事にはなりません)。ガイダンスが必要です.SOやチュートリアルなどの適切なトピックへのリンクにすることができます-長い間検索してきましたが、解決する必要がある問題を検索する方法がわからないでしょう.

簡単に言うと、私のクライアントは本を販売しています。これらの書籍を補完するために、現在アプリを開発中です。このアプリのさまざまな部分はさまざまな本に対応していますが、アプリ自体にも価値があります (つまり、アプリを使用するために本を所有する必要はありません)。ユーザーが書籍を所有している場合、アプリの対応する部分を AppStore から無料でダウンロードできるようにするという考えです。そうしないと、IAP を使用してこのコンテンツをいくらかの金額で購入する必要があります。

次の簡単な解決策を思いつきました。

  • 販売されたすべての書籍の ID を含むデータベースを維持しています
  • ユーザーが所有する本のIDを登録して入力できるようにします
  • これらのIDをデータベースと照合し、他のユーザーが以前にIDを入力していないかどうかを確認します
  • ID が OK の場合、所有している本に対応するコンテンツをユーザーがダウンロードできるようにします。

ユーザーは、複数のデバイス (iPad、iPhone、子供の iPhone など) で自分のアカウントにログインすると、これらのデバイスからコンテンツをダウンロードできます。

ただし、ユーザーが自分のアカウントを友人に譲り、友人が自分のデバイスでこのアカウントにログインしてコンテンツをダウンロードし、何も購入していないにもかかわらず、ログアウトしてアプリを使用するという状況を防ぎたいと思います。彼はその本を所有していません。

私のアイデア:

  • ユーザーはログインして、コンテンツを使用する資格があることを確認する必要があります。これは、コンテンツが既に電話にある (以前にダウンロードした) 場合でも同様です。ユーザーは同時に 1 つのデバイスにのみログインできます (別のデバイスにログインすると、最初のデバイスからログアウトされます)。重大な欠点: ユーザーは、すべてのコンテンツをダウンロードしたとしても、インターネットに接続している場合にのみアプリを使用できます。

  • アプリ内購入または本を購入することにより、ユーザーは、たとえば 3 回のダウンロードの権利を得ることができます。重大な不利益: ユーザーがアプリを削除してから再インストールしたい場合はどうなりますか? 購入したパーツの再ダウンロードは、デバイスが以前と同じかどうかを確認する信頼できる手段がないため、1 回のダウンロードとしてカウントされます。少なくとも iOS の場合はそうではありません。

  • 書籍の所有者には (無料ではなく) 可能な限り低価格で同じコンテンツを提供し、他のユーザーには通常の価格で同じコンテンツを提供します。このようにして、すべてのチェックを (ユーザーの iCloud アカウントを介して) Apple に委任します。これは、コンテンツのロックを解除するには常に IAP を使用する必要があり、購入が行われると、Apple がすべてを追跡するためです。

  • それを行う他の方法は?助けてください。

また、考慮すべきもう 1 つの点があります。「クラスルーム アカウント」を作成できるようにしたいと考えています。複数のデバイスが同じアカウントにログインして、コンテンツをダウンロードできます。クライアントは、許可されるデバイスの数を決定し、この数のダウンロードをデータベースに入れます。