OOPパターン設計の一般的な方法は何ですか(データアクセス)
-
02-07-2019 - |
質問
もともと、BOが情報を呼び出してUIに渡すDALオブジェクトがありました。その後、UIのコードの削減に気付き始め、コントローラークラスがありました。適切な推奨事項は何ですか。
私は現在私のものを構築しています
Public Class OrderDAL
Private _id Integer
Private _order as Order
Public Function GetOrder(id as Integer) as Order
...return Order
End Function
End Class
コントローラクラスがあります(最近このスタイルを実装しました)
Public Class OrderController
Private Shared _orderDAL as new OrderDAL
Public Shared Function GetOrder(id) As Order
Return _orderDAL.GetOrder(id)
End Function
End Class
その後、私のアプリケーションで
My app Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
msgbox(OrderController.GetOrder(12345).Customer.Name)
End Sub
End app
元々、共有クラスを使用すると、データを取得する必要があるときにDALの新しいインスタンスを作成し続ける必要がないことがわかりました
Dim _orderDAL as New OrderDal
_orderDAL.GetOrder(1234)
.....
あなたの意見は?
ありがとう
解決
過去にソリューションを使用しましたが、直面した唯一の問題は、「共有」ということです。または「静的」メソッドは継承をサポートしていません。アプリケーションが大きくなると、さまざまな種類の" OrderControllers"をサポートする必要が生じる場合があります。
異なるOrderControllerをサポートするための安定した方法は、理論的にはファクトリを作成することです。
OrderControllerFactory.ConfiguredOrderController().GetOrder(42);
ここでの問題は、" ConfiguredOrderController()"によって返されるタイプは何ですか?静的な" GetOrder(int id)"が必要なのでmethod-および静的メソッドは、継承またはインターフェースではサポートされていません。これを回避する方法は、OrderControllerクラスで静的メソッドを使用しないことです。
public interface IOrderController
{
Order GetOrder(int Id)
}
public class OrderController: IOrderController
{
public Order GetOrder(int Id)
{}
}
and
public class OrderControllerFactory()
{
public IOrderController ConfiguredOrderController()
{}
}
したがって、おそらくコントローラーに非静的メソッドを使用するほうがよいでしょう。
他のヒント
この優れた本には、いくつかの選択肢があると思います。エンタープライズアプリケーションアーキテクチャのパターン。あなたに興味があるかもしれないいくつかのパターン:
アプリケーションが別のバージョンのデータアクセスレイヤーをインスタンス化してはいけないので、それを制御できます。投稿した擬似コードは読みにくいです。
問題は、データアクセスレイヤーとその量です。それはあなたがすることのかなりの部分を決定するつもりです。あなたがファイルに興味を持っているなら、あなたが書いたものはうまくいくと思います、そしてあなたがシステム内の他のコントローラーとそれを共有する必要があるなら、そのアイテムをシングルトン(shudder)にラップすることは可能です。
実際に注文処理を行ってデータベースに戻す場合、私は個人的にORMを見る時間だと思います。これらのパッケージは、CRUMの側面を処理し、維持する必要のあるアイテムの数を減らします。
私の$ .02。より良い例を見つけたら、回答を修正する権利を留保します。
VBの開発者ではないため、VBの詳細について話すことはできませんが、
実行しているのは、GUI /プレゼンテーションレイヤーをデータレイヤーから分離する、確立されたグッドプラクティスです。 GUIイベントメソッドに実際のアプリケーションコードを含めることは、(残念ながら十分に確立されている)悪い習慣です。
コントローラークラスはブリッジパターンに似ていますが、これは両方のレイヤーが他の人に気付かれずにフォームを変更できるようにします。
どうぞ!
それは良いプラクティスです-特に、コントローラーが基礎となるDALへの単純な委任以上のことを行う必要があるポイントに到達した場合。