Я уверен, что разумным ответом на этот вопрос будет «не делайте этого», поэтому я предварю вопрос, сказав, что то, что я делаю, неэффективно и может быть сделано намного проще другим Кстати, но я делаю это как упражнение по программированию.
Я пытаюсь создать планировщик задач в VB. NET Консольный режим. Я создаю консольное приложение с текстовым пользовательским интерфейсом (TUI), в котором пользователи могут добавлять новые задачи, редактировать и удалять их, а также добавлять информацию о каждой задаче, например о сроках выполнения и завершении, путем ввода Консоль, а не форму Windows.
Для достижения этой цели нажатия клавиш пользователя перенаправляются функцией: поэтому вместо использования Console.ReadLine
для всей информации я буду использовать Console.ReadKey
для принятия пользовательского ввода, затем Console.SetCursorPosition
и Console.Write
для печати и стирания символов с экрана по мере необходимости.
Имея это в виду, мне интересно, как лучше всего структурировать мои классы, и как обращаться с методами, которые к ним относятся. На данный момент у меня три класса:
Task
(отдельная задача или событие) TaskList
(список задач / событий) Schedule
(список задач / событий, организованный по дате, извлеченный из всех TaskLists
.)
Поскольку мы делаем объектно-ориентированный подход, я хочу, чтобы каждый класс имел свои собственные методы . Например, TaskList
и Schedule
будут иметь метод Print
для отображения информации о каждой задаче на консоли.
Я не уверен, в чем я не уверен: когда дело доходит до элементов пользовательского ввода, должно ли это выполняться внутри класса или снаружи?
Например, мне нужен метод Add
, позволяющий пользователю создать новую задачу. Я мог бы либо:
Создать метод Add
в классе Task
, который будет контролировать все нажатия клавиш пользователя и вводить всю необходимую информацию непосредственно в новый Task
объект.
Создайте метод AddTask
в основном модуле, который создаст пустой объект Task
, будет управлять всеми нажатиями клавиш пользователя и вводить информацию в новый объект Task
.
Причина, по которой я не уверен, какой подход лучше всего, связана с TUI. Вся программа должна знать, где все находится по отношению ко всему остальному - например, если я помещу метод Add
внутри класса Task
, тогда класс Task
должен знать, где на консоли печатать форму. , символы, вводимые пользователем, и т. д., чтобы не перезаписывать другие символы. Та же проблема, если я сделаю метод AddTask
в основном модуле. Поэтому мне нужно либо иметь несколько глобальных переменных, хранящих ссылки на сетку, объявляющие, где должен go каждый элемент «Форма», либо я должен передать все эти ссылки на сетку в качестве параметров функции.
Итак, я действительно есть два вопроса здесь. Когда дело доходит до лучших практик для TUI, должен ли я:
Объявить все методы внутри класса или за его пределами?
Хранить информацию, необходимую для глобального создания TUI, или передавать информацию локально в виде параметров?