Нужно ли использовать шаблон состояния для процесса утверждения данных? - PullRequest
0 голосов
/ 13 октября 2011

Пользователи нашей системы могут предоставить не подтвержденные контактные данные. Например:

  • Имя: ноль
  • Фамилия: 231
  • номер телефона: не уверен
  • и т.д.

Эти данные хранятся в таблице PendingContacts.

У меня есть еще одна таблица - ApprovedContacts. Эта таблица имеет множество ограничений для улучшения согласованности и целостности. Эта таблица не должна содержать грязных или неполных данных.

Мне нужен процесс для перемещения данных из одной таблицы в другую. Структура обеих таблиц практически идентична, однако одна таблица имеет ограничения, а другая - нет.

У меня есть два состояния: «Ожидание» и «Утверждено», интуитивное чувство подсказывает мне, что я должен использовать образец состояния подробности здесь . Теоретически это должно позволить мне изменить состояние контакта с Ожидание на Утверждено, в зависимости от того, был ли контакт успешно подтвержден. Проблема в том, что я не понимаю, как это будет работать.

Я иду в правильном направлении или я должен смотреть на что-то совершенно другое?

Уровень представления находится в MVC 3, поэтому я имею представление моделей для ожидающих контактов и утвержденных контактов, а также моделей доменов для ожидающих контактов и утвержденных контактов. Мои модели представлений, как правило, представляют собой DTO с некоторыми процедурами проверки, но теперь мои модели представлений также представляют состояние. Это кажется неправильным.

Например, все контакты должны иметь состояние, и они могут быть сохранены и удалены, поэтому мне нужен интерфейс для этого:

public interface IContactViewModelState
{        
    void Save(ContactViewModel item);
}

Затем я добавляю реализацию для сохранения ожидающих контактов в таблицу PendingContacts:

public class PendingContactViewModelState: IContactViewModelState
{
    public void Save(ContactViewModel item)
    {
        // Save to the pending contacts table
        // I don't like this as my view model now references data access layer 
    }
}

1 Ответ

1 голос
/ 13 октября 2011

Краткий ответ: нет, потому что у вас есть только два состояния.Вы бы использовали шаблон состояний, чтобы помочь справляться со сложными ситуациями со многими состояниями и правилами.Единственная причина, по которой вы можете захотеть использовать полномасштабную реализацию на основе шаблонов состояний, заключается в том, что если существует очень высокая вероятность того, что такая ситуация неизбежна.

Если результатом успешного перехода к утвержденному является окончание записивверх в утвержденной таблице, тогда вам действительно нужно решить, где вы хотите применить ограничения.Это решение будет / может быть основано на многих факторах, включая вероятную частоту изменений (к ограничениям) и место, где находится другая логика.приложения, но здесь я думаю, что это просто случай, когда решается, где и как реализовать какую-то логику.Другими словами - возможно, вы просто чрезмерно анализируете проблему - это легко сделать:)

...