为一个界面传递一个视图是不可取的吗?

问题描述 投票:0回答:1

假设你的模型或视图模型需要显示一条消息,但它显然不想访问UI。所以它实现了一个有Notify(String)方法的接口。

现在,无论谁实现了这个接口,都可以显示消息,而这个对象通常是基于UI的类,需要传递给模型或视图模型。

我的问题是,即使只是以接口的形式传递一个UI对象,也会被皱眉头吗?

我已经用一个模拟例子说明了这个问题。

  public interface INotify
    {
        void  Notify(String msg);
    }

    class Model
    {
        INotify _notify;

        public Model(INotify notify )
        {
            _notify = notify;
        }

        public void Add(int a, int b)
        {
            int result = a + b;

            _notify.Notify("The result is " + result.ToString());
        }

    }

    class View : INotify
    {
        public void Notify(String msg)
        {
            Console.Write("I am the view, I received this: ");
            Console.WriteLine(msg);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            View view = new View();
            Model model = new Model(view);

            model.Add(4, 7);
        }
    }

结果和预期的一样,关键点是它是从视图中打印出来的。

我是视图,我收到这个。结果是 11 按任意键继续.... . .

在现实世界中,该 view 类将是一个完整的UI类,如windows form或wpf等,但它只是被传递给一个它实现的接口。为什么视图被传递为它实现的接口,这会不会被皱眉头?

如果会被皱眉头,这不正是接口的工作吗?在这种情况下,它的派生类毕竟会被期望成为某种UI类来显示消息,而且它还会有很多其他的东西。

我是想了解接口的实际用途,也是想解决一个问题,当偶尔MVVC或MVVM中的模型视图可能要显示消息时,用它来解决。

另一种变化是实现完全的观察者模式,但在我的例子中,模型或视图模型只需要在一个窗口中显示消息(从不在多个窗口中显示),所以将该视图传递给接口在逻辑上是合理的。

c# model-view-controller mvvm observer-pattern
1个回答
0
投票

我真的不认为这将是一个问题,只要它不影响性能,这是显著的,或者它看起来很奇怪,在项目的后期,当你开始添加越来越多的GUI等。

© www.soinside.com 2019 - 2024. All rights reserved.