<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://mattonsoftware.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>mattonsoftware.com : Coding</title><link>http://mattonsoftware.com/archive/tags/Coding/default.aspx</link><description>Tags: Coding</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Writing Well-Factored Code</title><link>http://mattonsoftware.com/archive/2005/08/26/5.aspx</link><pubDate>Sat, 27 Aug 2005 12:24:00 GMT</pubDate><guid isPermaLink="false">6209d34a-f29a-4dc5-b4bf-33cf47346ec7:5</guid><dc:creator>matt</dc:creator><slash:comments>400</slash:comments><comments>http://mattonsoftware.com/comments/5.aspx</comments><wfw:commentRss>http://mattonsoftware.com/commentrss.aspx?PostID=5</wfw:commentRss><description>Coding is a design activity conducted at the lowest level. Similar to
analysis and design patterns aiding their respective phases
of the software development process, coding patterns exist to aid the
implementation phase.&lt;br&gt;&lt;br&gt;
Common coding patterns/techniques include:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Keep methods small, focussing on discrete tasks;&lt;/li&gt;&lt;li&gt;Early exit to reduce nesting;&lt;/li&gt;&lt;li&gt;Use private fields to reduce internal parameter passing;&lt;/li&gt;&lt;li&gt;Use regions as a categorisation mechanism, not to hide code; and&lt;br&gt;&lt;/li&gt;&lt;li&gt;Use internal commenting sparingly.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Keep Methods Small, Focussing on Discrete Tasks&lt;/b&gt;&lt;br&gt;&lt;br&gt;Implementing
methods of short length facilitates functional decomposition, making it
easier to debug errors and more clearly communicate the intent of code.
Consider the following example:&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;public class&lt;/font&gt; Employee&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public void&lt;/font&gt; DoWork()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;font color="#0000ff"&gt;this&lt;/font&gt;.ProcessOrders();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.TakeBreak();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.SweepFloor();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;font color="#000000"&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;Issues associated with this technique include:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Appropriate method length;&lt;/li&gt;&lt;li&gt;
Method naming;&lt;/li&gt;&lt;li&gt;
Focus on allocation of responsibilities;&lt;/li&gt;&lt;li&gt;
Reuse benefits; and&lt;/li&gt;&lt;li&gt;Perceived Performance Implications.&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;Appropriate Method Length&lt;/i&gt;&lt;br&gt;&lt;br&gt;Well-factored methods should be 5-10 lines in length. If methods exceed this length, then further factoring is required.&lt;br&gt;&lt;br&gt;
There will
be instances whereby decomposing methods to achieve this goal does not
add value, examples being methods that perform mapping functions or
rudimentary validation.&lt;br&gt;&lt;br&gt;&lt;i&gt;Method Naming&lt;/i&gt;&lt;br&gt;&lt;br&gt;
It is imperative to name methods that reflect the intent of the
behaviour of the method. Such names should also be kept as short as
possible. Appropriate naming of methods significantly reduces the need
for internal commenting. &lt;br&gt;&lt;br&gt;&lt;i&gt;Focus on Allocation of Responsibilities&lt;/i&gt;&lt;br&gt;&lt;br&gt;
Decomposing methods into smaller functions, or responsibilities, also
makes it easier to see which classes are responsible for what
behaviour. Reallocation of responsibilities often results from method
factoring. This is a key component of &lt;a href="http://www.wirfs-brock.com/Design.html"&gt;Responsibility-Driven Design&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;i&gt;
Reuse Benefits&lt;/i&gt;&lt;br&gt;&lt;br&gt;Factoring
methods into smaller functions makes it
easier for functionality to be reused/overridden/extended by
subclasses. This also avoids the common problem of large methods being
copied into subclasses to change a small part of the method,
leading to future maintenence issues.&lt;br&gt;&lt;br&gt;&lt;i&gt;Perceived Performance Implications&lt;/i&gt;&lt;br&gt;&lt;br&gt;
Factoring methods into smaller functions implies an increase
in the number of method invocations, which can lead to performance
concerns regarding the overall  increased cost of&amp;nbsp; method
invocation. For normal business
code, this low-level concern is unfounded. &lt;br&gt;&lt;br&gt;
If you are writing a core
function for a framework (similar to the core services provided by the
.NET Framework), then the cost of method invocation may become
important. To address this issue, profiling of the problem area should be conducted, then act accordingly.&lt;br&gt;&lt;br&gt;&lt;b&gt;Early Exit to Reduce Nesting&lt;/b&gt;&lt;br&gt;&lt;br&gt;Exiting early from methods reduces nesting and indentation. Consider the following example:&lt;br&gt;&lt;br&gt;Before:&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;public class&lt;/font&gt; Employee&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public double&lt;/font&gt; CalculateExpectedBonus(&lt;font color="#0000ff"&gt;double &lt;/font&gt;salary)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;double &lt;/font&gt;total = &lt;font color="#a52a2a"&gt;0&lt;/font&gt;;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;if&lt;/font&gt; ((salary != &lt;font color="#0000ff"&gt;null &lt;/font&gt;) &amp;amp;&amp;amp; (salary &amp;gt; &lt;font color="#a52a2a"&gt;0&lt;/font&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;if&lt;/font&gt; ((_name != &lt;font color="#0000ff"&gt;null&lt;/font&gt;) &amp;amp;&amp;amp; (_name.StartsWith(&lt;font color="#a52a2a"&gt;"FRED"&lt;/font&gt;)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; total = salary * (_weight / _height);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return &lt;/font&gt;total;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
After:&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;
public class&lt;/font&gt; Employee&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public double&lt;/font&gt; CalculateExpectedBonus(&lt;font color="#0000ff"&gt;double &lt;/font&gt;salary)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;if &lt;/font&gt;((salary == &lt;font color="#0000ff"&gt;null &lt;/font&gt;) || (salary == &lt;font color="#a52a2a"&gt;0&lt;/font&gt;))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#a52a2a"&gt;0&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if &lt;/font&gt;((_name == &lt;font color="#0000ff"&gt;null&lt;/font&gt;) || (!_name.StartsWith(&lt;font color="#a52a2a"&gt;"FRED"&lt;/font&gt;)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#a52a2a"&gt;0&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return &lt;/font&gt;salary * (_weight / _height);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;br&gt;&lt;br&gt;Implementing this technique commonly involves reversing logic and
reduces the need for temporary variables. Both of these factors are
realised in the above example. Guard clauses are the most common
application of this technique.&lt;br&gt;&lt;br&gt;
Methods that have a void return type can use a return; statement. &lt;br&gt;&lt;br&gt;
Note that the idea of early exit is somtimes disliked as methods
should have one point of exit for simplicitly reasons. This
concern is unfounded due to the increased complexity involved in
conforming to the
single exit principal, as demonstrated by the above (albeit contrived)
example. &lt;br&gt;&lt;br&gt;&lt;b&gt;Use Private Fields to Reduce Internal Parameter Passing&lt;/b&gt;&lt;br&gt;&lt;br&gt;
Private fields can be defined to reduce parameter
passing between methods internal to a class. Consider the
following example:&lt;br&gt;&lt;br&gt;
Before:&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;
public class&lt;/font&gt; Order&lt;br&gt;
{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;font color="#0000ff"&gt;public void&lt;/font&gt; Process()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ArrayList orderItems = &lt;font color="#0000ff"&gt;new &lt;/font&gt;ArrayList();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.RetrieveOrderItems(orderItems);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.ProcessOrderItems(orderItems);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private void&lt;/font&gt; RetrieveOrderItems(ArrayList orderItems)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlDataReader dataReader = command.ExecuteReader();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;while &lt;/font&gt;(dataReader.Read())&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OrderItem orderItem = &lt;font color="#0000ff"&gt;new &lt;/font&gt;OrderItem(dataReader);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; orderItems.Add(orderItem);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private void&lt;/font&gt; ProcessOrderItems(ArrayList orderItems)&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;foreach&lt;/font&gt;(OrderItem item &lt;font color="#0000ff"&gt;in &lt;/font&gt;orderItems)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OrderItemDispatcher.Instance.Send(item);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
After:&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;
public class&lt;/font&gt; Order&lt;br&gt;

{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private&lt;/font&gt; ArrayList _orderItems;&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;public &lt;/font&gt;Order()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _orderItems = &lt;font color="#0000ff"&gt;new &lt;/font&gt;ArrayList();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;font color="#0000ff"&gt;public void&lt;/font&gt; Process()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.RetrieveOrderItems();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.ProcessOrderItems();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private void&lt;/font&gt; RetrieveOrderItems()&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlDataReader dataReader = command.ExecuteReader();&lt;br&gt;&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;while &lt;/font&gt;(dataReader.Read())&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OrderItem orderItem = &lt;font color="#0000ff"&gt;new &lt;/font&gt;OrderItem(dataReader);&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _orderItems.Add(orderItem);&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;private void&lt;/font&gt; ProcessOrderItems()&lt;br&gt;


&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;foreach&lt;/font&gt;(OrderItem item &lt;font color="#0000ff"&gt;in &lt;/font&gt;_orderItems)&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OrderItemDispatcher.Instance.Send(item);&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;

}&lt;br&gt;&lt;br&gt;As
the number of parameters passed between methods increases, so to
does the complexity of the code. The use of private fields alleviates
this issue.&lt;br&gt;&lt;br&gt;
Note that this technique is sometimes disliked as it becomes more
difficult to identify where a given private field is referenced and
modified, leading to hidden dependencies between methods. Adoption of this
technique is a trade-off for simplicity. Most modern IDEs have
reference identification facilities, which further alleviate this
concern.&lt;br&gt;&lt;br&gt;&lt;b&gt;Use Regions as a Categorisation Mechansism, Not to Hide Code&lt;/b&gt;&lt;br&gt;&lt;br&gt;Regions
are intended to be used to categorise methods, not to hide code.
If&amp;nbsp; the latter is evident, then the code requires refactoring.
Common uses of regions include categorisation of Constructors, Private
Fields, Private Methods and Public Methods, as demonstrated in my
earlier article &lt;a href="http://mattonsoftware.com/archive/2005/07/25/4.aspx"&gt;Implementing the State Pattern in C#&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Generated code is an exception to this rule.&lt;br&gt;&lt;br&gt;&lt;b&gt;Use Internal Commenting Sparingly&lt;/b&gt;&lt;br&gt;&lt;br&gt;Internal
comments should be used sparingly, and only where the intent of a
statement is not obvious. Alternatively, the preferred approach is to
factor the statement into a method with an appropriate name
indicating the
intent.&lt;br&gt;&lt;br&gt;Internal comments that state the obvious do not add value, and add 'noise' to the surrounding code. Consider the following
example:&lt;br&gt;&lt;br&gt;&lt;font color="#008000"&gt;// Add the order item to the order&lt;/font&gt;&lt;br&gt;
order.Add(orderItem);&lt;br&gt;&lt;br&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br&gt;&lt;br&gt;
Coding patterns can be applied during the initial development phase and
as part of maintenence activities, and ultimately deter the onset of
software entropy (a.k.a. &lt;a href="http://www.laputan.org/mud/mud.html"&gt;Big Ball of Mud&lt;/a&gt;
software architectures). The adoption of such techniques results in
clearer communication that simplifies the maintainability and extensibility of code.&lt;br&gt;&lt;img src="http://mattonsoftware.com/aggbug.aspx?PostID=5" width="1" height="1"&gt;</description><category domain="http://mattonsoftware.com/archive/tags/Coding/default.aspx">Coding</category></item></channel></rss>