問題タブ [application-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.
php - その場でではなく、送信する前にメールをデータベースにキューイングする必要がありますか?
特定のイベント/ユーザー アクション (写真にタグを付ける、友達として追加するなど) 後にユーザーにメール通知を送信するサイトを開発しています。
私の経験から、Web サーバーからの電子メールの送信は遅くなる可能性があります。たとえば、新しいユーザーを作成するときに、アカウントを確認/歓迎するメールを送信します。ただし、電子メールの送信が完了するまで、ページの読み込みを待機する短い一時停止が発生することがあります。
メール サーバーへの接続に問題が発生したり、メール サーバーが過負荷になったりすると、アプリケーションやページの読み込みがボトルネックになるのではないかと心配しています。
私の質問は、一貫してメールを送信する Web アプリケーションからメールを送信する最良の方法は何ですか?
電子メールの内容をデータベースに保存してキュー システムを作成し、スケジュールされた cron ジョブを実行して未配信の電子メールをすべて処理する必要がありますか?
それとも、ユーザーがアクション/イベント (メンバー アカウントの作成、写真へのタグ付けなど) を完了した直後にメールを送信する必要がありますか?
java - Hibernateの遅延ロードアプリケーションの設計
私はSpringフレームワークと組み合わせてHibernateを使用する傾向があり、それは宣言型のトランザクション境界機能(@Transactionalなど)です。
誰もが知っているように、休止状態はできるだけ非侵襲的で透明性を保つように努めていますが、関係を採用する場合、これは少し難しいことがわかります。lazy-loaded
透明性のレベルが異なるデザインの選択肢がいくつかあります。
- 関係を遅延読み込みしないようにします(例:
fetchType=FetchType.EAGER)
- これは、遅延読み込みのアイデア全体をバイオライトします。
- を使用してコレクションを初期化する
Hibernate.initialize(proxyObj);
- これは、DAOへの比較的高い結合を意味します
- でインターフェースを定義することはできますが
initialize
、他の実装が同等のものを提供することは保証されていません。
Model
永続オブジェクト自体にトランザクション動作を追加します(動的プロキシまたはのいずれかを使用@Transactional
)- @Transactionalが永続オブジェクト自体で機能するようには見えませんでしたが、動的プロキシアプローチを試したことはありません。おそらくその休止状態が原因で、プロキシでの操作が行われています。
- トランザクションが実際に行われているときの制御の喪失
- レイジー/非レイジーAPIの両方を提供します
loadData()
。loadDataWithDeps()
- アプリケーションに、どのルーチンをいつ使用するかを強制的に認識させます。これも密結合です。
- メソッドオーバーフロー
loadDataWithA()
、、 ....、loadDataWithX()
byId()
操作 のみを提供するなどして、依存関係のルックアップを強制しますfindZzzById(zid)
オブジェクト指向ではないルーチンがたくさん必要getYyyIds(zid)
です。z.getY()
- トランザクション間に大きな処理オーバーヘッドがある場合は、コレクション内の各オブジェクトを1つずつフェッチすると便利です。
- DAOだけでなく、アプリケーションの一部を@Transactionalにします。
- ネストされたトランザクションに関する考えられる考慮事項
- トランザクション管理に適合したルーチンが必要です(例:十分に小さい)
- プログラムによる影響は小さいが、トランザクションが大きくなる可能性がある
- DAOに動的フェッチプロファイルを提供します。
loadData(id, fetchProfile);
- アプリケーションは、いつ使用するプロファイルを知っている必要があります
- AoPタイプのトランザクション。たとえば、操作をインターセプトし、必要に応じてトランザクションを実行します。
- バイトコード操作またはプロキシの使用が必要
- トランザクションが実行されるときの制御の喪失
- いつものように、黒魔術:)
オプションを逃しましたか?
lazy-loaded
アプリケーション設計における関係の影響を最小限に抑えようとする場合、どちらが好ましいアプローチですか?
(ああ、WoTでごめんなさい)
node.js - Node.JS の操作
昨夜、Windows 7 をダンプし、ハード ドライバーをフォーマットして Linux ベースのオペレーティング システムに移植しました。純粋にNode.JSの使用を開始したかったからです。
だから私はNode.JSをインストールし、httpサーバーとソケットなどのいくつかのテストを行いました.
私がやりたいことは、MVC フレームワークと緊密に統合された HTTP サーバーを構築することですが、すべてを始める前に、Node.js で効率的に構築する方法を学ぶ必要があります。
たとえば、フレームワークとしての PHP 内で、すべての基本クラスなどをロードするためのブートローディング システムを作成し、コールバックのアタッチを開始する準備ができているイベント システムを起動します。
出力が生成されるまでリクエストなどを処理し続け、出力はヘッダーなどを処理する出力ハンドラーに送信されます。
しかし、Node はこのためのまったく新しい環境であり、Node でシステムを構築するためのベスト プラクティスについて疑問に思っています。
私が探している情報は、アプリケーションの実際のコーディングではなく、設計構造、ライブラリのロード方法、ライブラリのロード先などに関するものです。
どんな助けでも大歓迎です。
これまでのところ、私の WebApplication は順調に進んでおり、アプリケーションはかなり伝統的で少し手続き的に構築されています。
私が始めたのは、次のようなディレクトリ構造を作成することです:
このディレクトリ構造は、世の中に出回っているほとんどの MVC ベースの Web アプリケーションに似ているため、この方法を使用するのは快適です。
起動ファイルは、エントリ ポイントとしてノードによって実行されるものでnode startup &
、次のようになります。
init ファイルは主な作業であり、システムの他のすべての領域に実行、停止などを指示するものです。
libs に呼び出されたファイルがserverhandler.js,
あり、これは init.js に必要です。次にサーバーを作成し、コールバックをServerHandler.Listener
. 誰がリクエストをリッスンし、ファイルがパブリックディレクトリに存在するかどうかを確認し、存在する場合はチャンクを読み取って送り返します。
公開されているファイルが見つからない場合は、Route.Create("/path?params"); を使用してルートを作成します。これにより、Controller、Method、Params の 3 つの要素が uri から削除され、コントローラー ファイルが存在する場合は読み込まれます。
私は次のようにエラーページをスローするアプローチを採用しました:
これが、Node.js を使い始める人に役立つことを願っています。
database - 多言語アプリケーションのデータベース設計の問題
私たちは旅行ポータルに取り組んでおり、旅行ポータルのコンテンツと詳細は心臓部です.複数のロケールでそれを計画しているため、各ロケールの動的データを処理する必要があります.
現在、次の表があります
各テーブルには、次のような多くのフィールドが含まれています
および多くのデータを含むことができる他の多くのフィールドがあり、ロケール固有の方法でデータを処理する必要があります。
このケースを処理するためのアプリケーションをどのように設計するのが最善かはわかりません.1つ思い浮かんだのは、各テーブルの各ロケールに追加の列を配置することですが、新しいロケールでは、データベースからコードレベルに変更する必要があることを意味します.そして、それはまったく良くありません。
各テーブルには、国際化に適したデータを含めることができる多くの列が含まれているため、私の質問は、このケースを処理する最良の方法は何かということです
edit1 いくつかの分析とゴーグリングを行った後、私の頭に浮かんだ1つのアプローチは以下のとおりです..
宛先のようにテーブルごとに変換テーブルを作成する予定です。次の設計があります。
上記のアプローチに対する貴重な提案は大歓迎です...
php - データベースまたはフラットファイルによるローカリゼーション?
多言語PHPアプリケーションの場合、ラベル/フレーズが複数の言語に翻訳されることを前提としています。これらのラベルは、言語固有のファイル(たとえば、言語ごとに1つのファイル)に配置することも、データベースにロードして、アプリが必要なときにそれらにアクセスできるようにすることもできます。
問題は、パフォーマンスの観点から、より良いアプローチは何ですか?
私には、ラベルがデータベースにある場合、ロードするデータが少なくなり(1ページに必要なラベルのみを要求できます)、翻訳用の管理ツールをより簡単に構築できるように見えます。ただし、そこにある多くのアプリやフレームワークは、その目的のためにフラットファイルを使用しているようです(たとえば、phpMyAdmin、CakePHPなど)。
django - 半静的データ設計の問題
私は Django で開発されるプロジェクトを設計していますが、設計哲学に関する質問がありました。私のアプリでは、今週のような情報を追跡する必要があります。これは、NFL の現在の週 (1-17) に関連しており、システム内の他のモデル (スケジュールと当日など) に基づいて計算できます。この情報は週に 1 回更新され、アプリで頻繁に使用されるため、この情報を独自のモデル (db テーブル) に保存し、更新を毎週実行することは理にかなっていますか?
同様に保存するのに役立つ可能性のある他の情報 (今週の最初と最後のゲームの日付/時刻) があるため、データを計算することはできますが、「今週の情報」のようなモデルがこれに適しています。急いで?
php - データベース pk ID を php コードの代替に保存しますか?
何十万ものルックアップ値があり、製品はまだ開発段階にあるため、ID は固定されていません。そのため、ID が更新されるたびに、適切に機能するように、コード全体に戻って何千もの ID を更新する必要があります。それは時間通りに食べます。
ID をコード内で動的に保持する別の方法はありますか: ID がテーブルで変更されると自動更新するか、すべてのデータベース テーブルの 1 つのファイルにすべて格納されるため、開発とテストからの更新がはるかに簡単かつ迅速になります。視点?
プラットフォームは Mysq + codeignitor php です。
c# - データベース設計 - ヘルプ デスク アプリケーション
ヘルプ デスク アプリケーションを残りの企業アプリケーションと同じデータベースに保持するか、それとも完全に分離するかを決めることはできません。
ヘルプ デスク アプリケーションは、電話、電子メール、Web サイトからのサポート リクエストを記録できます。
ご登録のお客様はもちろん、未登録のお客様からも質問を受け付けております。
ヘルプ デスク アプリケーションを同じデータベースに保持する唯一の理由は、ユーザー ベースを共有できるようにするためです。ただし、ユーザーにサポート用の新しいアカウントを作成してもらうか、ユーザー アカウントをヘルプ デスク アプリケーションと同期させることもできます。
ヘルプ デスク アプリケーションを分離すると、データベースのバックアップも小さくなります。または、ヘルプデスクアプリケーションを同じデータベースに保持するだけで、開発/統合が全体的にはるかに簡単になり、1 つのデータベースのみをバックアップすることもできます。(おそらくもっと大きいですが、すべてを含む1つのデータベースです)
あなたは何をしますか?
design-patterns - アプリケーションを設計するための最良の方法
異なる役割を持つ複数のユーザーがいるアプリケーションがあります。リソースへの各ユーザーのアクセスは、彼が持つ役割によって制限されます。
これらのリソースを管理するアプリケーションを構築している場合、アプリケーションをどのように構成する必要がありますか。
役割:管理者、モデレーター、作成者リソース:記事
2つの選択肢があります。
1:役割ごとに個別のモジュールを作成し、役割のリソースへのアクセスを許可します。例:admin / -add / edit / delete article -add / edit / delete user author / -add / edit / delete own articles moderator / -edit articles
2:リソースごとに個別のモジュールを作成し、それらにアクセスするユーザーの役割に基づいてそれらへのアクセスを許可します。例:
articles / add / edit /delete[ユーザーの役割に応じて操作を管理する]
言語はPHPで、Zendフレームワークを使用します。ZendのACLコンポーネントがアクセス許可を処理するため、私の問題はアクセス許可に関するものではありません。私の問題は、アプリケーションの編成にあります。
たとえば、新しいユーザーが導入された場合、最初のケースでは、新しいモジュールを作成する必要があります。しかし、2番目の方法の場合、すべてのモジュールを更新する必要があります。
最初のアプローチにはより多くのファイルが含まれ、より複雑でないロジックが必要になることは明らかですが、2番目のアプローチにはより複雑なロジックが必要ですが、どちらをフォローしてアドバイスを探すかはわかりません。どんな助けでも大歓迎です。
ありがとう。
c# - ユーザーの口座残高をデータベースに保存するか、動的に計算する必要がありますか?
ユーザーの口座残高をデータベースに保存するか、動的に計算する必要がありますか?
正確な結果を動的に計算することは理にかなっていますが、多くのユーザーがいてデータベースが非常に大きくなると、問題になる可能性がありますか?
取引
- ID (PK)
- アカウントID
- タイプ
- 日付時刻
- 額
- などなど…
勘定残高
- トランザクション ID (PK/FK)
- 残高