我是否需要使用状态模式进行数据审批?

时间:2011-10-13 09:23:03

标签: asp.net-mvc-3 design-patterns architecture

我们系统的用户可以提交未经验证的联系人数据。例如:

  • Forename:null
  • 姓:231
  • TelephoneNumber:不确定

此数据存储在PendingContacts表中。

我有另一张桌子 - ApprovedContacts。该表具有各种约束以提高一致性和完整性。该表不应包含任何脏的或不完整的数据。

我需要一个进程将数据从一个表移动到另一个表。两个表的结构几乎相同,但是,一个表具有约束,而另一个表没有。

我有两种状态:Pending和Approved,直觉告诉我应该使用状态模式details here。理论上,这应该允许我将联系人的状态从Pending更改为Approved,具体取决于联系人是否已成功验证。问题是我看不出这是怎么回事。

我是朝着正确的方向前进,还是应该看一些完全不同的东西?

表示层位于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 个答案:

答案 0 :(得分:1)

简短回答:不,因为你只有两个州。您将使用状态模式来帮助处理具有许多状态和规则的复杂情况。您可能希望采用基于状态模式的全面实施的唯一原因是,如果您很有可能出现这样的情况。

如果成功转换为Approved的结果是最终在批准的表中的记录,那么您实际上只需要确定要强制执行约束的位置。这个决定将/可以基于许多因素,包括可能的变化频率(对约束)和其他逻辑所在的位置。

许多模式(但不是全部)倾向于处理如何构建应用程序,但在这里我认为这只是决定实现某些逻辑的位置和方式的一种情况。换句话说 - 你可能只是意外地过度分析问题 - 这很容易做到:)

相关问题