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

Rob*_*ean 8 .net model-view-controller console

我发现编写Web应用程序和WinForm应用程序通常比编写控制台应用程序时更清晰.

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

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

Bra*_*nac 10

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

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


Gau*_*ain 5

控制台应用程序示例的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();
        }
    }
Run Code Online (Sandbox Code Playgroud)