类似MVC的控制台应用程序设计?

时间:2009-07-10 07:48:49

标签: .net model-view-controller console

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

清洁工是什么意思?事实上,UI(即readline / writeline)与逻辑代码交织在一起的事实变得非常糟糕,事实上它不是事件驱动的,这意味着很难获得良好的抽象。

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

4 个答案:

答案 0 :(得分:10)

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

最后,如果你想拿一本书,C#中的敏捷原则,模式和实践包含一个很好的演练,用于构建基于控制台的工资单应用程序。一旦获得竞争,他们将构建到WinForms UI,以展示他们的应用程序架构如何允许他们轻松添加新视图。

答案 1 :(得分:4)

MVC for console应用程序示例:

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();
        }
    }

答案 2 :(得分:0)

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

此致

答案 3 :(得分:0)

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

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

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

我对MVC的看法是视图完全负责显示正确的数据,选项等。从这个角度来看,视图中有逻辑并不是犯罪,只要该逻辑仅与如何相关显示的东西。

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