应用理论
我有一个应用程序“测试仪”。在任何测试中至少有 3 个部分:
- 带有开始测试按钮的部分(可能还带有测试设置:通过时间,票数 -对我个人而言);
- 带有门票本身的部分以及用于切换到下一张门票的按钮。它还显示剩余时间(如果已设置)、进度 - 已通过多少票;
- 最后是测试结果输出部分。
为了控制第一部分输入的数据,通过单击“下一张票”按钮显示新票,还显示进度等。在列表的第 2 项和显示测试结果,您需要创建一个class TestingController。
应用代码
它包含这样的代码(我还没有写一堆必要的辅助字段,每个部分需要的属性和方法):
class TestingController
{
/// ПЕРВАЯ СЕКЦИЯ (НАСТРОЙКА И НАЧАЛО ТЕСТИРОВАНИЯ)
// Время тестирования
DateTime TestingTime { get; set; }
// Количество билетов
int TicketsAmount { get; set; }
// Этот метод будет вызываться при нажатии на кнопку "Начать тестирование"
void GetStarted()
{
//// Выводим вторую секцию
}
//////////////////////////////////////////////////////
/// ВТОРАЯ СЕКЦИЯ (БИЛЕТЫ)
// Вывод нового билета
void GetNextTicket()
{
//// код замены значений у UIElement'ов
}
// Выводим "пройдено_билетов/осталось"
void OutputTestingProgress()
{
//// код
}
// Выводим оставшееся время на прохождение теста каждую секунду с помощью класса Timer
void OutputTimeLeft()
{
//// код
}
//////////////////////////////////////////////////////
/// ТРЕТЬЯ СЕКЦИЯ (РЕЗУЛЬТАТЫ)
void GetResults()
{
// выводим третью секцию
}
}
问题
这样做是否值得:将应用程序的 3 个部分的所有功能组合到一个 class_controller 中?或者将这个类划分为每个部分的3个相同的控制器更正确,每个控制器都将存储它们的属性和显示该部分的方法?
请帮帮我!我是创建应用程序的新手,并不真正了解如何正确构建应用程序的架构。
我不想编写糟糕的代码。
我的意见是不要合并。编程中有这么一个名词——神对象,当一个类有很多责任的时候。您现在正朝着创建这样一个类的方向前进。您已经说过您有三个部分,它们具有三种不同的职责(“开始测试”、“抽奖”)。
这种将不同事物组合成一个单一事物的愿望是通向一个可以同时完成所有事情的上帝对象的途径。他不仅会画纽扣,还会煮咖啡和计算贷款利息。
与此同时,事实上,出于某种原因,你将一些不同的职责与其他人结合在一起。例如,对我来说很明显“开始测试”和“应用程序设置”的职责是完全不同的事情,但是您在心理上将它们组合成“第一节”。在这个问题上,编号通常是一个糟糕的顾问。如果写public class Section1,一切看似顺理成章,但如果按照意义、意义、责任来命名,那么当类名中突然出现“And”二字时要时刻注意:ClassStartTestingMoreSettings。
在职责分离的问题上,一般来说,很少需要组合一些东西,只是 OOP 方法建议尽可能少地拆分类。
因此,您不需要一个超级控制器,您需要三个(甚至更多)独立的类,它们只负责它们的部分。