tag:blogger.com,1999:blog-36478094774518155842024-03-13T14:41:51.949-04:00Thingsp=nphttp://www.blogger.com/profile/00308871743149350726noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-3647809477451815584.post-1815085903242648512009-04-26T14:35:00.001-04:002009-04-26T20:48:49.643-04:00If Else is evil<p class="MsoNormal" style="text-indent:.5in">Can you predict the future when you write a new code, or maintaining an old one?</p> <p class="MsoNormal">I strongly believe that the answer is yes.</p> <p class="MsoNormal">Where to start? Let’s examine one very trivial code segment that is written millions times per day all around the world. The example is written in c# but could be done in any other language. Our current code (extracted from an imaginary existing enterprise application) looks like:</p> <p class="MsoNormal"><span class="Apple-style-span" style="color: rgb(0, 153, 0);">// code 1</span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">static</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> <span style="color:blue;">void</span> <st1:place st="on">Main</st1:place>()<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;color:green;">//let's have currently two choices <o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;color:green;">//1 - open //0 - close<span style="mso-tab-count: 3"> </span><o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">int</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> autotencation = 1;<span class="Apple-style-span" style="color: rgb(0, 153, 0);">//imagine it is coming as a value at run time. </span><o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">if</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> (autotencation == 1)<o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:2"> </span>System.<span style="color:#2B91AF;">Console</span>.WriteLine(<span style="color:#A31515;">"Open"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">}<span style="mso-tab-count:3"> </span><span style="mso-tab-count:3"> </span><o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">else<o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="margin-left:.5in;text-indent:.5in;mso-layout-grid-align: none;text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">System.<span style="color:#2B91AF;">Console</span>.WriteLine(<span style="color:#A31515;">"Close"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="text-indent:.5in;mso-layout-grid-align:none; text-autospace:none"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">}<span style="mso-tab-count:3"> </span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">}<span style="mso-tab-count:1"> </span><o:p></o:p></span></p> <p class="MsoNormal"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">One year later the product line intruduced a new autotecation value 2 that is to be added to the system.The outcome for using 2 is Wait. Some developer went and added it in the core dll somewhere in the enterprise system. Our code has no idea of it.Let’s see what happen:<o:p></o:p></span></p> <p class="MsoNormal"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;"><span class="Apple-style-span" style="color: rgb(0, 153, 0);">//code 2</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:green;">//let's have currently three choices <o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:green;">//1 - open //0 – close//2 - wait<span style="mso-tab-count:3"> </span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">int</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> autotencation = 2;<span class="Apple-style-span" style="color: rgb(0, 153, 0);">//imagine it is coming as a value at run time. </span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">if</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> (autotencation == 1)<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:1"> </span>System.<span style="color:#2B91AF;">Console</span>.WriteLine(<span style="color:#A31515;">"Open"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">}<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">else<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:1"> </span>System.<span style="color:#2B91AF;">Console</span>.WriteLine(<span style="color:#A31515;">"Close"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">}<span style="mso-tab-count:3"> </span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:1"> </span>What just happened is that if some user executes autotecation code<span style="mso-spacerun:yes"> </span>from above, they will get Close part executed.<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">This automatically triggers all kinds of events that may be very destructive to the existing system(close acount for example).<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">A new software Engineer is assign to fix it and he does this:<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span class="Apple-style-span" style="color: rgb(0, 153, 0);">//code 3</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:green;">//let's have currently three choices <o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:green;">//1 - open </span><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:1"> </span><span style="color:green;">//0 - close<span style="mso-tab-count:1"> </span>//2 - wait<o:p></o:p></span></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">int</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> autotencation = 3;<span class="Apple-style-span" style="color: rgb(0, 153, 0);">//imagine it is coming as value at run time.</span><o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">if</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> (autotencation == 1)<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:1"> </span>System.<span style="color:#2B91AF;">Console</span>.WriteLine(<span style="color:#A31515;">"Open"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">}<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">else</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> <span style="color:blue;">if</span>(autotencation == 0)<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:1"> </span>System.<span style="color:#2B91AF;">Console</span>.WriteLine(<span style="color:#A31515;">"Close"</span>);<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">}<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;color:blue;">else</span><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"> <span style="color:blue;">if</span>(autotencation == 2)<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;">{<o:p></o:p></span></p> <p class="MsoNormal" style="mso-layout-grid-align:none;text-autospace:none"><span style="Courier New";mso-no-proof:yesfont-family:";font-size:9.0pt;"><span style="mso-tab-count:1"> </span>System.<span style="color:#2B91AF;">Console</span>.WriteLine(<span style="color:#A31515;">"Wait"</span>);<o:p></o:p></span></p> <p class="MsoNormal"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">}<o:p></o:p></span></p> <p class="MsoNormal"><span style="Courier New"; mso-no-proof:yesfont-family:";font-size:9.0pt;">Instead Close part to be executed (example code2) we executed nothing. Nothing sometimes is great.</span></p>p=nphttp://www.blogger.com/profile/00308871743149350726noreply@blogger.com0tag:blogger.com,1999:blog-3647809477451815584.post-63714095878481114812009-01-16T16:42:00.000-05:002009-04-26T14:48:45.103-04:00removing xml rootSystem.Xml.XmlDocument xmlDocument = new XmlDocument( );<br /> string dataSectionMainLoan = string.Empty;<br /> dataSectionMainLoan = @"<r></r>";<br /> xmlDocument.LoadXml( dataSectionMainLoan );<br /> System.Xml.XmlElement root = xmlDocument.DocumentElement;<br />....load the xmlDocument here<br />//remove the artificial root<br /> xmlDocument.ReplaceChild( xmlDocument.SelectSingleNode( "R/NextNode" ), xmlDocument.DocumentElement );p=nphttp://www.blogger.com/profile/00308871743149350726noreply@blogger.com0