解除依賴就是鬆耦合,鬆耦合就一定好嗎?當然不是程式的耦合度與內聚度要放在一起說,當然,對於領域層來說,適當的減少類與類之間的依賴是很有必要的,看下面我的這段程式碼
一個例子,一個訂單系統,它根據國家有不同的下單方法,對於低層(DATA層)是一樣的,但對於領域層,也叫業務邏輯層,它是不一樣的,可能小日本下單打5拍,中國人下單不打折,我也是可以理解的,因為中國石油在對於中國人上是很吝嗇的,而對於小日本則慷慨解囊。不多說了,看程式碼:
/// <summary>
/// 訂單實體
/// </summary>
class Order
{
}
#region 傳統作法,無有考慮約束
/// <summary>
/// 針對美國人的訂單
/// </summary>
class OrderUSA
{
public void Insert(Order order) { }
}
/// <summary>
/// 什對日本人的訂單
/// </summary>
class OrderJPN
{
public void Insert(Order order) { }
}
class OrderService
{
OrderUSA orderAction1 = new OrderUSA();
public void Insert(Order order)
{
orderAction1.Insert(order);
}
}
#endregion
#region 解除具體依賴後的程式
/// <summary>
/// 和訂單操作相關的介面
/// </summary>
public interface IOrderAction
{
void Insert(Order order);
void Delete(Order order);
}
/// <summary>
/// 針對中國人的訂單
/// </summary>
public class OrderChina : IOrderAction
{
public void Insert(Order order)
{
throw new NotImplementedException();
}
public void Delete(Order order)
{
throw new NotImplementedException();
}
}
public class OrderService2
{
private IOrderAction iOrderInsert;
/// <summary>
/// 根據所傳遞的介面型別的引數來確定使用哪種物件
/// </summary>
/// <param name="_iOrderInsert"></param>
public OrderService2(IOrderAction _iOrderInsert)
{
this.iOrderInsert = _iOrderInsert;
}
public void InsertOrder(Order order)
{
this.iOrderInsert.Insert(order);
}
public void DeleteOrder(Order order)
{
this.iOrderInsert.Delete(order);
}
}
#endregion