2015-02-17 3 views
1

У меня проблема с дизайном в моем приложении. У меня есть класс с полями, имеющими какие-то проверки бизнес-логики. Этот класс создается и заполняется данными двумя способами. 1st: Потребителем класса: данные, отправленные с Front end и заселенные в объект и сохраненные в базе данных. 2nd: извлечение сохраненных данных. Во втором требовании у меня есть проблема. Я не хочу проверять данные, так как, возможно, сохраненные данные могут не соответствовать бизнес-логике из-за удаления или изменения существующих данных. Поэтому мне нужно заполнить объект сохраненными данными без проверки.Лучший способ реализовать проверку в классе?

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

class customer 
{ 
    private string customerCode; 
    private string customerName; 
    private List<Project> projectList; 
    //These property contains validation logic for data assigned to them. 
    public string CustomerCode{get; set;} 
    public string CustomerName{get; set;} 
    public List<Project> projectList{get;set;}; 

    public bool SetData(ref string message) 
    { 
     //Fetch From Database and set it to fields. 
     //Here to avoid validation I can use fields directly to skip validation. 
     this.CustomerCode = DataTable[CustomerCode]; 
     this.CustomerName = DataTable[CustomerName]; 

     //But here its not possbible to skip validation in Project class 
     foreach(projectID in DataTable[Projects]) 
     { 
      //**Problem Area**.... every project I add is validated according to business logic, but it may be possible that even after completion of a project users of the system want to list all the projects of that customer. 
      this.ProjectList.Add(new Project(projectID)); 
     } 
    } 
} 
+0

Прочитайте о блоке приложения для проверки: https://msdn.microsoft.com/en-us/library/ff648831.aspx – Samuel

+0

Thanx, но содержимое устарело, я просто не хочу включать какую-либо инфраструктуру, а не хочу для решения этой проблемы в моем дизайне –

+0

Это звучит так, будто вы не отделяете свои проблемы достаточно. У вас есть один объект, который гидратируется из вызова базы данных, поэтому он должен быть создан с помощью конструктора с вашими параметрами. Другая ситуация - это то, где вы могли бы частично увлажнить данные, поступающие от пользователя. Использование одного и того же типа для обеих ситуаций не кажется идеальным. – Tejs

ответ

0

Создать конкретный валидатор, который сидит за общим интерфейсом. Затем он может быть протестирован и потенциально заменен модулем для предоставления пользовательских сценариев проверки, если эта стратегия необходима.

Обеспечьте поддержку для проверки класса в целом и для каждого объекта.

2

Несколько более общий способ увидеть проблему состоит в том, чтобы объект имел две стратегии проверки. В этом случае вы говорите, что второй стратегией было бы просто игнорировать любую проверку. Однако в будущем вам может показаться полезным добавить некоторые незначительные или боковые проверки, отсюда и идея более общего подхода. Как предполагает Дэвис Осборн, лучший способ проверки объектов - создание специальных классов валидации. В общем, я бы создал два объекта проверки и проверил свой объект с соответствующим, в зависимости от контекста. Таким образом, ваши методы будут готовы использовать любую проверку, которую вы собираетесь включить в будущем, и только вам понадобится обновить, это будет валидация вашей конструкции.

+0

Да, ваша стратегия звучит так же, как я, наконец, решил смоделировать эту проблему. –

+0

Отлично. Валидация - это целая тема сама по себе. Я не хотел вдаваться в подробности, потому что ты сказал, что хочешь чего-то простого. Это хороший подход для начала работы. В конечном итоге наивные решения могут не оправдаться. Если это произойдет, вы, естественно, определите необходимость в более развернутой системе проверки. –

+0

Если вы можете поделиться каким-то изящным способом, это будет очень приятно вас .... Thanx –

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