WEB开发网
开发学院WEB开发ASP.NET 如何正确地使用#region指令 阅读

如何正确地使用#region指令

 2010-10-09 08:16:17 来源:WEB开发网   
核心提示: 上面看起来就清楚很多,因为我们降低了之前的DoSomething函数的复杂度,如何正确地使用#region指令(2),两个函数可以分开测试,确保没有逻辑错误,才能控制代码的复杂度,当你做到这些的时候,小段总结1: #region 不适合在大方法中使用,当你在一个方法中使用#region 的时候

上面看起来就清楚很多,因为我们降低了之前的DoSomething函数的复杂度。两个函数可以分开测试,确保没有逻辑错误。

小段总结1:  #region 不适合在大方法中使用,当你在一个方法中使用#region 的时候,停下来想想你刚刚写了什么代码?大多数时候,你可以将这些代码段独立成一个函数。

看看下面这段非常漂亮的代码:

#region Get Customer
public void GetCustomer()
{
 // code to get the customer
}
#endregion
#region Save Customer
public void SaveCustomer()
{
 // code to save the customer
}
#endregion

将它折叠之后,变成下面这样:

[Get Customer]
[Save Customer]

这样做很容易阅读吗?这样做的目的是什么,我不明白?代码折叠就会变得更好?我觉得这样做只会让代码更难以阅读,因为你每次要看region中的代码,你都要展开一次。

小段总结2:不要因为你能,你就使用#region 。

再看下面这个例子

public class PriceCalculator
{
 public decimal CalculatePrice()
 {
  decimal price = 100m;
  decimal discount = CalculateDiscount();
  return price * (1m - discount));
 }
 #region Discount Calculation
 private void CalculateDiscount()
 {
  decimal discount = 0m;
  if(CanApplyDiscount())
   discount = 0.05m;
  return discount;
 }
 private void CanApplyDiscount()
 {
  // some logic, other method calls
 }
 // some other discount calculation methods
 ...
 #endregion
}

如果你将这个例子和本文中的第一个例子做下比较,你可能会看到它们的共同点。他们是相同的,不过一个是在类中,一个是在函数中,层级不同而已。这里在提一个原则:单一职责原则,一个类应该只有一个职责。看上面的类,你可以很容易看出它有两个职责:价格计算和折扣计算。折扣计算的方法被放到一个#region中。同样,可以将它们提取出来做为一个新类。

小段总结3:可以将一组相关的函数提取到一个职责单一的新类中。

那我们到底怎么使用 #region 呢。将东西用它来分组,它是非常有用的。在我写的类中或多或少有几个#region,用来对类中不同的结构进行分组。比如: fields, properties, methods, events, types等。如果你打开我写的类文件,你会看到结构如下:

public class SomeClass
{
 [Events]
 [Fields]
 [Properties]
 [Methods]
}

总的来说:我将#region看成能控制阅读源代码的复杂度的一种方式。因为你可以将一些相关的代码放在一个区域(#region)里面。但是,这不是你随便就创建新方法或者新类的借口。其实Region并不能消除复杂度,它只是在你阅读代码的时候,隐藏了部分代码。你必须通过写出小巧,清晰,重点突出的方法和类,才能控制代码的复杂度。当你做到这些的时候,你甚至会发现#region是不必要的。

本文翻译:http://thedevs.com/2010/08/about-region-preprocessor-directive/

作者:朱祁林

出处:http://zhuqil.cnblogs.com 

上一页  1 2 

Tags:如何 正确 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接