5

もともと、私の BO が情報を求めて呼び出し、UI に渡した DAL オブジェクトがありました。その後、UI のコードが減っていることに気付き始め、Controller クラスがありました。まともな推奨事項は何ですか。

私は現在私の構造を構築しています

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)

.....

あなたの見解は?

ありがとう

4

5 に答える 5

4

この優れた本である Enterprise Application Architecture のパターン には、いくつかの代替案がリストされていると思います。あなたが興味を持つかもしれないいくつかのパターン:

于 2008-09-30T04:54:01.660 に答える
0

アプリケーションがデータ アクセス レイヤーの個別のバージョンをインスタンス化するべきではないので、それを制御できます。あなたが投稿した疑似コードは本当に読みにくいです。

問題は、データ アクセス レイヤーとは何ですか。それはあなたがすることのかなりの部分を決定するでしょう。ファイルに固執している場合、あなたが書いたものは問題ないと思います。システム内の他のコントローラーと共有する必要がある場合は、アイテムをシングルトン(震え)にラップすることができます。

注文処理を実際に行ってデータベースに永続化する場合は、ORM を検討する時期に来ていると個人的には思います。これらのパッケージは、CRUM の側面を処理し、維持する必要があるアイテムの数を減らします。

私の$.02、そして私はより良い例を見たら私の答えを修正する権利を留保します.

于 2008-09-30T04:51:16.923 に答える
0

特に、コントローラーが基礎となる DAL への単純な委任以上のことを行う必要がある場合は、これをお勧めします。

于 2008-09-30T07:59:19.047 に答える
0

私は過去にあなたのソリューションを使用しましたが、私が直面した唯一の問題は、「共有」または「静的」メソッドが継承をサポートしていないことです。アプリケーションが成長すると、さまざまなタイプの「OrderControllers」をサポートする必要が生じる可能性があります。

さまざまな OrderController をサポートする確立された方法は、理論的には、ファクトリを作成することです。

OrderControllerFactory.ConfiguredOrderController().GetOrder(42);

ここでの問題は、「ConfiguredOrderController()」によって返される型は何ですか? 静的な「GetOrder(int id)」メソッドが必要であり、静的メソッドは継承またはインターフェイスでサポートされていないためです。これを回避する方法は、OrderController クラスで静的メソッドを使用しないことです。

public interface IOrderController
{
    Order GetOrder(int Id)
}

public class OrderController: IOrderController
{
    public Order GetOrder(int Id)
    {}
}

public class OrderControllerFactory()
{
    public IOrderController ConfiguredOrderController()
    {}
}

したがって、コントローラーに非静的メソッドを使用する方がおそらく良いでしょう。

于 2008-09-30T08:26:37.263 に答える
0

私は VB の開発者ではないので、VB の詳細について話すことはできませんが、

あなたがしていることは、GUI/プレゼンテーション層をデータ層から分離する、確立された優れた実践です。GUI イベント メソッドに実際のアプリケーション コードを含めることは、(残念ながら十分に確立された) 悪い習慣です。

コントローラー クラスは、ブリッジ パターンに似ています。これは、両方のレイヤーが他のレイヤーに気付かれずにフォームを変更できる場合にも適しています。

どうぞ!

于 2008-09-30T05:07:56.977 に答える