Параметры меню пользователя - PullRequest
1 голос
/ 28 апреля 2011

Мне нужно создать пользовательское меню, если существует файл, который будет отображать сообщение «Файл существует, вы хотите перезаписать? Да / Нет» У меня есть этот метод на уровне доступа к данным, и я не могу отправить слой прямого представления сообщений. Сначала сообщение отправляется на бизнес-уровень, а затем на уровень презентации. Так каков наилучший способ сделать это? Я пытаюсь с исключениями, но это не прилично и не эффективно. Как я могу это сделать?

/*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;                      
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 28 апреля 2011

Обычно уровень пользовательского интерфейса должен проверять существование файла, прежде чем он передает управление на уровень бизнес / данных, чтобы пользовательский интерфейс и бизнес-логика оставались хорошо разделенными.

Если пользовательский интерфейс не знает, какую логику следует применять или какие проверки он должен выполнить для проверки действия перед вызовом DAL, попытайтесь разбить реализацию DAL на две фазы:

1) вызов метода Validate (), чтобы определить, можно ли продолжать, - это вернет результат в UI, который либо укажет "все в порядке, продолжайте" (т. Е. Когда файл отсутствует), либо определяет информацию вопрос, задаваемый пользователю (то есть, когда файл присутствует).

2) При необходимости пользовательский интерфейс задает вопрос, и только если ответ «да», он вызывает функцию Execute () операции DAL, чтобы фактически применить действие.

Это сохраняет бизнес-логику и пользовательский интерфейс строго разделенными, но все же позволяет взаимодействовать во время процесса, о котором сам пользовательский интерфейс мало что знает.

0 голосов
/ 28 апреля 2011

Настройка уровня доступа к данным и уровня представления на что-то вроде этого решит вашу проблему:

/* 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);
}
0 голосов
/ 28 апреля 2011

DAL никогда не должен инициировать действия пользовательского интерфейса. Ваша архитектура неверна. Действия пользовательского интерфейса должны инициироваться только уровнем представления. Ваш DAL должен предоставлять только метаданные, чтобы бизнес-уровень мог решать, какие действия необходимо предпринять, и таким образом информировать уровень представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...