2011-02-05 8 views
2

MVVMデザインのWPFアプリケーションでこの問題を解決しようとしました。 私はより多くの「データ」データベースアクセスに返す必要があります。戻り値IResult <T>

  • 結果メッセージ
  • 戻り値
  • と場合は、だから私は、戻り値の型のためのインターフェイスを作成、ここにある

データベース成功しました:

public interface IResult<T> 
{ 
    bool IsSuccess { get; set; } 
    string ResultMessage { get; set; } 
    T ReturnValue { get; set; } 
} 

このインタフェースは、いくつかのクラスを実装しています

public class DbResult: IResult<IList<Archive>> 
{ 
    public bool IsSuccess{ get; set;} 
    public string ResultMessage{ get; set;} 
    public IList<Archive> ReturnValue { get; set; } 

} 

データベースへのアクセスのクラスのメソッドは、戻り値の型IResult<Archive>を持って、アーカイブ

public interface IArchiveDbManager 
{ 
    IResult<Archive> LoadConversationTo(string nick, DateTime toDt); 
} 

[Export(typeof(IArchiveDbManager))] 
public partial class ArchiveDbManager : IArchiveDbManager 
{ 
    public IResult<Archive> LoadConversationTo(string nick, DateTime toDt) 
    { 
     var result = new DbResult(); 

     try 
     { 
      var query = from m in _dc.Archive 
         where m.Nick == nick 
         where m.Time <= toDt 
         orderby m.Time 
         select m; 

      result.ReturnValue = query.ToList(); 

      if (query.Count() == 0) 
      { 
       result.ResultMessage = "For the specified search criteria found no record in the database."; 
       result.IsSuccess = false; 
      } 
      else 
      { 
       result.ResultMessage = 
        string.Format("For the specified search criteria found {0} record in the database.", query.Count()); 
       result.IsSuccess = true; 
      } 

      return result; 
     } 
     catch (Exception exception) 
     { 

      throw exception; 
     } 
    } 

} 

クラスArchiveDbManager .: LINQ to SQLはして生成されたクラスでは、ビューモデルクラスでMEFを注入しています。

私はいくつか質問があります。

  1. MVVMでこの 問題の正しい解決策は何を?シナリオビュー モデルは、データベース テーブルが空の場合、ArchiveDbManager クラスのリターン・メッセージとビューモデル「アーカイブ 空である」とは、例えば、 データベースへ ArchiveDbManagerアクセス​​によって作成され、ユーザーへの表示で、この メッセージが表示されます。

  2. 「ArchiveDbManagerクラス(それがデータベースへのアクセスに クラスである)」

  3. は、あなたがこの ソリューションについてどう思いますか? で、データベース内の 検索結果のレポートを作成するために右でありますか

+0

なぜセッターですか?不変の 'IResult 'はうまくいかないでしょうか? – CodesInChaos

答えて

0

単純にしておけば、インターフェイスやクラスは本当に必要ありません。

結果を尋ねるだけで、エラーメッセージが表示された場合は例外がスローされます。

この種の成功結果メッセージ:result.ResultMessage = "For the specified search criteria found no record in the database.";は、ビジネスロジックまたはデータレイヤーに属していません。 UIレイヤーは、ユーザーにメッセージを表示する責任があります。