1

3層モデル(プレゼンテーション-ビジネス-データアクセスレイヤー)では、一貫して下位レイヤーを上位レイヤーに依存しないようにすることができます。たとえば、私のデータアクセス層は、それがどのように表示されるか、またはどのビジネスルールがその上で操作されるかを決して知りません。私のビジネスルールは、それらがどのように提示されるかに依存していません。

しかし、私はDemeterに許しを祈るか、少なくともStackoverflowの仲間にアドバイスを求めなければなりません。プレゼンテーション層のデータアクセスオブジェクトを参照せずに、ユーザーに「テーブル」を提示するにはどうすればよいですか。何度も、GridViewオブジェクトでADO.NETDataTableを参照していることに気付きます。現在、両方のレイヤーでサードパーティのツールを使用しています。テーブルは、OpenLinkのOpenComponentsテーブルオブジェクトからのものです。グリッドはInfragisticsUltraGrid(Windowsプラットフォーム)です。しかし、私は同じ違反で有罪です。

編集: 私はこれがWinForm3.5.NETでどのように行われるかについて特に興味があります。以下の私のコメントに注意してください。コメント内のリンクは私がすべきことだと思いますが、ドメインオブジェクトに夢中になる必要がないことを望んでいました。過剰なデザインで非難されたくありません。これは良いバランスですか?

4

3 に答える 3

1

テーブルを表すデータ型を使用する代わりに、データ転送オブジェクトを使用します。これは、データの論理構造を表すオブジェクトになります。データだけが含まれます。

この場合、「データ行」タイプのDTOを定義してList<RowDTO>から、グリッドに渡すタイプとしてを使用します。

于 2010-02-22T21:03:37.487 に答える
0

他のstackoverflowメンバーがそれをどのように行うかはわかりませんが、WPF、ASP MVC、Silverlightでは、MVVMデザインパターンを使用します。現時点では、適切なリンクがありません。

MVVMでは、ビューがViewModelのデータにアクセスすることが重要です。ViewModelは、プロパティを公開することによってデータをビューに表示します。WPFとSilverlightでは、バインディングを使用してデータにアクセスし、データテンプレートを使用してデータの表現方法の正確な詳細を表現します。通常、ObservableCollectionを使用してコレクションを公開します。ASP MVCでは、コンテキストスイッチを使用して、その方法でモデルにアクセスします。

<body> <h1><% Model.MyHeaderMessage %></h1>

私はあなたがすべきことはあなたのViewModel(コントローラーに似ている)でデータのためにサーバー/サービスをヒットし、レコードセットを返すことだと思います。データを単純なデータクラスに再パッケージ化し、それらをObservableCollectionに配置すると、ObservableCollectionを返すプロパティを介してこれがビューに公開されます。ASP MVCを実行している場合は、IEnumerableを返すプロパティを介してデータを公開します。

于 2010-02-21T00:04:39.653 に答える
0

このための非常に一般的なパターンは、モデルビュープレゼンターパターン(MVP)です。

ここで重要なのは、ビューを表すインターフェイスを定義することです。たとえば、ビューにプロパティを含めることができます。

そして、ビューとモデルの間のコミュニケーションを担当する必要があるプレゼンター。

したがって、ビューは次のようになります。

internal interface IListClientsView
{
    public string Title { set; }
    public IList<Client> Clients { set; }
}

そして、Webフォームでの実装は次のようになります。

public partial class WebForm1 : System.Web.UI.Page, IListClientsView
{
    ListClientsPresenter presenter;
    protected void Page_Load(object sender, EventArgs e)
    {
        presenter = new ListClientsPresenter(this);
        if (!Page.IsPostBack)
            presenter.LoadView();
    }

    public IList<Client> Clients
    {
        set { GrvClients.DataSource = value;
        GrvClients.DataBind();
        }
    }
}

もちろん、これはWinFormの場合もあります。重要なのは、WinFormにIxxxViewインターフェイスを実装させ、関連するプレゼンターを呼び出すことです。プレゼンターは次のようになります。

public class ListClientsPresenter
{
    IListClientsView View;
    public ListClientsPresenter(IListClientsView view)
    {
        this.View = view;
    }

    public void LoadView()
    {
        View.Title = "List of Clients";
        View.Clients = new List<Client> { 
            new Client {Name = "Client 1"},
            new Client {Name = "Client 2"}
        };
    }
}

これは非常に単純な例です。次の記事を確認する必要があります:http: //msdn.microsoft.com/en-us/magazine/cc188690.aspx

于 2010-02-22T21:28:00.890 に答える