0

データ アクセスに純粋な ado.net を使用しています。以下を行うためのベストプラクティスを知りたいです。

私はジェネリック製品クラスを持っています....

Class ProductViewModel

 Property ItemID as int
 Property Title as string
 ' etc, all other properties.......

End Class

次に、注文クラスがあります

Class OrdersViewModel

 Public OrderNumber as string
 Public ShipToAddress as string
 ' etc all properties

End Class

ViewModel として使用するジェネリック クラスが他に 10 個ほどあります。

私の質問は、すべての汎用クラスに関するものです。ビュー内のデータをプルする必要があります....たとえば、 GetProductID() 関数は ProductID を返し、 GetOrderID はOrderIDを返します。実際のデータ アクセス操作はどのクラスで実行する必要がありますか?

ビュー内のデータに簡単にアクセスできるようにするには、クラスをどのように構成すればよいですか。

ありがとう

4

2 に答える 2

2

どのクラスでデータアクセスを実行する必要がありますか

どちらも、通常、ビュー/データアクセスの間に抽象化のレイヤーを追加し、そこからバックエンドに関連するものをすべてプルします。

Class ProductRepository

Function GetById(ByVal Id As Integer) As Product
    ' Pull product from DB 
End Function

End Class

これは、リポジトリ パターンと呼ばれます。リポジトリを取得したら、バックエンドからデータを取得し、ビューに渡す前にコントローラー レベルでビュー モデルを設定できます。

Public Class ProductsController Inherits System.Web.Mvc.Controller

Function Index(ByVal Id As Integer) As ActionResult
    Dim repo As New ProductRepository()
    ' pull product from DB 
    Dim p As Product = repo.GetById(Id)
    ' populate view model
    Dim model As New ProductViewModel()
    model.ItemID = p.ItemID
    model.Title = p.Title
    ...
    ' pass to view
    Return View(model)
End Function

End Class

このようにビュー モデルにデータを入力するのは非常に面倒です。特に負荷がある場合は、 AutoMapperなどのツールを使用する傾向があります。

于 2013-05-11T07:54:37.057 に答える
0

私は次のことをします:

  1. データベースへのすべてのデータ アクセスを行う OrderRepository というクラス

  2. すべてのビジネス ルールを実行する OrderService というクラス

  3. コントローラーは OrderService クラスのみを呼び出すことができ、OrderRepository クラスは呼び出すことができません。

  4. コントローラーはViewModelをビューに返す必要があります

お役に立てれば

于 2013-05-11T07:32:18.310 に答える