アプリケーションで複数のデータベース資格情報を整理および管理するにはどうすればよいですか?
-
19-09-2019 - |
質問
さて、私はスタンドアロンの Web サービスを設計しています (フレームワークとして RestLET を使用しています)。私のアプリケーションは 3 つのレイヤーに分かれています。
- データ層 (データベースのすぐ上に、データベースへの接続/クエリを実行するための API、およびデータベース オブジェクトを提供します)
- オブジェクトレイヤー (データ層からのシリアル化を担当します...クライアント層がデータベースを気にせずに使用できるオブジェクトを提供します)
- クライアント層 (この層はRestLET Webサービスです...基本的にはオブジェクト層からオブジェクトを作成し、Webサービスリクエストを実行するだけです)
ここで、オブジェクト レイヤーで作成するオブジェクトごとに、異なる認証情報を使用したいと考えています (各オブジェクトをサンドボックス化できるように...)。オブジェクト層は、正確な資格情報 (つまり、login/pw/DB URL など) を知っていてはなりません。
これを管理する最善の方法は何でしょうか?データ層にスーパークラスの Database オブジェクトが必要だと考えています...各サブクラスには必要なログイン情報が含まれます...このようにして、オブジェクトレイヤーをそのまま実行できます Database db = new SubDatabase();
そして、そのデータベースの使用を継続します。
クライアントレベルでは、彼らはただ行くことができるでしょう ItemCollection items = new ItemCollection();
接続されるデータベースを制御することもできません。
私がこれを質問しているのは、他の人が私のプラットフォームから簡単にサービスを作成できるように、私のプラットフォームを拡張可能にしようとしているからです。
誰かがこれらのアーキテクチャ上の問題、またはこの種のものを管理する方法について経験がある場合は、洞察やアドバイスをいただければ幸いです...
わかりにくい場合はお気軽にご質問ください。ありがとう!
私のプラットフォームは Java、使用している REST フレームワークは RestLET、データベースは MySQL です。
解決
私はあなたが賢明であり、あなたがcleintレベルにデータベースの詳細および資格情報を公開しないようにしようとしている説明何を感じます。
このような状況のために、あなたはあなたを助けるかもしれない任意のデザインパターンを考える必要があります 私はあなたが1つのインスタンスを作成しますので、ユーザーにcredentailsとURLについての詳細を示す避け、オブジェクト層でそれを使用するシングルトンパターン、と考えることができます。
二番目のオプション、私は私の心に取得することで、詳細を隠し、ちょうどORMのオブジェクトにアクセスし、あなたが探しているものを得ることができるのに役立ちますハイバネート層の使用である。
他のヒント
私の提案は、あなたがデータソースのそれぞれの数をもっとして1つのデータベースを使用することができますJTAを使用することです。 //test.kuali:あなたは httpsの詳細はこちらを参照してくださいすることができます.ORG /合流/表示/ KULRICE /データソース+と+ JTA +設定する
@saugata さんのコメントに同意します。見る 春 そして、データ ソース実装 (またはテスト用のスタブ) を Spring 構成のオブジェクト レイヤーに挿入します。これは、アプリケーション アーキテクチャ全体にさまざまな点で役立ちます。
- コードを再コンパイルすることなく、データベース (インスタンスまたは実装) をその場で切り替えることができます。
- データ ソースをその実装から完全に抽象化し、データベースを Web サービス、キュー実装、またはスタブと交換できるようにします。
- この方法でアプリケーションを分離すると、テストが容易になります。