返回类型IResult <t> </t>

时间:2011-02-05 20:50:48

标签: c# wpf mvvm return-value return-type

我尝试使用MVVM设计在WPF应用中解决此问题。 我需要在数据库访问上返回更多“数据”:

  • 结果消息
  • 返回值
  • 如果数据库成功

所以我为返回类型创建了接口,这里是:

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>,Archive是使用LINQ TO SQL生成的类。:

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在视图模型类中注入了MEF。

我有一些问题:

  1. 对此有何正确解决方法 MVVM中的问题?场景是视图 模型创造通过 ArchiveDbManager访问了 数据库,例如数据库 表是空的,ArchiveDbManager 类返回消息“存档是 空“和视图模型显示这个 用户可以看到的消息。

  2. 创建报告是正确的 搜索结果在数据库中 “ArchiveDbManager类(它是一个 数据库访问类)“

  3. 您如何看待这一点     溶液

1 个答案:

答案 0 :(得分:0)

保持简单:你真的不需要界面或类。

您只需要询问结果,并且该方法应抛出异常,错误消息出错。

这种成功结果消息:result.ResultMessage = "For the specified search criteria found no record in the database.";不属于业务逻辑或数据层。 UI层应负责向用户显示消息。