タグ付けされた質問 「architecture」

ソフトウェアシステムの高レベルの設計と説明。アーキテクチャ設計では、実装、アルゴリズム、およびデータ表現の詳細を抽出して、「ブラックボックス」コンポーネントの相互作用に集中します。

4
応答時間が長いリクエストのパターンは?
現在、自社開発のpython「ウェブサーバー」を維持しています。この場合、一部のリクエストに対する応答の生成には、主に重い計算が原因で非常に長い時間がかかる可能性があります。これらのリクエストは、基本的に非常に長いタイムアウト(数分から数十分と考えてください)を持つ投稿です。 このアーキテクチャの1つの問題は、そのようなリクエストをキャンセルする必要がある場合があることです。たとえば、ユーザーがリクエストの設定中にミスに気付きました。現在、キャンセルは別のリクエストであり、長時間実行されているリクエストをキャンセルします-しかし、多くのギャップがあります。 現在、Webサーバーの自作の廃止を廃止し、賢明な何かに切り替えることを計画しています-たとえば、Wfastcgiを使用してIIS内で実行されているFlask。政治的な理由により、IISが設定されているため、gunicornのようなものに切り替えることはできません。 (w)fastcgiによって実行されるプロセスを強制終了する方法は誰にもわからないため、すべての開発はそれで行き詰まりました。その懸念は単にfastcgi仕様の一部ではありません。 私の考えでは、それを組み込んだものを構築する試みは間違いです。サーバーがバックグラウンドサーバー(フラスコ+セロリ?)にそのような計算集中型のタスクをオフロードし、そのためのフロントエンドポーリングをオフロードするソリューションを好みます。 残念ながら、古いソリューションは長期間使用されていたため、一部の開発者はすべてのコストで動作を維持したいと考えていました。 Webサーバーの男ではないので、このような問題の賢明な解決策がどのようなものになるか、いくつかのヒントやパターンを教えてください。

3
MVC Webアプリケーションで複雑なビュー(複数の部分から構成される)を処理する方法
MVCパターンを使用してブログWebアプリケーションを作成しているとしましょう。ブログアプリケーションのメインページの一般的なレイアウトは、メイン部分にある種の投稿インデックスであり、それ以外に、タイムライン、タグナビゲーションパネル、サブスクライブパネルなど、いくつかの追加部分があります。これらのコントロールは、単一の投稿ビュー。他のビューに表示される場合があります。 私の質問は-私のビューとコントローラーでこれらのパネルを別に処理する方法です。ここには3つのアプローチがあります。 ビュー(インデックスまたは単一の投稿)のレンダリングに必要なすべての情報を含む大きなviewmodelクラスを作成します。その場合、これらのサイドパネルを部分ビューにして、その大きなビューモデルの一部を渡してレンダリングされるビューから呼び出すことができます。欠点は、コードが重複していることを意味する、さまざまなコントローラーメソッド間でコードを埋めるviewmodelを使用することです。それはかなり悪いです。 ビューレンダリングの別のレイヤーを作成します。たとえば、レンダリングの最上位のレイヤーが、HTMLのレンダリング済みの部分、または呼び出されたときにHTMLを出力する関数を受け取ります。この「結合パーシャルレイヤー」の下のレイヤーは、メインコンテンツを含め、必要な各パネルのパーシャルビューを提供します。ここの欠点-メモリ使用量。ほとんどの最新のフレームワークはHTMLを直接出力ストリームにレンダリングしますが、このアプローチでは、部分ビューが最初に文字列オブジェクトにレンダリングされ、メモリのオーバーヘッドが発生します。 ビューからコントローラーメソッドを呼び出すasp.net mvcの「RenderAction」のようなものを使用します。これはMVCアプローチを落とすため、与えられた3の最悪のソリューションだと思います。 質問は特定のフレームワークに縛られているわけではありません。そのようなことを行う一般的な方法を理解したいと思います。 更新 答えが出た後、投稿が明確でないことがわかりました。ここで合理的な更新: 下でのviewmodelの用語私は、特定のビューをレンダリングするために必要なすべてのデータを含むオブジェクトを理解しています。 3つのアプローチはすべて、独自のビューモデルを使用して部分ビューを構築することを含みます。例(C#構文を使用): class SinglePostViewModel { string Text {get;set;} string Title {get;set;} string Slug {get;set;} DateTime PublishedDate {get;set;} ... } class TagNavigationPanelViewModel { string TagText {get;set;} int PostsCount {get;set;} } class CalendarNavigationPanelViewModel { DateTime YearAndMonth {get;set;} int PostsCount {get;set;} } 私の質問は、これらの部分的なビューをうまく組み合わせる方法です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.