2012-10-12 46 views
0

我已經在幾個項目上工作,我們非常嚴格地編寫接口,這些接口暴露了接口屬性的很少或沒有可變性。然後,我發現自己編寫的類能夠以任何方式提供任意變異對象的能力並返回它。這是DTO還是......的一個例子?

下面是一個例子:

public interface IOlapCube 
{ 
    String CubeName {get;} 
    IEnumerable<IDimension> Dimensions{get;} 
    IEnumerable<IMeasure> Measures {get;} 
    IEnumerable<IMeasureGroup> MeasureGroups {get;} 
} 

public class OlapCubeRW : IOlapCube 
{ 
    public String CubeName {get;set;} 
    private List<IDimension> _dimensionList; 
    public IList<IDimension> Dimensions{get{return this._dimensionList;}} 
    IEnumerable<IDimension> IOlapCube.Dimensions{get{return this.Dimensions;}} 

    //... similar for the rest 
} 

這是一個DTO?我應該在哪裏定義這個類?它應該與IOlap立方體在同一個組件中嗎?如果是這樣,它應該在同一個名稱空間嗎?我發現使用IOlapCube的幾個項目可以從RW類中受益,而且我討厭重新實現每個項目中相同的內部類。這些類對於單元測試也很有用,我可以創建任意派生類並通過接口引用它。例如,對於每個接口都有一個關聯的IEqualityComparer,單元測試比較器相當簡單,當我可以構造任意形狀的兩個對象並進行比較時。

這些也通常用於編輯實體。我可以將一個實體傳遞給一個表單,並將其複製到這些對象中的一箇中。然後表單可以任意改變對象,我可以使用外部類來驗證它,比如bool OlapCubeValidator.IsValid(IOlapCube cubeToValidate);並在驗證通過時將更改複製回實體(也許在此RW類上的實體代理現在確保有效)。

把它們放在與IOlap相同的位置感覺不對,因爲它看起來客戶端不應該旋轉其中的一個並使用它,但是如果我可以在外部執行驗證,我認爲它不會傷害任何東西。這個特定的項目是公司內部的,所以我們不必擔心惡意,只是懶惰的編程。如果這是一個公開可用的庫,它會改變什麼嗎?

EDIT 要注意,此接口層次結構(IOLAPCube上> IDimension,IMeasureGroup,IMeasure> IHierarchy> ILevel> IMember)公開任何方法或其他功能是很重要的;他們只提供數據(如姓名,子對象,IsVisible,...)。有像IQueryable(T)ExecuteQuery(T)(ICriteria(T)標準)的方法。驗證和相等定義是外部接口的一部分(例如,IEqualityComparer)。

+0

[是/否約一個例子問題是不適合這個網站(http://meta.stackoverflow.com/questions/258630/where-is-the-line-for-yes-no-questions )。除原始提問者外,對這類問題的答案很少有用。這個網站的目的是創建一個有用的高質量問題庫和答案。不要問「這是_X_的一個例子」,而是詢問「什麼是_X_」。 – Raedwald

回答

0

只要DTO用於保存數據(無業務邏輯),如果將接口保留在相同的程序集或不同的程序集中,則無關緊要。

相關問題