#c# #menu
#c# #меню
Вопрос:
Мне нужно создать пользовательское меню, если файл существует, в котором будет отображаться сообщение: «Файл существует, вы хотите перезаписать? Y / N «У меня есть этот метод на уровне доступа к данным, и я не могу отправлять сообщения на уровне прямого представления. Сначала сообщение будет отправлено на бизнес-уровень, а затем на уровень представления. Итак, каков наилучший способ сделать это?? Я пытаюсь использовать исключения, но это не прилично и неэффективно. Как я могу сделать?
/*This method is in data access layer*/
public void MenuControl(string binaryfilePath)
{
if (File.Exists(binaryFilePath))
{
string overwrite = "-2";
Program.DisplayUserOptionMessage("The file: " binaryFileName
" exist. You want to overwrite it? Y/N");
overwrite = Console.ReadLine();
while (overwrite != null)
{
if (overwrite.ToUpper() == "Y")
{
WriteBinaryFile(frameCodes, binaryFilePath);
break;
}
else if (overwrite.ToUpper() == "N")
{
throw new CustomException("Aborted by User...");
}
else
throw new CustomException("!!Please Select a Valid Option!!");
overwrite = Console.ReadLine();
//continue;
}
}
}
Ответ №1:
DAL никогда не должен инициировать действия пользовательского интерфейса. Ваша архитектура неверна. Действия пользовательского интерфейса должны инициироваться только уровнем представления. Ваш DAL должен предоставлять метаданные только для того, чтобы бизнес-уровень мог решать, какие действия необходимо предпринять, и, таким образом, информировать уровень представления.
Ответ №2:
Обычно уровень пользовательского интерфейса должен проверять существование файла, прежде чем он передаст управление бизнес-уровням / уровням данных, чтобы пользовательский интерфейс и бизнес-логика оставались четко разделенными.
Если пользовательский интерфейс не знает, какая логика должна быть применена или какие проверки он должен выполнить для подтверждения действия перед вызовом DAL, попробуйте разбить реализацию DAL на два этапа:
1) вызовите метод Validate (), чтобы определить, можно ли продолжить — это вернет результат в пользовательский интерфейс, который либо указывает «все в порядке, продолжайте» (т. Е. Когда файл отсутствует), либо информацию, определяющую вопрос, который нужно задать пользователю (т. Е. Когда файл присутствует).
2) При необходимости пользовательский интерфейс затем задает вопрос, и только если ответ «да», он затем вызывает часть Execute() операции DAL, чтобы фактически применить действие.
Это позволяет строго разделить бизнес-логику и пользовательский интерфейс, но все же позволяет взаимодействовать во время процесса, о котором сам пользовательский интерфейс мало что знает.
Ответ №3:
Настройка вашего уровня доступа к данным и уровня представления на что-то подобное решила бы вашу проблему:
/* Presentation Layer */
if (DAL.FileExists(binaryPath)
{
console.WriteLine("Do you wish to overwrite?");
if (Console.ReadKey() == "Y")
{
DAL.Save(binaryPath); //proper classes in your dal etc here
}
}
else
{
DAL.Save(binaryPath);
}
/* DAL */
public bool FileExists(string path)
{
if (string.IsNullOrWhitespace(path)) return false;
return File.Exists(path);
}
public void Save(string path)
{
WriteBinaryFile(frameCodes, path);
}