I am having a bit of trouble understanding how I will design a class.
I want to be able to get n amount of System fields out onto a report alongside custom fields.
I want a simple method on an interface called:
ICollection<Field> GetFieldDefinitions();
Internally this should get all the fields that I need to show on the report.
A second method will return field and their values too:
ICollection<Field> GetFieldDefinitionsWithValues(T src);
T is the source of where the information for each field will be populated from, e.g. if I pass in Company, the field definition if it contains CompanyName, I will do a lookup on the Company table and retrieve the info and add it to the field.
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);
}
Should this class above be a concrete class?
e.g. var fields = new FieldClass().GetFields();
or should I use composition? How can I do this via an interface?
Abstract Class is what your after
then in your concrete