簡體   English   中英

有一個空的基類壞設計?

[英]Is having an empty base class bad design?

我需要一個我的DTO類的基類,它將用於我的通用接口。

但DTO課程沒有任何共同之處。 它們只是包含一些屬性的啞類。

public void GetGridData()
{

   IDataForGrid<DTOBase> aa;

   if(request == 1) aa = new CustomerGridData;
   if(request == 2) aa = new OrderGridData;

   var coll = aa.GetList();
}

public class CustomerGridData : IDataForGrid<CustomerDTO>
{
  ...
}

如果它們沒有任何共同之處,那么您要對從列表中檢索的實例進行什么操作?

在任何情況下,擁有基類意味着什么時候(好吧, 如果 )你確定他們確實需要在以后共同擁有的東西,你不必返回並重構(重新基礎)一切。 但是我認為在任何情況下我都會考慮使用接口而不是基類,因為它聽起來不太需要重用底層實現(因為它們沒有任何共同之處!)。 這取決於你認為他們最后可能會有什么共同點。

這不是一個糟糕的設計,雖然有點不常見。 可以這樣想想 - 雖然沒有任何缺點,但至少有兩個好處:

  • 基類充當接口的過濾器,因此您不能僅將任何對象傳遞給它們 - 只是您的DTO對象。 標記接口也可以。
  • 當他們最終得到一些共同的東西時,很容易將它添加到那里,你將不必重構所有東西。

.NET編碼指南說具有空基類或接口(也稱為“標簽”接口)確實是不好的風格。 首選樣式是使用屬性來注釋相同類的類。 還有一個FxCop規則來強制執行此約定。

但是,我有時(在極少數情況下)使用這個習慣用法,即使沒有常用功能,公共基類對於表示公共層次結構也很有用。 屬性不能用於此。

例如,在編程語言的解釋器中,有幾個方法返回一個特殊的基類Value ,即在該編程語言中具有值的東西。 基本上,這個值可以是一切從一個號碼到字符串(其是特殊的類,而不是System.Int32System.String )的復合物。 可以返回System.Object但這會使我的公共接口的輸入變弱。

好的,自我記錄的代碼從受限制的界面中獲利。

在java中,這稱為標記接口 該鏈接提供了一些關於標記接口,它們的用途和問題的良好背景。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM