1

在三层模型(表示-业务-数据访问层)中,我可以始终保持下层与上层无关。例如,我的数据访问层永远不知道它是如何呈现的或在其上运行什么业务规则。我的业务规则与它们的呈现方式无关。

但我必须向 Demeter 祈求宽恕,或者至少向 Stackoverflow 的其他成员寻求一件事的建议:如何在不引用表示层中的数据访问对象的情况下向用户呈现“表格”?一次又一次,我发现自己在 GridView 对象中引用了 ADO.NET DataTable。目前我在两层都使用第三方工具。该表来自 OpenLink 的 OpenComponents Table 对象;网格是 Infragistics UltraGrid(Windows 平台)。然而,我犯了同样的罪行。

编辑: 我最感兴趣的是如何使用 WinForm 3.5 .NET 来完成。请注意以下我的评论:我相信评论中的链接是我应该做的,但我希望我不必对域对象过于花哨。我不想被指责过度设计。这是一个很好的平衡吗?

4

3 回答 3

1

我不使用表示表的数据类型,而是使用数据传输对象。这将是一个表示数据逻辑结构的对象。它只包含数据。

在这种情况下,我会为我的“数据行”类型定义一个 DTO,然后使用 aList<RowDTO>作为我将传递给网格的类型。

于 2010-02-22T21:03:37.487 回答
0

我不确定其他 stackoverflow 成员会如何做,但是 WPF、ASP MVC、Silverlight,你会做的是使用 MVVM 设计模式。恐怕我目前没有任何好的链接给你。

在 MVVM 中,关键思想是您的 View 访问 ViewModel 中的数据。ViewModel 通过公开属性将数据呈现给 View。在 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接口并调用相关的presenter。演示者看起来像这样:

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 回答