問題タブ [middle-tier]

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 に答える
607 参照

c# - 中間層での検証

ビジネスコードの検証を行いたいです。これを行うには2つの方法を考えています。

1 つ目は、次の方法でクラス プロパティ セッターの検証を行うことです。

さて、このアプローチの問題は、名前が割り当てられるたびに検証コードが実行されることです。これは、DB からのデータを入力する場合など、必要ない場合があります。

私が好む2つは、これらのエンティティクラスに静的メソッドを配置します。

次のように、インスタンス メソッドではなく静的メソッドを使用していることに注意してください。

常に Student obj が渡されるとは限らないためです。メソッドに渡される文字列名のようなプリミティブ型を取得することがよくあります。

学生オブジェクトに渡された場合は、もちろんできます

さて、私は物事を非常にシンプルにしたいので、次のアプローチのいずれにも行きたくありません

  1. [StringLength(25)] などのプロパティで属性を使用します。

    1 つ目は、これにはリフレクションが必要であり、パフォーマンスに影響を与えるため、パフォーマンスを低く抑えるためのトリックがありますが、ここでも、よりシンプルに保ちたいと考えています。

    2 つ目は、自分のサイトを Medium Trust で実行できるようにしたいということです。私が理解しているように、完全な信頼が必要です。

  2. MS など、そこにある検証ブロックのいずれかを使用します。CodePlex にある Enterprise Library など。

では、この件についてご意見をお聞きしたいのですが、

私が行っているアプローチの潜在的な問題は何ですか?
このアプローチは、他のアプローチよりも優れたパフォーマンスを発揮し、読みやすく、維持しやすいでしょうか?

中間層での検証はどのように行っていますか?

たくさんありがとう!

レイ。

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

wcf - WCFサービスでXPSドキュメントを作成して保存および返却するにはどうすればよいですか?

中間層としてWCFサービスを使用していますが、場合によっては、印刷可能なドキュメントを作成し、後で参照できるようにデータベースに保存して、クライアントに返す必要があります。

ファイル形式として最初に選択したのはXPSだったので、WCFサービスでXPSドキュメントを作成して保存し、返送したいと思います。

これを達成する簡単な方法、または私が見逃した問題(WCFでの印刷可能なドキュメントの保存と返却)を解決する他の明白な方法はありますか?

0 投票する
4 に答える
270 参照

postgresql - Postgresql を中間層として使用します。意見が必要

私はいくつかの意見が必要です。

友人のために POS と在庫管理ソフトウェアを開発する予定です。これは 1 人の小規模プロジェクトなので、アーキテクチャをできるだけシンプルにしたいと考えています。

私は Winform を使用して GUI を開発しています (Web インターフェイスは POS ソフトウェアには意味がありません)。データベースには Postgresql を使用しています。

プログラムはユーザーの役割に基づいてアクセスを制御するため、Web サーバーを使用してユーザー アクセスを制御する中間層を開発するか、Postgresql で直接ユーザー権限を設定する必要があります。

中間層の開発には時間がかかり、メンテナンスはより複雑になります。そのため、データベースで直接アクセス制御を設定することを好みます。

データベースを使用してユーザー アクセスを制御するのは面倒なようです。ロールごとに特権を設定する必要があります。一部のテーブルでは、権限が列レベルであることは言うまでもありません。これにより、セキュリティに関する推論が非常に難しくなります。

だから私が今やっていることは、スーパーユーザー以外はすべてのテーブルにアクセスできないように設定することです. プログラムは public ロールを使用してデータベースに接続します。一般ユーザーはテーブルにアクセスできないため、SECURITY DEFINER (スーパーユーザー ロール) を使用して、一般ユーザーがアクセスできるストアド ファンクションを作成します。テーブルにアクセスする唯一の方法は、これらの関数を使用することです。

ユーザーの役割とパスワードを表にまとめます。スーパーユーザー以外は user テーブル自体にアクセスできないため、 login 関数を作成します。これを と呼びましょうfn_login(username, password)。ログインが成功すると、fn_login はセッション キーを返します。

他の関数を呼び出すには、ユーザーにセッション キーを提供する必要がありfn_purchase_list(session_key)ますfn_purchase_new(session_key, purchase_id, ...)

そのようにして、ストアド関数を API として扱っています。新しい Postgresql ロールを追加するのではなく、ユーザー テーブルに新しい行を追加するだけでよいため、新しいユーザーの追加はより簡単になります。列レベルで権限を設定する必要はありません。すべての制御はプログラムで行われます。

それで、あなたはどう思いますか?このアプローチは実現可能でスケーラブルですか? それを行うより良い方法はありますか?

ありがとう!

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

web-services - ユーザーごとの直接データベース接続から、プールされた接続を使用した Web サービスの使用への移行

私は、V.Rich クライアントを、ユーザーごとに 1 つのログインで DB と直接やり取りすることから、WCF サービス レイヤーと直接やり取りすることへの移行に取り組んでいます。

新しいモデルでは、ユーザーは中間層で認証され、中間層ではデータベースに接続するための 1 つのアカウントだけが必要になります。

私の問題は、データベースのトリガーとストア ルーチンがデータベースで USER() 関数を使用して監査を実行することです。DB アカウントが 1 つしか使用されていない場合、この機能をどのように置き換えることができますか?

うまくいけば、私は問題を説明しましたが、質問はすぐに消えます。プラットフォームが .Net、WCF、および Mysql であることに疑問がある場合に備えて

ありがとう、

トム。

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

curl - ファイアウォールを介してデータ層に安全なリクエストを送信する方法

フラッシュファイルにデータベースからのデータを入力するように求められました。「すばらしい。データベースと通信してxmlを出力するPHPを作成します。swfはそのファイルを呼び出すことができます。」

それから私の上司は、その解決策はISでうまくいかないだろうと私に言いました、そして私はそれをするより安全な方法を見つけなければならないでしょう。うーん!

私が提案するソリューションは、企業のファイアウォールの外側にあるビジネスロジックを作成することです。actionscriptはそのファイルにリクエストを送信し、ファイアウォールの背後にある中間層に安全なリクエストを送信します。中間層は、データベースに接続し、同じ安全な接続を介してファイアウォールを介して適切なデータを返すことにより、要求を処理します。次に、ビジネスロジックはxmlを出力し、誰もが満足しています。

私はそれを非常に明確にするために私がやろうとしていることを図解しました:http: //twitpic.com/2kj0tk

これが私の質問です:

  1. このソリューションは業界のベストプラクティスに準拠していますか?
  2. それは機能しますか?
  3. 安全な接続を確立し、そのファイアウォールを介してデータを転送するには、各層にどのようなコードを記述する必要がありますか?cURLを使用できるかもしれないと思いましたが、これがファイアウォールを通過するかどうかはわかりません。可能であればコードサンプルを使用して、これをどのように解決するかについて誰かが気になりますか?
  4. .NETでソリューションを作成しなければならないことがうまくいくかもしれません。それは私のアプローチをどのように変えますか?4。
  5. この問題を解決するために、他にどのような情報が必要ですか?

みんなありがとう!

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

asp.net - 従来の ASP アプリには、軽いビジネス ロジック用の COM '中間層' があります。これは ASP.NET で必要ですか?

クラシック ASP アプリケーションを .NET に移行するのにかかる時間を見積もろうとしているところ、VB 6 で記述された数百の COM 関数に遭遇しました。

これらの関数の大部分は、パラメーターの検証のみを行い、実際に SQL サーバーを呼び出します。これは ORM に置き換える必要がありますか? (Linq、nHibernate、Entity Framework)... それとも、この図にもっとあるべきでしょうか?

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

orm - データベースに依存しないレイヤーに接続するWebプログラムを作成することをお勧めしますか?

私は以前はWinformsプログラマーです。私は常に、作成するプログラムをフロントエンド(Winforms)とミドルティア(Remoting / WCFによって促進される)の2つの部分に分割します。

そのアプローチでは、フロントエンドコードはLinqまたはSystem.Data.SqlClientにアクセスできません。ただし、これには、中間層がインスタントSOAシチズン(サービス指向アーキテクチャー)であり、B2Bシナリオで使用でき、データベースに依存せず、単なるWinformsアプリであってもインターネット対応であるという追加の利点があります。

今、私はウェブスキルを学んでいます。本ProASP.NETMVCのSportsStoreプロジェクトを使用すると、その本の古い(?)アプローチ(中間層)とリポジトリアプローチを比較することは避けられません。リポジトリアプローチは、データアクセスメカニズム(Linq to SQL)をフロントエンド(SportsStore.WubUI)に直接公開します。リポジトリアプローチを使用すると、SportsStore.WebUIは引き続きデータベースに直接接続します。

質問は、Webプログラムで、フロントエンドを中間層にのみインターフェースすることを目指すべきか(つまり、フロントエンドはデータベースに依存せず、中間層はインスタントSOA市民になるべきか)、それとも私がすべきかということです。フロントエンドでデータベースを直接(リポジトリアプローチ、ORMなどを使用して)使用しますか?

0 投票する
7 に答える
2582 参照

c# - 3 層アーキテクチャ

3 層アーキテクチャについていくつか質問があります。

  1. 3層アーキテクチャでアプリケーションを正しく実装する方法は?
  2. これらの層の間で通信する方法は?
  3. データ層は DBMS と完全に同じですか? (ストアド プロシージャを使用する場合や、オブジェクト リレーショナル マッピング フレームワークを使用する場合はどうでしょうか?)

あなたの答えを聞くのを楽しみにしています。ありがとう。


PS: 私が一般的な質問をしていることを理解しないでください。わかった ?大規模なアプリケーションを正しく設計する方法を尋ねています。最善の方法は何ですか?. 長い答えを期待していません。

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

architecture - マルチテナント中間層のアーキテクチャ

既存のビジネスロジック/データアクセス層を置き換える「中間層」を開発しています。私たちが抱えている設計上の懸念の1つは、複数の顧客のデータベースや中間層の部分が、ホストされている製品の一部として同じサーバー上に存在できるように設計する必要があるということです。ホストされた環境のデータベーススキーマとセットアップは、すでに本番環境にあるため、この時点でかなり固定されています。基本的に、ホストされた環境の特定のDBサーバーでは、各顧客は、一意の顧客IDを使用して名前が付けられたSQLServerインスタンスを持っています。

私たちが決定しようとしているのは、クライアントアプリからWebサービス、ビジネスロジック、および各顧客のデータベースへのデータアクセスを介して個別のパスを使用するか、各部分の単一の共有インスタンスを使用するかです。ここで、データアクセス層は、正しいSQL Serverインスタンス、またはこれら2つの間のどこかからデータを取得する役割を果たします。すべての共有パスが1つであるため、1つのピースがダウンすると、それにアクセスするすべてのクライアントが水中で死んでしまいます。一方、顧客ごとに個別のパスがある場合、おそらく過度に複雑になるだけでなく、(一見)維持する必要があるものがたくさんありますか?これが私たちが検討している2つのオプションの恐ろしいASCIIアート画像です:

またはこれ:

これらのどれ(またはその中間のオプション)が優れているのか、そしてその理由は何ですか?

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

c# - 中間層のWCFホスティング

アプリケーションスイートの新しい中間層を開発しています。現在VB6にあり、COM +を介して公開されているため、ビジネスロジックとデータアクセスレイヤーをC#で書き直すことを検討しています。

私たちが決定しようとしているのは、この中間層をさまざまなクライアントが利用できるようにする方法です。これを行うためにWCFを使用し、デスクトップアプリのnetTcpBinding、net.Tcp、名前付きパイプなど、さまざまなクライアントのニーズを促進するためにさまざまなバインディングを使用することにしました。ローカルまたはネットワーク内のマシンで実行されているインターネットアプリのバインディング、および外部WebAPIのHTTPバインディングの一部。

私たちが決定しようとしているのは、サービスをホストする方法です。私が行くほとんどの場所でIISが進むべき道のようですが、Windowsサービスの下にある場合はBLL / DAL部分のパフォーマンスが向上するようで、ここSOの@marc_sはセルフホスティングを頻繁に推奨します。それでは、IIS、サービス、またはHTTPエンドポイントのIISでシンサービスがホストされ、net.tcpまたは名前付きパイプバインディングを介してメインサービスを使用するハイブリッドでホストしますか?分離すると、必要に応じて物理的に分離できるほか、IISがダウンする可能性もあります。これにより、公開するエンドポイントにアクセスするクライアントに対してサービスが実行されたままになります。

また、スケーラビリティと信頼性についてはどうでしょうか。そのように2つのホスティング環境の間に大きな違いはありますか?

これに似た質問がたくさんあることに気づきましたが、探していた情報を十分に見つけることができなかったので、より具体的なヘルプへのリンクが答えと同様に機能します。