C# linqtosql设计与MVP

C# linqtosql设计与MVP,c#,asp.net,linq-to-sql,mvp,C#,Asp.net,Linq To Sql,Mvp,我正在试验LinqToSql和MVP模式,在设置好的设计时遇到了困难。我使用的是Asp.NET3.5(不是MVC) 这里有一个例子 public interface IMyBusinessCardView { string Field1 { get; set; } string Field2 { get; set; } string Field15 { get; set; } } public class MyBusinessCardPresenter { pr

我正在试验LinqToSql和MVP模式,在设置好的设计时遇到了困难。我使用的是Asp.NET3.5(不是MVC)

这里有一个例子

public interface IMyBusinessCardView
{
    string Field1 { get; set; }
    string Field2 { get; set; }
    string Field15 { get; set; }
}

public class MyBusinessCardPresenter
{
    private IMyBusinessCardView _view;
    private MyBusinessCard _myCard;

    public void ViewClickedSave()
    {
        _myCard.SaveNewBusinessCard(_view);
    }

    public void LoadView()
    {
        _myCard.LoadMyBusinessCardToView(_view);
    }
}

public class MyBusinessCard
{
    public void SaveNewBusinessCard(IMyBusinessCardView view)
    {
        using (var context = new DataContext())
        {
            var card = new BusinessCard()
            {
                Field1 = view.Field1
            };
            context.BusinessCards.InsertOnSubmit(card);
            context.SubmitChanges();
        }
    }

    public void LoadMyBusinessCardToView(IMyBusinessCardView view)
    {
        // Query using Linq to Sql and set in view
        view.Field1 = card.Fields1;
    }
}
我在想 视图和控制器非常薄,我想这很好。 “模型”可以访问视图,这不好吗? 我应该引入DTO对象还是应该使用LinqToSql生成的实体


请为设计提供反馈。

在codeplex上查看此项目以获得一些灵感

我还建议你读相关的书,这本书读得很好。

在MVP中,大部分工作应该在演示者身上;视图对演示者的了解越少越好。我没有看到任何模型与视图一起工作的地方;我已经看到了演讲者在哪里进行所有的协调。对于单个页面,可以有多个演示者在逻辑上展开

查看本文中的图像,了解两种MVP模式(被动视图和监控控制器):

在本例中,即使视图在Supervision controller中访问模型,它实际上也不会在视图上操作

编辑:刚刚遇到这个框架:作为一个实现


HTH.

将视图(或演示者)的知识绑定到模型中肯定不是一个好主意

如果您使用LINQtoSQL对象作为模型类,那么您的视图最终将熟悉数据层

如果上述两种说法是可以接受的,那么这就剩下DTO的答案了

此外,在Presenter上定义事件属性(而不是视图界面)也取得了良好的效果。
通过只附加到相关事件,可以更容易地对特定案例进行单元测试。

虽然我认为不将视图和模型链接更有意义,但我们不要忘记MVP设计模式有两种不同的“风格”:所谓的被动视图和所谓的监控控制器。在

上阅读这篇文章好吧,在我看来,MVP模式是被动的,更常见的一种

  • 视图只包含与UI相关的内容
  • 模型根本不知道视图,模型只负责数据访问代码
  • Presenter是最重要的一个,保存应用程序的所有业务逻辑

    将业务逻辑分离到presenter中的想法是直接对产生最关键bug的代码部分进行单元测试。因此,您的简单代码如下所示

    public class MyBusinessCardPresenter
        {
            private IMyBusinessCardView _view;
            private MyBusinessCard _myCard;
    
            public void ViewClickedSave()
            {
                //You can have all your business logic here which is easy to test
                var businessCard = new BusinessCard()
                {
                    Field1 = _view.Field1
                };
    
                _myCard.SaveNewBusinessCard(businessCard);
            }
    
            public void LoadView()
            {
                _view.Field1 = _myCard.LoadMyBusinessCardToView().Field1;
            }
        }
    
        public class MyBusinessCard
        {
            public void SaveNewBusinessCard(BusinessCard businessCard)
            {
                using (var context = new DataContext())
                {
                    context.BusinessCards.InsertOnSubmit(businessCard);
                    context.SubmitChanges();
                }
            }
    
            public BusinessCard LoadMyBusinessCardToView()
            {
                // Query using Linq to Sql and set in view
                return card;
            }
        }
    

>>将视图(或演示者)的知识与模型联系起来绝对不是一个好主意。-------我只是想了解你,你是说我在我的例子中这样做,还是说你在笼统地说?@Karsten-笼统地说;模型的职责是表示数据