質問

もともと、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への単純な委任以上のことを行う必要があるポイントに到達した場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top