MVC Sample for Winform

MVC Sample for Winform

์ด์ฒ ์šฐ

  1. ๋จผ์ € Winform ํ”„๋กœ์ ํŠธ(.Net 7)๋ฅผ ๋งŒ๋“ ๋‹ค.
    0-1. ํ”„๋กœ์ ํŠธ ์†์„ฑ์—์„œ 'Console Applicationโ€™์„ ์„ ํƒํ•œ๋‹ค.
    0-2. Form1 ๋””์ž์ธ์—์„œ TextBoxData, ButtonReset, ButtonIncrease ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  2. IView.cs

 public interface IView
    {
        void Set(int data);

        event EventHandler<EventArgs> ResetPressed;
        event EventHandler<EventArgs> IncreasePressed;
        event EventHandler<DataChangedEventArgs> DataChanged;
    }
  1. Model.cs
    public class Model
    {
        public Model() { }
        public int Data
        {
            get => _data;
            private set
            {
                if (_data != value)
                {
                    _data = value;
                    DataChanged!.Invoke(this, new DataChangedEventArgs(value));
                    Console.WriteLine(ToString());
                }
            }
        }
        private int _data = 0;

        public void Reset() => Data = 0;
        public void Increase() => Data++;
        public void Set(int data) => Data = data;

        public event EventHandler<DataChangedEventArgs>? DataChanged;

        public override string ToString() => $"Data:{Data}";
    }
  1. Controller.cs
 public class Controller
    {
        public Model Model { get; private set; }
        public IView View { get; private set; }

        public Controller(Model model, IView view)
        {
            Model = model;
            View = view;

            // Sync model and view.
            View.Set(Model.Data);

            Model.DataChanged += Model_DataChanged;

            View.ResetPressed += View_ResetPressed;
            View.IncreasePressed += View_IncreasePressed;
            View.DataChanged += View_DataChanged;
        }

        private void Model_DataChanged(object? sender, DataChangedEventArgs e)
        {
            View.Set(e.Data);
        }

        private void View_ResetPressed(object? sender, EventArgs e)
        {
            Model.Reset();
        }
        private void View_IncreasePressed(object? sender, EventArgs e)
        {
            Model.Increase();
        }

        private void View_DataChanged(object? sender, DataChangedEventArgs e)
        {
            Model.Set(e.Data);
        }
    }

    public class DataChangedEventArgs : EventArgs
    {
        public int Data { get; init; }

        public DataChangedEventArgs(int data)
        {
            Data = data;
        }
    }
  1. IView ์ƒ์†๋ฐ›์€ Form1.cs
    public partial class Form1 : Form, IView
    {
        public Form1()
        {
            InitializeComponent();
        }

        public event EventHandler<EventArgs>? ResetPressed;
        public event EventHandler<EventArgs>? IncreasePressed;
        public event EventHandler<DataChangedEventArgs>? DataChanged;

        private void TextBoxData_TextChanged(object sender, EventArgs e)
        {
            DataChanged?.Invoke(this, new DataChangedEventArgs(int.Parse(textBoxData.Text)));
        }

        private void ButtonReset_Click(object sender, EventArgs e)
        {
            ResetPressed?.Invoke(this, new EventArgs());
        }

        private void ButtonIncrease_Click(object sender, EventArgs e)
        {
            IncreasePressed?.Invoke(this, new EventArgs());
        }

        public void Set(int data)
        {
            textBoxData.Text = data.ToString();
        }
    }
  1. Program.cs
    internal static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            // To customize application configuration such as set high DPI settings or default font,
            // see https://aka.ms/applicationconfiguration.
            ApplicationConfiguration.Initialize();

            #region MVC Sample for Winform.
            var view = new Form1();
            var model = new Model();
            _ = new Controller(model, view);
            #endregion

            Application.Run(view);
        }
    }
2๊ฐœ์˜ ์ข‹์•„์š”