問題タブ [data-layers]
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.
entity-framework - Entity Framework を使用しながらモデル リポジトリを整理する方法は?
Entity Framework を使用するアプリケーションで、データ層への接続 (リポジトリ クラス) を整理する方法についてジレンマがあります。
どのように書きますか?なぜ?
また
違いは、dataContext
オブジェクトの使用法にあります。
c# - 1つのテーブルに2つのModelオブジェクトを用意することは、LINQ-to-SQL / Entity Frameworkの一般的な方法ですか?
LINQ-to-SQLまたはEntityFrameworkを使用する場合、CRUDの基本を処理するテーブルごとにクラスを簡単に生成できます。
また、データベーステーブルに構造的な変更を加えると、テーブルのモデルクラスを簡単に再生成できます(デザイナでテーブルを削除し、テーブルをデザイナに再度ドラッグするだけです)。ただし、これはもちろん、クラスにあったすべてのものを上書きします。
したがって、モデルを再生成するときに削除されない機能を各クラスに追加するために、テーブルごとに追加のモデルクラスがあることに気付きます。したがって、 2つのデータレイヤーが有効になります。
これは一般的な方法ですか、それともクラスの再生成時に上書きされない機能を生成されたクラスに追加する方法はありますか?
php - ビジネス層、データ層、クエリをどこに置くか?
データベース内のテーブルごとに個別のクラスを持つデータ アクセス レイヤーがあります。各クラスは、テーブル内の行を参照するオブジェクトを作成し、作成、更新、削除、およびフェッチ機能を備えています。それらはすべて DBObj クラスを拡張します。私の質問は、クエリを に書きたいと言ってSELECT * FROM table
、それを関数に入れたいということです。これはどこに置くのがベストですか?ビジネス層または関連するすべての機能をそれぞれのデータ層クラスにグループ化しますか? それが重要な場合は、PHPでMySQLを使用します。
jakarta-ee - JavaEEデータレイヤーフレームワーク
私は、JavaEEアプリケーションサーバーのデータレイヤーで最も広く使用されているフレームワークを理解しようとしています。
どれが使われているのか、そして彼らの長所と短所は何かを知るのに助けが欲しいです。
sql-server - CLRストアドプロシージャ
ASP.NETアプリケーションでは、データベースに対して実行するために、かなり複雑で頻繁に使用される操作がいくつかあります。これらの操作では、いくつかのテーブルの1つ以上が、特定のテーブルの入力パラメーターと値の両方の論理評価に基づいて更新または挿入する必要があります。ロジックとデータアクセスの分離を維持しているので、操作は現在次のようになります。
- クライアントから受け取ったリクエスト
- ビジネスレイヤーはデータレイヤーを呼び出してデータベースからデータを取得します
- ビジネスレイヤーは結果を処理し、実行する操作を決定します
- ビジネスレイヤーは適切なデータ操作を呼び出します
- クライアントに送信された応答
ご覧のとおり、データベースに対して2つの個別の要求が行われている間、クライアントは待機し続けます。これに対する解決策を探しているときに、CLRストアドプロシージャを見つけましたが、それらが何に役立つかについて正しい考えがあるかどうかはわかりません。
上記のコードの代わりに、特にステップ2〜4をCLRSPに配置するものを作成しました。私の理解では、SPはSQL Serverによってローカルで実行され、サーバーに対して1回の呼び出しのみが行われます。
私の質問は基本的に、これはCLR SPの使用目的ですか、それとも何かが足りないのですか?
これは構造的に少し妥協していることを理解しているので、もっと良い方法があれば聞いてみたいと思います。
entity-framework - IQueryable と遅延読み込み
これを処理する最善の方法を決定するのに苦労しています... Entity Framework (および L2S) では、LINQ クエリは IQueryable を返します。DAL/BLL が IQueryable、IEnumerable、または IList を返すかどうかについて、さまざまな意見を読みました。IList を使用すると仮定すると、クエリはすぐに実行され、その制御は次のレイヤーに渡されません。これにより、単体テストなどが容易になります。より高いレベルでクエリを絞り込むことはできなくなりますが、クエリを絞り込んで IList を返すことができる別のメソッドを作成することはできます。そして、さらに多くの長所/短所があります。ここまでは順調ですね。
今度は Entity Framework と遅延読み込みです。.NET 4/VS 2010 でプロキシを使用して POCO オブジェクトを使用しています。プレゼンテーション レイヤーでは次のことを行います。
この場合、GetOrders() は IList を返すため、PL に戻る直前に実行されます。しかし、次の foreach では、すべての OrderLine を取得するときに複数の SQL クエリを実行する遅延読み込みがあります。したがって、基本的に、PL は間違ったレイヤーで「オンデマンド」で SQL クエリを実行しています。
これを回避する賢明な方法はありますか?遅延読み込みをオフにすることはできますが、EF1 にはないと誰もが不平を言っているこの「機能」があることに何の意味があるのでしょうか。そして、多くのシナリオで非常に役立つことは認めます。したがって、いくつかのオプションがあります。
- どういうわけか、エンティティ内のすべての関連付けを削除し、それらを返すメソッドを追加します。これは、既定の EF の動作/コード生成に反し、一部の複合 (複数エンティティ) LINQ クエリの実行が難しくなります。一歩後退したようです。私は反対票を投じます。
- とにかく遅延読み込みがあり、単体テストが困難な場合は、最後まで行って IQueryable を返します。レイヤーをさらに細かく制御できます。IQueryable は L2S、L2E、または独自の IQueryable の完全な実装に結びついているため、これはまだ良い選択肢ではないと思います。遅延読み込みは「オンデマンド」でクエリを実行する場合がありますが、特定のインターフェイスに縛られることはありません。私は反対票を投じます。
- 遅延読み込みをオフにします。関連付けを手動で処理する必要があります。これは、熱心な読み込みの .Include() である可能性があります。いくつかの特定のケースでは、私は賛成票を投じます。
- IList と遅延読み込みを維持します。多くの場合、私は賛成票を投じますが、それは他の人たちとのトラブルのためだけです。
他のオプションや提案はありますか? 本当に納得できる選択肢が見つかりません。
iphone - iPhone 開発用の JSON API を中心とした DAO の設計
そこで私は、iPhone ランドで自分のモデルのデータを取得するためのクリーンな方法を設計しようと試みてきました。アプリケーションのすべてのデータは、JSON API から取得されます。
そのため、現在、VC がいくつかのモデルを必要とする場合、VC は JSON 呼び出し自体 (非同期) を実行し、データを受信するとモデルを構築します。それはうまくいきますが、DAOが情報を取得してモデルを返す、すべて非同期の方法で、よりクリーンな方法を考えようとしています。
私の最初の考えは、VC が DAO をインスタンス化し、それ自体をデリゲートにするように、DAO のプロトコルを構築することでした。データ [DAOinstance getAllUsers] を要求すると、DAO はすべてのネットワーク要求を実行し、データを取得すると、デリゲート (VC) のメソッドを呼び出してデータを渡します。
これは素晴らしい解決策だと思いますが、同じ VC で異なる目的のために同じ DAO を使用する必要がある場合、どの DAO インスタンスが要求を開始したかに応じてデリゲート メソッドのロジックを分岐する必要があることに気付きました。
したがって、私の 2 番目の考えは、「ハンドラー」セレクターを典型的な JavaScript パターンの DAO オブジェクトに渡すことができるようにすることでした。したがって、公式のプロトコルの代わりに、 [DAOinstance getAllUsersWithSelector:"TheHandlerFunctionOnMyVC:"] のように言うと、DAO がネットワーク アクティビティを完了すると、VC で渡されたセレクターが呼び出され、データが返されます。
それで、私はここで完全に間違った方向に向かっていますか?たぶん大丈夫な方法のようです。
この種のデータ層の設計に関する指針や記事はどれも素晴らしいものです。
ありがとう!ボブ
design-patterns - DataLayer またはその他のレイヤード アーキテクチャの設計中に例外を処理する方法
例外のソースを明確に考えて、ビジネスレイヤーによってキャッチされる必要がある例外を処理したいデータアクセスレイヤーを作成しています。私はこのようなことをしています..
編集
上記のコードでは、例外の理由を知っています。そして、メッセージを表示するためにBLで処理するために投げたい。
しかし、私はDLでこの関数を他のコード行でのみ使用しています。
OpenConnection()
接続を開こうとしているときに例外が発生した場合、例外throw ex
を返すと予想していたときに、OpenConnection 自体の行でアプリケーションがクラッシュします。この問題をどのように処理すればよいですか。GetDataTable
さらに、例外が発生した場合、この時点で発生したのと同じ詳細でどのような種類の例外をスローする必要があるか、2 番目の関数で私の質問を拡張します。私はこの方法しか知りませんが、これは私が思う素晴らしい方法です。
編集
サーバーへの接続が失われたか、間違った接続文字列を使用しているとします。BL の GetDataTable 関数を使用します。どこで例外が発生し、どこで処理すればよいですか? DLで発生した問題を知りたいです。BLを考えるとDLのコードがわからない
.net - LINQ to SQLを使用する場合、レイヤー間でオブジェクトを渡すためのオプションは何ですか?
従来の階層化されたアプリケーションの設計について考えるとき、私はしばしば3つの層の観点から考えます。
- 実際にデータベースと通信する最下層(これを「データアクセス層」と呼びましょう)。オブジェクトを(何らかの形で)次のレイヤーに返します。
- 最下層の上の層(中間層、これを「データ層」と呼びます)は、データアクセス層からオブジェクトを取得し、ドメインオブジェクトをビジネス層に返します。
- ビジネスレイヤーは、データレイヤーからドメインオブジェクトを取得し、それらを使用して処理を実行します。
これは確かに過度に単純化された説明であり、おそらく信じられないほど間違っています!:)
明らかに、LINQ to SQLがORMであるため、データアクセス層はLINQtoSQLオブジェクトを作成しています。これらのオブジェクトを中間層と最上層に渡すための適切なパターンは何ですか?
c# - 非常に多くのデータアクセスオプション、何を使用するのですか?
私はasp.netWebアプリケーション開発者であり、常にEnterprise Library DAABを使用して、4つの別個のレイヤー(プレゼンテーションレイヤー、カスタムタイプレイヤー、ビジネスロジックレイヤー、およびデータアクセスレイヤー)を使用したデータアクセスのストアドプロシージャを使用しています。
私の感じでは、このアプローチは多くの時間を無駄にしていると思います。
私は他の方法でデータにアクセスしたことはありませんが、開発時間を節約する方法はたくさんあると思います。検索中に私はこれらについて読みました:
- ストアドプロシージャを使用してDAL全体を生成するデータアダプタ
- さまざまなフレーバーを持つLinq
- エンティティフレームワーク
- SQLDataSourceや動的データなどのデータコントロールの使用
- その他のマッパー、コードジェネレーター、ユーティリティ
非常に多くのオプションと私の知識が少ないため、開発が高速で、拡張可能で、再利用可能で、標準に達している可能性があることを考慮して、どの開発パターンを採用すべきかを決定する際に混乱しています。また、使用する必要がある場合は、コードライブラリをSilverlight、MVCフレームワーク、サービスなどの他のテクノロジで使用できる方法を検討したいと思います。
親切に私を導き、助けてください。
ありがとう