Тип возврата IResult <T> - PullRequest
       50

Тип возврата IResult <T>

2 голосов
/ 05 февраля 2011

Я пытаюсь решить эту проблему в приложении WPF с дизайном MVVM.Мне нужно вернуть при доступе к базе данных больше «данных»:

  • сообщения о результате
  • возвращаемое значение
  • и, если база данных была успешной

Поэтому я создаю интерфейс для возвращаемого типа, вот он:

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>, Архивэто класс сгенерированный с помощью 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 голосов
/ 10 марта 2011

Проще говоря: вам не нужен интерфейс или класс.

Вам нужно только запросить результат, и метод должен выдать исключение с сообщением об ошибке, если что-то идет не так.

Такого рода сообщения о результатах успеха: result.ResultMessage = "For the specified search criteria found no record in the database."; не относятся к бизнес-логике или уровню данных. Уровень пользовательского интерфейса должен отвечать за отображение сообщений пользователю.

...