2011-11-17 77 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

接口只是一个类将实现一个或多个项目的合同。你不能实例化一个接口。 –