如何根据状态限制对类数据的访问?

时间:2010-04-01 14:02:22

标签: c# design-patterns fluent-nhibernate

在我正在开发的ETL应用程序中,我们有三个基本过程:

  1. 验证并解析来自第三方的客户信息的XML文件
  2. 将文件中收到的值与我们系统中的值进行匹配
  3. 在我们的系统中加载客户数据
  4. 这里的问题是我们可能需要将来自上述任何或所有状态的客户信息显示给内部用户,并且我们的客户类中有数据在我们的系统中匹配值之前永远不会填充(第2步)。出于这个原因,我希望当客户处于这种状态时,甚至无法访问这些值,并且我希望避免一些重复的逻辑,如:

    if (customer.IsMatched) DisplayTextOnWeb(customer.SomeMatchedValue);
    

    我首先想到的是在Customer上添加几个接口,这些接口只暴露当前状态的属性和行为,然后只处理这些接口。这种方法的问题在于,似乎没有好的办法从ICustomerWithNoMatchedValues转移到ICustomerWithMatchedValues而不进行直接转换等等......(或者至少我找不到一个)。

    我不可能是第一个遇到这种情况的人,你通常如何处理这个问题?

    作为最后一个警告,我希望这个解决方案与FluentNHibernate一起发挥很好:)

    提前致谢...

2 个答案:

答案 0 :(得分:0)

添加一个继承自Customer的类,称为MatchedCustomer(例如)。然后,步骤#2成为将客户推广到匹配客户的过程。您仍然需要编写代码来执行此操作;通常它是在构造函数中完成的:

public class MatchedCustomer : Customer
{
    public MatchedCustomer(Customer customer)
    {
        // set properties from customer, i.e.
        FirstName = customer.FirstName;
    }
}

答案 1 :(得分:0)

我完全不明白,但您似乎只需要为您的班级创建Proxy-class数据。