次のシナリオを例として取り上げます。会社はクライアントに展開されたコンポーネントAを開発します(このコンポーネントはクライアントエリアにあり、このクライアントは会社によって信頼されていない可能性があります)。コンポーネントは、会社エリア(信頼エリア)にあるデータベースサーバーに格納されたデータにアクセスする必要があります。同社が開発したコアモジュールの1つは、HibernateをORMとして使用するデータモデルです。直接対間接データベースアクセス
1つのアプローチは、コンポーネントAがデータモデルモジュールに直接依存し、データベースに直接(Hibernateを介して)アクセスするというアプローチです。第2のアプローチは、コンポーネントAとデータベースサーバとのインタフェースとなる中間モジュールを使用して間接的にデータベースにアクセスすることです。
コンポーネントを直接データベースサーバーに接続すると、どのような問題が発生する可能性がありますか? APIを使用する利点は何ですか?何がお勧めですか?
おかげ
私はマルチティアアーキテクチャーの存在を認識していますが、ここでは単一の物理マシンを意味するわけではないので、私とは異なるようです。データアクセスレイヤをクライアントに配布する必要があると思いますか?一般に、データアクセスレイヤーはORMツールを使用してデータベースに直接アクセスしますが、データアクセスレイヤーを使用してクライアントから直接データベースにアクセスすると、セキュリティ上の問題が発生する可能性があります。 –
クライアントマシンが制御できず、クライアントマシンから直接データベース接続が可能な場合、セキュリティが侵害される可能性があります。 APIモジュールは、(クライアントアプリケーションとは別のプロセスであっても)改ざん、リバースエンジニアリングなどが可能です.N層アーキテクチャを使用すると、DBにアクセスするAPI層とクライアントがAPI層にのみアクセスできます適切に定義されたアクションだけを実行するための監査、おそらくそれ以上のものはありません。 DALはAPIティアの実装の詳細になります。 – softveda
私はAPIと言うと、ソケット、RMI/.NETリモート、またはSOAP、RESTなどのより高いレベルのいずれかの低レベルのトランスポートを使用する何らかの形式のリモートAPIを意味します。 – softveda