2010-09-12 58 views
1

考慮這個例子:集裝箱船的問題

namespace ValueObjects 
{ 
    public class User 
    { 
    public string UserCode { get; set; } 
    public string UserName { get; set; } 
    } 

    public class Company 
    { 
    public string CompanyCode { get; set; } 
    } 
} 

現在,我想User類有一個企業編碼屬性..第一個顯而易見的解決方案是 只是簡單的把一個企業編碼性能上的用戶類

public class User 
{ 
    public string UserCode { get; set; } 
    public string UserName { get; set; } 
    public string CompanyCode { get; set; } 
} 

現在這裏的問題是冗餘的,因爲已經有一個屬性CompanyCode公司類,是否有任何方式,用戶將能夠使用公司的CompanyCode屬性沒有繼承公司類(這裏的問題是C#doesnt分配w類的多重繼承)或使用ICompany接口(但接口在Value對象中是一種痛苦)。 即時通訊考慮只包含公司類到用戶類,但我只會使用它的Propery CompanyCode。

這樣的事情..

public class User 
    { 
    public string UserCode { get; set; } 
    public string UserName { get; set; } 
    private Company company; 
    public string CompanyCode { get { company.CompanyCode } set {company.CompanyCode } 

    } 

但隨後,這是沒有什麼區別,只是增加一個字符串屬性企業編碼.. 需要你的意見傢伙。在此先感謝..

回答

2

您的解決方案是有效的。你想遏制;一個「有一個」關係而不是一個「是一個」關係(繼承)。另一種選擇是

public Company UserCompany; 

如果未來添加它們,將允許User對象訪問Company對象上的其他公共屬性。

+0

問題是,當我使公司類屬性的用戶 - 上市公司UserCompany {獲取;組; } - 並將用戶放入一個集合(例如集合用戶)並將其綁定到Gridview。 Gridview的Boundfield不會讓你訪問包含的類的屬性... – CSharpNoob 2010-09-12 14:03:27

+0

@CsharpNoob確實,objectdatasource/asp.net簡單的數據綁定不能走低谷複雜的類。看看這裏:http://www.codeproject.com/KB/database/CustomBindableObject.aspx – 2010-09-12 14:13:53

+0

有沒有解決這個問題的方法?我正在使用DTO和它的討厭,在我的價值對象中看到太多的CompanyCode屬性。 – CSharpNoob 2010-09-12 14:44:54