MVC-подобный дизайн для консольных приложений? - PullRequest
7 голосов
/ 10 июля 2009

Я считаю, что написание веб-приложений и приложений WinForm обычно получается намного чище, чем когда я пишу консольное приложение.

Что я имею в виду под уборщиком? Ну, тот факт, что тот факт, что пользовательский интерфейс (то есть readline / writeline) так тесно переплетен с логическим кодом, становится ужасным, и тот факт, что он не управляется событиями, означает, что получить хорошую абстракцию сложнее.

Я думал об этом, и MVC пытается решить подобные проблемы для веб-приложений, так что мой вопрос, есть ли что-нибудь подобное для консольных приложений? или какие-нибудь руководства по улучшению дизайна консольных приложений?

Ответы [ 4 ]

10 голосов
/ 10 июля 2009

Я думаю, вы обнаружите, что популярной альтернативой Model View Controller является Model-View-Presenter. Модель в основном одинакова между двумя. Роль контроллера и представления очень схожи, но они могут получить немного больше ответственности в зависимости от вашей реализации. В MVP есть два метода реализации: Supervising Controller и Passive View. MVP обычно считается стандартной архитектурой для клиентов WinForms и может также применяться к WebForms. Вот некоторые соответствующие ссылки для получения дополнительной информации:

Наконец, если вы хотите взять книгу, Agile Принципы, Шаблоны и Практики в C # содержат отличное пошаговое руководство по созданию консольного приложения для расчета заработной платы. После того, как они конкурируют, они создают пользовательский интерфейс WinForms, чтобы показать, как архитектура их приложений позволяет им добавлять новый вид с минимальными усилиями.

4 голосов
/ 24 июля 2013

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();
        }
    }
0 голосов
/ 10 июля 2009

Я думаю, что вы все еще можете использовать MVC для консольных приложений.

Помните, что в веб-приложениях и WinForms много взаимодействия отвлекается от вас, но все еще присутствует в логике представления, например, какие элементы показывать при нажатии на вкладку.

Это тот тип взаимодействия, в котором вы сами должны написать код в консольном приложении, но нет никаких причин, по которым это невозможно сделать полностью в коде для представления.

Мое мнение о MVC заключается в том, что представление полностью отвечает за отображение правильных данных, опций и т. Д. В этом свете не логично иметь логику в представлении, если эта логика связана только с тем, как материал отображается.

Конечно, разбиение представления на разные классы, вероятно, немного упростит задачу (например, вы можете разбить сам код представления на шаблон MVC, хотя это может очень быстро усложниться с такими объектами, как IAppView, IAppViewController, IAppViewView. , вы получите точку :)).

0 голосов
/ 10 июля 2009

Model View Control - это шаблон проектирования, который применим как к веб-приложениям, так и к консольным приложениям. Возможно, вам следует задать вопрос: как применить MVC к консольному приложению.

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...