Обычно уровень пользовательского интерфейса должен проверять существование файла, прежде чем он передает управление на уровень бизнес / данных, чтобы пользовательский интерфейс и бизнес-логика оставались хорошо разделенными.
Если пользовательский интерфейс не знает, какую логику следует применять или какие проверки он должен выполнить для проверки действия перед вызовом DAL, попытайтесь разбить реализацию DAL на две фазы:
1) вызов метода Validate (), чтобы определить, можно ли продолжать, - это вернет результат в UI, который либо укажет "все в порядке, продолжайте" (т. Е. Когда файл отсутствует), либо определяет информацию вопрос, задаваемый пользователю (то есть, когда файл присутствует).
2) При необходимости пользовательский интерфейс задает вопрос, и только если ответ «да», он вызывает функцию Execute () операции DAL, чтобы фактически применить действие.
Это сохраняет бизнес-логику и пользовательский интерфейс строго разделенными, но все же позволяет взаимодействовать во время процесса, о котором сам пользовательский интерфейс мало что знает.