web-dev-qa-db-ja.com

MVCモデルを使用してデータベースからデータを取得する

(正確には学生登録システム)から情報を取得するための非常に大規模なデータベースを持つアプリケーションを作成しています。データベースは、必要に応じてMicrosoft SQL Serverで作成されます。これにMVCパターンを実装する予定ですが、データベースへのアクセスを処理する方法がわかりません。

それがどのように機能するかについての私の現在の理解はこれです(それを行うより良い方法があれば私を修正してください):

  1. いくつかの属性といくつかのビジネスロジックを含むモデル(たとえば、ユーザー)があります。
  2. テーブルのデータを表示または編集する必要がある場合、関連するデータを取得してモデルに入れ、変更してから、データベースに変更を「保存」します。したがって、たとえば、学生の名前を変更する必要がある場合は、データベースでその学生を(ID番号で)検索し、新しいUserオブジェクトをインスタンス化します。次に、UserオブジェクトのNameプロパティを変更し、データベースにデータをアップロードする「保存」メソッドを実行します。

2つの質問があると思います。まず、MVCパターンがデータ駆動型アプリケーションでどのように機能するかを理解しています。次に、データベースからデータを取得してモデルをインスタンス化するためのコードはどこにあるのでしょうか。上記のモデルのコントローラーに入っていますか?他の静的クラスに入りますか?モデルのコンストラクタですか?

3
Omegastick

実際には_Data Access Layer_を作成する必要があります:

1-新しいクラスライブラリを作成する_[ProjectName].DataAccess_

2- UserManagerという名前のクラスを作成します。

3-引数としてユーザーモデルを取るAddUserというメソッドを作成します。そのメソッド内で、ユーザーをデータベースに挿入するロジックを記述します。

システムのスケールによっては、データアクセスレイヤー(SQLまたはOracleなど)の1つを呼び出すために、コントローラーで使用する_Bussiness Layer_(クラスライブラリ)を作成することができます。その複雑さに達した場合は、(AddUser、GetUser、DeleteUser)を使用してインターフェイスを作成し、そのインターフェイスのSQLとOracleクラスの両方の実装を提供して、構成から1つを選択する必要がある場合があります。

詳細が必要な場合はお知らせください。

コメントの後に編集:

GetUsers()GetUserByID(int id)を使用するか、Nameを使用します。それはすべて、UIに必要なものとユーザーに提供する機能に依存します。

ただし、データベースからすべてのデータをクエリしてから、ユーザーがコードを介して要求したものをフィルタリングするのではなく、データベースから必要なデータのみをクエリする必要があります。UIに完全なリストを表示してから検索機能を提供しない限り、画面上

データベースから完全なテーブルをプルするかどうかは、実行する前に考慮する必要があります。実際のアプリケーションでは、テーブルのサイズを考慮する必要があります。巨大なものがある場合は、いくつかの操作が必要になる場合がありますプレフィルタリング(エンドユーザーが部門を選択する場合など)。 GetUsersByDepartment(int depId))を呼び出します。とにかく、エンドユーザーがアプリの画面から要求した場合、すべてのユーザーにクエリを実行するオプションを使用できますが、データがプルされるまで待機する必要がある場合があります。これらのメソッドはすべて_Data Access Layer_に含まれているはずですが、今は_Business Layer_がない場合を考慮してください。

2
Zein Makki