2015-06-11 3 views
0

Прежде чем вы начнете кричать «переключитесь!», На мгновение голые со мной.Есть ли структура данных или шаблон дизайна или структура кода, чтобы избежать нескольких операторов if?

Так что у меня есть веб-приложение [forms], в котором используется Reportviewer. В коде позади, у меня есть код, который выглядит следующим образом:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    If Not Page.IsPostBack Then 

     Dim u As New UriTypeConverter 

     Dim vSDate, vEDate As Date 
     vSDate = Session("StartDate") 
     vEDate = Session("EndDate") 

     If Session("ReportName") = "Report1" Then 
      Dim reportparameters(1) As ReportParameter 
      reportparameters(0) = New ReportParameter("StartDate", vSDate) 
      reportparameters(1) = New ReportParameter("EndDate", vEDate) 
      ReportViewer1.ServerReport.ReportPath = "/SSRS01/Report1" 
      ReportViewer1.ServerReport.SetParameters(reportparameters) 
     End If 

     If Session("ReportName") = "Report2" Then 
      Dim reportparameters(1) As ReportParameter 
      reportparameters(0) = New ReportParameter("StartDate", vSDate) 
      reportparameters(1) = New ReportParameter("EndDate", vEDate) 
      reportparameters(2) = New ReportParameter("Product", Session("ProductName")) 
      ReportViewer1.ServerReport.ReportPath = "/SSRS01/Report2" 
      ReportViewer1.ServerReport.SetParameters(reportparameters) 
     End If 

И есть около 12, если заявления, некоторые имеющие различное число параметров, чем другие. Таким образом, в отличие от необходимости писать больше операторов if с различными параметрами. Интересно, есть ли структура, техника, шаблон, который позволил бы мне обойти, писать инструкции для каждого нового отчета, который я создаю. И мне все равно, что нужно. База данных, новая библиотека, изучают 5 новых шаблонов GoF. Без разницы. Только требование/ограничение состоит в том, что это [очевидно] приложение .NET.

Если не ясно, пожалуйста, дайте мне знать.

+2

бы словарь для действия? Я не знаком с синтаксисом VB.NET, чтобы показать вам пример, но в C# он будет выглядеть как 'IDictionary >', с lambdas, соответствующим каждому оператору 'If'. – dasblinkenlight

+0

Эти утверждения "if" (или их эквиваленты) будут существовать. * И это нормально. * Когда они существуют более одного раза, это когда вы отступаете и рефакторируете и позволяете создать шаблон. Итак, с учетом сказанного, этот фрагмент * один * или * один из многих? * –

+0

@dasblinkenlight - Я не знаком с структурой данных Action, особенно в Webforms. – dotnetN00b

ответ

1

Лучше всего заменить несколько инструкций с одним или несколькими операторами с шаблоном стратегии. Хорошее объяснение о том, как можно найти here

еще один хороший пример вы найдете в этом обсуждении на StackOverflow - это на Java, но логика очень ясна и может быть перенесена в любом языке .NET Converting many 'if else' statements to a cleaner approach