2010-04-01 3 views
0

В приложении ETL я работаю, у нас есть три основных процесса:Как ограничить доступ к данным класса на основе состояния?

  1. Validate и разбора XML-файл информации о клиенте от третьей стороны
  2. значения Совпадение полученных в файле со значениями в нашей системе
  3. данные нагрузки клиентов в нашей системе

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

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

Моей первой мысль для этого нужно было добавить пару интерфейсов поверх клиента, которые будут раскрывать только свойства и поведение текущего состояния, а затем обрабатывать только эти интерфейсы. Проблема с этим подходом заключается в том, что, похоже, нет хорошего способа переходить с ICustomerWithNoMatchedValues ​​на ICustomerWithMatchedValues, не делая прямых приведений и т. Д. (Или, по крайней мере, я не могу найти его).

Я не могу быть первым, кто столкнулся с этим, как вы обычно подходите к этому?

В качестве последнего предостережения, я хотел бы, чтобы это решение, чтобы играть хорошо с FluentNHibernate :)

Спасибо заранее ...

ответ

0

Добавить класс, который наследует от клиента под названием MatchedCustomer (например). Затем шаг №2 становится процессом продвижения Клиента к Согласованному клиенту. Вам все равно нужно написать код, чтобы сделать это; Обычно это делается в конструкторе:

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

Я не понял, совершенно ясно, но, казалось, что вам нужно просто создать Proxy-class для вашего класса с данными.

Смежные вопросы