2011-04-27 80 views
1

我需要讓用戶菜單,如果該文件存在,將顯示消息,「該文件存在,你想覆蓋?Y/N」我對數據訪問層這個方法,可以」 t發送消息直接表示層。首先,消息將發送到業務層,然後發送到表示層。那麼做這件事的最好方法是什麼?我嘗試了例外情況,但並不高尚,並且效率不高。我能怎麼做?用戶菜單選項

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

回答

0

DAL永遠不應該啓動UI操作。你的架構是錯誤的。 UI操作只能由表示層啓動。您的DAL只應提供元數據,以便業務層可以決定需要採取的操作,從而通知表示層。

0

以往UI層應該檢查該文件是否存在它通過前控制下降到業務/數據層,從而UI和商業邏輯保持很好地分離。

如果UI不知道是什麼邏輯應適用或者什麼檢查應該執行它調用DAL之前驗證動作,然後嘗試打破DAL實施分爲兩個階段:

1)調用一個Validate()方法來確定是否可以繼續 - 這會向UI返回一個結果,表明「一切正常,繼續」(即當文件不存在時)或定義問題以詢問用戶的信息(即當文件存在時)。

2)如果有必要,UI然後提出問題,並且僅當回答是「是」,它隨後致電DAL操作的execute()的一部分,以實際應用的操作。

這樣可以使業務邏輯和UI嚴格分開,但仍允許在該UI本身並不很瞭解的過程交互作用。

0

調整你的數據訪問層和表示層來這樣的事情會解決你的問題:

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