問題タブ [data-access-layer]
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.
user-interface - 階層化されたソリューション、関心の分離などに関するアドバイスが必要
階層化されたアプリケーションがあるか、少なくとも階層化されたアプリケーションに移行中です。次のように分類されます。
- インターフェイス (ユーザー インターフェイスまたはアプリケーション インターフェイス、つまり Web サービスなど)
- ビジネスの論理
- データアクセス
この質問の残りの部分をより具体的にするために、特定のインスタンスについて説明します。
ユーザー インターフェイスがあり、その背後にコントローラー オブジェクト (ビジネス ロジック層) があります。このコントローラーは、別のオブジェクト (データ アクセス層) を介してデータベースと通信します。
特定のコンテキストでは、ユーザー インターフェイスを使用して、実行中の操作を関連付ける従業員をユーザーが選択できます。ユーザーが選択できる従業員に関するルールがあるため (実際には、コントローラーの外にあるすべての世界)、コントローラーはこれに対して 2 つのことを提供します。
- 選択可能な従業員のリストを含む読み取り可能なプロパティ
- 現在選択されている従業員を含む読み取り/書き込み可能なプロパティ
ユーザー インターフェイスはリストを読み取り、それを使用してコンボボックスに入力する場合があります。
このアプリケーションのバージョン 1 では、コンボボックスに従業員の識別番号と従業員の名前が含まれています。
すべては順調です...
... バージョン 1.1 まで、バグ修正。ユーザーは、ジミー オルソンとジミー オルソンのどちらかを簡単に判別できないため、ジミー オルソンとジミー オルソンのどちらかを選択できないと不満を漏らしています。彼は、ジミーが営業部門に 1 人、開発部門にもう 1 人いることを知っているので、この 1.1 バージョンの修正は、コンボボックスにスラッシュと部門名を追加するだけです。バージョン 2 では、コンボボックスを列をサポートするコンボボックスに置き換え、スラッシュを削除することを選択しましたが、1.1 では、さらなるバグのリスクを最小限に抑えるためにこれが選択されています。
つまり、コンボボックスには次のものが含まれます。
- 1 - ジミー・オルソン/セールス
- 2 - ジミー・オルソン/開発
- 他の人
ただし、ユーザー インターフェイス コードには SQL コードや、その部門を把握する方法がないため、コントローラーに移動してそこでコードを確認する必要があります。コントローラーには部門は必要ありません。正直なところ、従業員の名前も必要ありません。識別番号だけで十分です。コントローラーには、部門に要求したり、何かをしたりするものは何もありません。そのため、データ アクセス レイヤーに降りて、そこで SQL を変更する必要があります。
この解決策は率直に言ってにおいがします。
このコントローラーに複数のインターフェイスがあり、要件が異なる場合、3 つの解決策が考えられます。
- データ アクセス レイヤーを変更して、複数のインターフェイス (2 レイヤー離れた) の (増加/多様な) ニーズに対応します。これは、すべてのインターフェイスが必要なすべてのデータを取得する可能性があることを意味します。他のインターフェースの
- ユーザー インターフェイスがデータ アクセス レイヤー (まだ 2 レイヤー離れている) に必要なものを通知できるようにするものを追加します。
- 関係するコントローラーまたはアクセス層を変更せずに、何らかの方法でユーザー インターフェイス層が必要なデータを取得できるようにします。
上記の解決策はどれも気分が良くありません。
私が疑問に思っているのは、私たちは完全にコースから外れているのでしょうか? これをどのように行いますか?上記の 3 つの下に 4 つ目と 5 つ目の解決策はありますか?
この質問: Separation of Concerns に従って、受け入れられた回答には次の引用が含まれています。
関心の分離は、これらの関心のそれぞれのコードを別々に保つことです。インターフェイスを変更しても、ビジネス ロジック コードを変更する必要はありません。
これは単に、コントローラー/データ アクセス レイヤーが提供する必要があるのは、その仕事を行うために必要なもの (つまり、従業員の識別番号) だけであり、ユーザー インターフェイスがデータベースと通信して詳細情報を要求する必要があることを意味するだけですか?これらの特定の従業員について?
c# - C# でオブジェクトを構築するためのより良い方法
アプリケーション オブジェクトのプロパティの大部分を含む基本クラスから継承するオブジェクト タイプを持つアプリケーションがあります。すべてのオブジェクト タイプは、データベース内の 1 つのテーブルに格納されます。「ClassType」列は、SqlDataReader 行をキャストするオブジェクトの種類を決定します。
これが私の現在の実装です:
私の質問は、このタイプの処理のより良い実装ですか?
unit-testing - DAL を正しく単体テストするにはどうすればよいですか?
私は単体テストが初めてです。しかし、Entity Framework で記述された DAL を単体テストするにはどうすればよいでしょうか。DAL コードが正しく動作していることを確認できますが、実際にはデータベースに触れていません。誰かができるだけ詳しく教えてください。
unit-testing - モッキング対テストDB?
以前にこの質問をしました DALの単体テストを正しく行うには? 、私にとって未回答のことの1つは、DALを実際にテストすることがテストDBを持つことである場合、モックとテストDBの役割は何ですか?
これを追加するために、別の人が「単体テストの最後にトランザクションとロールバックを使用して、db をクリーンにする」ことを提案しました。つまり、db をテストします。DAL をテストするためのこのテスト + テスト DB + トランザクション ロールバック (つまり、db は実際には書かれていない) アプローチについてどう思いますか?
完全にするために、私の DAL は Entity Framework で構築されており、DB にはストアド プロシージャはありません。EF は非常に新しいため、DAL をテストして正しく動作することを確認する必要があります。
python - GAE 上の DAL/ORM はありますか?
web2py以外に、Google App Engine (GAE) および通常のリレーショナル データベース (RDBS) で動作する Database Abstraction Layer (DAL) または Object Relational Mapper (ORM) はありますか?
そうでない場合、既存の DAL/ORM の 1 つを GAE に移植する作業を行っている人はいますか?
asp.net - .NET からクラシック ASP に ADODB.Recordset タイプを返す
従来の ASP から実行したときに ADODB.recordset を返したい DAL があります。オブジェクトは com オブジェクトとして公開されており、完全な dal が機能していますが、.net が使用できるレコードセットであるオブジェクトを返す方法がわかりません。
任意のヘルプが適用されます。ありがとうございました!
--ニコラス
c# - Visual Studioのテーブルアダプタークエリが、それが表すストアドプロシージャと同じデータを返さないのはなぜですか?
Visual Studioのテーブルアダプターを使用して、SQLServer2005データベースのストアドプロシージャにクエリを実行しています。Webサイトアプリケーションを介して電話をかけると、何も返されません。SQL Server Managerを介して同じ呼び出しを行うと、期待されるデータが返されます。
アダプターのgetData
メソッドの呼び出しにブレークポイントを設定し、すべてのパラメーターとその値を調べて、サーバー管理からのクエリでそれらを照合して確認しました。次のクエリを送信しています。
さらに遠く
null
Visual StudioがSQLサーバーにクエリを送信しようとする前に、'sを使用して何かを実行するかどうか疑問に思っていると思います。そうでない場合、どうすればこの問題を修正できますか?
編集:これらの値はすべて変数によって渡されます。私はそのブレークポイントでそれらの変数にあったものを入力しただけです。
asp.net - ASP.NET データ アクセス層。sqlhelper.cs の使用は悪いですか?
新しい .net Web プロジェクトを開始しようとしています。以前は、n 層の Web アプリでは、データ アクセスに "Microsoft Data Access Application Block" (sqlhelper.cs) を使用し、次にオブジェクト クラスとのインターフェイスにインターフェイス クラスを使用していました。この手法は少し時代遅れであり、時代に合わせてもう少し何かを使用しようとしていたことは承知しています。
データアクセスのためにLINQ to SQLを調べましたが、多対多の関係がないために制限されていました。エンティティ フレームワークは、学習曲線が大きすぎるように見えるまったく異なるアプローチでした。
sqlhelper.cs クラスを使用してデータ アクセスを処理することに問題はありますか?
asp.net - Web フォームを MySQL データベースに保存するにはどうすればよいですか?
ASP.Net フォームがあり、それをデータベースに保存したいのですが、何かアイデアはありますか??
wcf - WCF / ローカル データ アクセス層
サーバー上に常駐し、WCF サービスを介してアクセスできるデータ アクセス レイヤーを作成する方法、またはローカル マシン上に常駐できるデータ アクセス レイヤーを作成する方法を探しています。構成ファイルを介してローカルから WCF バージョンに変更できるように、これを抽象化する方法はありますか?