2011-11-17 101 views
0

我在理解我將如何設計班級方面有點麻煩。C#+班級設計

我希望能夠在自定義字段旁邊獲得n個系統字段。

我想在接口上的簡單方法叫:

Collection<Field> GetFieldDefinitions();

內部這應該讓我需要在報表中顯示的所有字段。

的第二種方法將返回字段和它們的值也:

ICollection<Field> GetFieldDefinitionsWithValues(T src); 

T是其中對於每個字段中的信息將來自例如填充源如果我傳入公司,字段定義是否包含公司名稱,我將在公司表上進行查詢並檢索信息並將其添加到字段中。

public Class SystemFieldCompany 
{ 
    IDictionary<string,Field> list; 
    private readonly ValidationEngine _val; 
    public SystemFieldCompany(ValidationEngine val) 
    { 
     _val = val; 
     list = new Dictionary<string,Field>(); 
    } 

    public ICollection<Field> GetFields() 
    { 

    list.add("id",new Field{name = "id", value = "5"}); 
    list.add("nameofcompany",new Field{name = "nameofcompany", value = "super guys"});  
    return list.Values; 
    } 

    //pass in model object with values on it, set up fields, then pass back all fields 
    ICollection<Field> GetFieldsWithValues(T object); 
} 

上面這個類應該是一個具體類嗎? 例如var fields = new FieldClass()。GetFields();

還是應該使用組合?我怎樣才能通過一個接口來做到這一點?

+0

。關於最佳做事方式的問題通常不會在沒有儘可能多的關於情況的信息的情況下真正負責 – Grizzly

+0

@Grizzly:我已經重新寫過,希望這樣更好? – Haroon

回答

0

抽象類是你的後

public abstract class FieldBase 
{ 
ICollection<Field> _data=new List<Field>(); 

abstract void DoValidationOrSomething(); 

ICollection<Field> virtual GetFields() //perform validation internally - return back the object 
{ 
DoValidationOrSomething(); 
return _data; 
} 

T virtual UpdateFields(ICollection<Field> fields); //pass in model object with values on it, set 
{ 
_data.Clear(); 
_data.AddRange(fields); 
} 
up fields, then pass back all fields 
ICollection<Field> virtual GetFieldsWithValues(T object) 
{ 
return _data.Where(f=>f.Name=T); 
} 
} 

然後在具體

public class SomeTable:FieldBase 
{ 
public void DoValidationOrSomething() 
{ 
//per class validation here 
} 
} 
你可能想澄清/重新制定你的問題,因爲它真的不是那麼清楚究竟要達到什麼
+0

所以我應該實例化這個類? var s = new SomeTable(); ?我只有一次真的需要這些字段,所以我沒有理由實例化一個類。接口不會更好嗎? – Haroon

+0

接口只是一個類將實現一個或多個項目的合同。你不能實例化一個接口。 –