【问题标题】:MVC-like design for console applications?控制台应用程序的类似 MVC 的设计?
【发布时间】:2010-11-09 15:27:48
【问题描述】:

我发现编写 Web 应用程序和 WinForm 应用程序通常比编写控制台应用程序要干净得多。

清洁工是什么意思?好吧,UI(即 readline/writeline)与逻辑代码如此交织的事实变得可怕,而且它不是事件驱动的事实意味着更难获得良好的抽象。

我正在考虑这个问题,MVC 确实尝试解决 Web 应用程序的类似问题,所以我的问题是控制台应用程序有类似的问题吗?或任何指南可以更好地设计控制台应用程序?

【问题讨论】:

    标签: .net model-view-controller console


    【解决方案1】:

    我想你会发现模型视图控制器的流行替代品是模型视图演示者。两者之间的模型基本相同。控制器和视图的角色非常相似,但根据您的实现,它们可能会承担更多的责任。在MVP内部,有两种实现方式:监督控制器和被动视图。 MVP 通常被认为是 WinForms 客户端的标准架构,也可以应用于 WebForms。以下是一些相关链接以获取更多信息:

    最后,如果您想拿起一本书,C# 中的敏捷原则、模式和实践包含了构建基于控制台的工资单应用程序的出色演练。完成后,他们构建到 WinForms UI,以展示他们的应用程序架构如何允许他们轻松添加新视图。

    【讨论】:

    • 对于缺少实际超链接,我深表歉意,但我是新用户,我可以发布的数量有上限。
    • @Brad,欢迎来到 StackOverflow!我在您的帖子中添加了超链接。
    【解决方案2】:

    用于控制台应用程序的 MVC 示例:

    public interface IController
    {
     void RequestView(IView view);
    
            IView ResponseView();
    }
    
    public interface IView
    {
            int GetID { set; get; }
            void DisplayId();
    
    }
    public interface IModel
    {
            int GenrateID(int id);
    }
    
    //Business logic in Model
    public class Model : IModel
    {
            public int GenrateID(int id)
            {
                id = id * 10;
                return id;
            }
    }
    
    //Event Logic in Controller
    public class Controller : IController
    {
            private IModel model;
            private IView responseView;
            public Controller()
            {
                responseView = new View();
            }
    
            public void RequestView(IView view)
            {
    
                model = new Model();
                responseView.GetID = model.GenrateID(view.GetID);
            }
    
            public IView ResponseView()
            {
                return responseView;
            }
    }
    //Display Logic in View
    public class View : IView
    {
            public int GetID
            {
                get;set;
            }
    
            public void DisplayId()
            {
                Console.Write(GetID);
            }
    } 
    
    class Program
        {
            static void Main(string[] args)
            {
                IController ctr = new Controller();
                int input =int.Parse(args[0]);
                IView view=new View()
                {
                    GetID = input
                };
    
                ctr.RequestView(view);
                view =ctr.ResponseView();
                view.DisplayId();
            }
        }
    

    【讨论】:

      【解决方案3】:

      模型视图控件是一种设计模式,因此适用于 Web 应用程序和控制台应用程序。或许您应该问一个问题:如何将 MVC 应用到您的控制台应用程序。

      问候

      【讨论】:

        【解决方案4】:

        我认为您仍然可以将 MVC 用于控制台应用程序。

        请记住,在 Web 应用程序和 WinForms 中,很多交互是从您那里抽象出来的,但仍然存在于视图逻辑中,例如单击选项卡时要显示哪些元素。

        这是您必须在控制台应用程序中自己编写代码的那种交互,但没有理由不能完全在视图代码中完成。

        我对 MVC 的看法是,视图完全负责显示正确的数据、选项等。鉴于此,视图中包含逻辑并不是犯罪,只要该逻辑仅与如何显示内容。

        当然,将视图拆分为不同的类可能会使事情变得更容易一些(例如,您可以将视图代码本身拆分为 MVC 模式,尽管使用 IAppView、IAppViewController、IAppViewView 等实体会很快变得复杂,你明白了:))。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-31
          • 1970-01-01
          • 2011-08-16
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多