0 / 0 / 2
Регистрация: 11.10.2016
Сообщений: 116
1

Реализация подхода MVC на примере работы с матрицей

09.05.2019, 16:00. Показов 1325. Ответов 7
Метки mvc (Все метки)

Author24 — интернет-сервис помощи студентам
Только начинаю практиковать язык C# и столкнулся с такой проблемой. Необходимо посчитать сумму элементов матрицы. Использую подход MVC (Model-View-Controller). Пример реализации подхода посмотрел тут http://congeritc.blogspot.com/... ogram.html
Написал класс Model:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace OOP_LR13
{
        class Model
        {
            private int n;
            //public int N { get { return n; } set { n = value; } }
            private int m;
            //public int M { get { return m; } set { m = value; } }
 
        int[,] arr;
 
        public Model()
        {
            n = 0;
            m = 0;
            arr = null;
        }
 
        public Model(int rows, int cols)
        {
            n = rows;
            m = cols;
            arr = new int[n, m];
        }
 
        public void fill_random(int [,]arr, int r, int c)
        {
            Random rand = new Random();
            for (int i = 0; i < r; i++)
            {
                for(int j = 0; j < c; j++)
                   arr[i, j] = rand.Next(1,100);
            }
        }
 
        public void fill_manual(int [,]arr, int r, int c)
        {
            for(int i = 0; i < r; i++)
            {
                for(int j = 0; j < c; j++)
                   arr[i, j] = int.Parse(Console.ReadLine());
            }
        }
 
        public int sum_matrix(int [,]arr, int r, int c)
        {
            int sum = 0;
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < c; j++)
                {
                    sum += arr[i, j];
                }
            }
            return sum;
        }
 
        public string convert_rows(int[,] arr, int i, int r)
        {
            string str = "";
            for (int j = 0; j < r; j++)
                str += arr[i, j].ToString() + " ";
            return str;
        }
    }
Теперь не могу сообразить содержимое класса Display и Controller. Прошу объяснить "на пальцах" простым языком что должно быть в этих классах (потому как первый раз столкнулся с разделением данных от интерфейса и бизнес-логики). Буду благодарен за любую помощь и совет. Заранее благодарен. Также попробовал начать реализовывать класс Display:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class View
    {
        private int rows;
        private int cols;
 
        public int N { get { return rows; } set { rows = value; } }
        public int M { get { return cols; } set { cols = value; } }
 
        View()
        {
            N = 0;
            M = 0;
            GetValues();
        }
 
        public void GetValues()
        {
            Console.WriteLine("Enter to count rows the Matrix: ");
            N = int.Parse(Console.ReadLine());
 
            Console.WriteLine("Enter to count colums the Matrix: ");
            M = int.Parse(Console.ReadLine());
        }
 
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2019, 16:00
Ответы с готовыми решениями:

Интересная реализация IDisposable. В чём конкретно преимущество такого подхода? От каких ситуаций спасает?
/// &lt;summary&gt; /// Base class for disposable objects. /// &lt;/summary&gt; public class...

Динамическая индикация на примере управления светодиодной матрицей 4x
нашел данную статью - http://microsin.net/programming/avr/led-matrix-dynamic-indication.html очень...

Разница в структурах MVC и MVVM на конкретном примере
Всем привет. Люди в теории понимаю, как работает MVC, но не совсем понимаю разницы между MVC и...

Реализация принципов ООП на примере
Задача проекта должна содержать примеры реализации основных принципов обьектно-ориентированного...

7
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
09.05.2019, 16:33 2
В современном консольном приложении классический MVC не реализуешь.
В классическом MVC ввод ловит Controller, а не морда лица.
https://ru.wikipedia.org/wiki/... Controller

Здесь очередная модификация паттерна MV*, которых сейчас уже несколько.

Ну натянул автор сову на глобус, изучайте. Тоже прикольно разобраться.
1
Модератор
Эксперт .NET
15463 / 10708 / 2786
Регистрация: 21.04.2018
Сообщений: 31,522
Записей в блоге: 2
09.05.2019, 16:57 3
Лучший ответ Сообщение было отмечено nenahov как решение

Решение

Цитата Сообщение от nenahov Посмотреть сообщение
Теперь не могу сообразить содержимое класса Display и Controller.
Controller - это основной класс.
Он инициализирует View и Model, и передаёт значения между ними.
Допустим
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
    class Controller
    {
        View view;
        Model model;
        public Controller()
        {
            view = new View();
            model = new Model(view.N, view.M);
            model.fill_random();
            view.PrinConsoleArr(model.Arr);
        }
 
 
    }
    class Model
    {
        private int n;
        //public int N { get { return n; } set { n = value; } }
        private int m;
        //public int M { get { return m; } set { m = value; } }
 
        int[,] arr;
        public int[,] Arr => arr;
        public Model()
        {
            n = 0;
            m = 0;
            arr = null;
        }
 
        public Model(int rows, int cols)
        {
            n = rows;
            m = cols;
            arr = new int[n, m];
        }
 
        static Random rand = new Random();
        public void fill_random(/*int[,] arr, int r, int c*/)
        {
            //for (int i = 0; i < r; i++)
            //{
            //    for (int j = 0; j < c; j++)
            //}
            for (int row = 0; row < (arr?.GetLength(0) ?? -1); row++)
                for (int col = 0; col < arr.GetLength(1); col++)
                    arr[row, col] = rand.Next(1, 100);
        }
 
        public void fill_manual(int[,] arr, int r, int c)
        {
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < c; j++)
                    arr[i, j] = int.Parse(Console.ReadLine());
            }
        }
 
        public int sum_matrix(int[,] arr, int r, int c)
        {
            int sum = 0;
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < c; j++)
                {
                    sum += arr[i, j];
                }
            }
            return sum;
        }
        public string convert_rows(int[,] arr, int i, int r)
        {
            string str = "";
            for (int j = 0; j < r; j++)
                str += arr[i, j].ToString() + " ";
            return str;
        }
    }
    class View
    {
        private int rows;
        private int cols;
 
        public int N { get { return rows; } set { rows = value; } }
        public int M { get { return cols; } set { cols = value; } }
 
        public View()
        {
            N = 0;
            M = 0;
            GetValues();
        }
 
        public void GetValues()
        {
            Console.WriteLine("Enter to count rows the Matrix: ");
            N = int.Parse(Console.ReadLine());
 
            Console.WriteLine("Enter to count colums the Matrix: ");
            M = int.Parse(Console.ReadLine());
        }
 
        public void PrinConsoleArr(int[,] arr)
        {
            for (int row = 0; row < (arr?.GetLength(0) ?? -1); row++)
            {
                for (int col = 0; col < arr.GetLength(1); col++)
                {
                    if (col != 0)
                        Console.Write(", ");
                    Console.Write(arr[row, col]);
                }
                Console.WriteLine();
            }
        }
    }
И метод Main из одной строчки
C#
1
2
3
4
        static void Main()
        {
           new Controller();
        }
1
0 / 0 / 2
Регистрация: 11.10.2016
Сообщений: 116
09.05.2019, 17:30  [ТС] 4
Элд Хасп, спасибо. А можете объяснить этот цикл?
C#
1
2
for (int row = 0; row < (arr?.GetLength(0) ?? -1); row++)
                for (int col = 0; col < arr.GetLength(1); col++)
0
Модератор
Эксперт .NET
15463 / 10708 / 2786
Регистрация: 21.04.2018
Сообщений: 31,522
Записей в блоге: 2
09.05.2019, 17:45 5
Цитата Сообщение от nenahov Посмотреть сообщение
А можете объяснить этот цикл?
Обычный перебор строк и колонок....
А что в нём непонятно?
0
0 / 0 / 2
Регистрация: 11.10.2016
Сообщений: 116
09.05.2019, 17:51  [ТС] 6
Элд Хасп, чем отличается от этого? Или это одно и тоже?
C#
1
2
3
for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < c; j++)
0
Модератор
Эксперт .NET
15463 / 10708 / 2786
Регистрация: 21.04.2018
Сообщений: 31,522
Записей в блоге: 2
09.05.2019, 17:59 7
Цитата Сообщение от nenahov Посмотреть сообщение
чем отличается от этого? Или это одно и тоже?
По смыслу, да.
Но в Вашей реализации требуется передавать два параметра в метод. А это излишне.
Размерность матрицы можно получить из неё самой.
Так же нет смысла передавать матрицу в параметрах, так как она уже есть в классе и экземпляр класса работает именно с ней, а не с произвольной матрицей.

Условно-нулевой оператор ?. и оператор объединения со значением NULL ?? используются для обработки ситуации, если матрица не инициализирована - защита от ошибки.
1
Модератор
Эксперт .NET
15463 / 10708 / 2786
Регистрация: 21.04.2018
Сообщений: 31,522
Записей в блоге: 2
10.05.2019, 14:11 8
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Controller - это основной класс.
nenahov, для уточнения.
Во многих случаях в качестве контроллера может выступить класс Programm и метод Main.

Добавлено через 17 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
    class Program
    {
        View view;
        Model model;
        public void Main()
        {
            view = new View();
            model = new Model(view.N, view.M);
            model.fill_random();
            view.PrinConsoleArr(model.Arr);
        }
    }
0
10.05.2019, 14:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2019, 14:11
Помогаю со студенческими работами здесь

Реализация условия в арифметическом примере
Здраствуйте, форумчане! Дана задача: Y=2*X2 - X1 при X1&gt;2*X2 и X2&lt;=2. Диапазон вводимых...

Оптимальная реализация построения БД на конкретном примере
Добрый день! Вопрос следующий: базу данных вроде как принято наполнять посредством добавления новых...

Реализация методов в C# на примере списка с песнями (массива)
Помогите, пожалуйста, со следующим заданием: Создать класс Container для хранения информации об...

Реализация операций с множествами на примере домашних животных на ферме
В следующих Заданиях использовать множество подходящего типа.Для выполнения операций с множествами...

Программная реализация генетических алгоритмов на примере игры жизнь
программная реализация генетических алгоритмов на примере игры жизнь..... что делать ?

Реализация CRUD MVC
Здравствуйте. Извиняюсь за глупый вопрос, может не правильно формулирую и вообще не о том думаю,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru