C # + Class Design - PullRequest
       33

C # + Class Design

0 голосов
/ 17 ноября 2011

У меня возникли некоторые затруднения с пониманием того, как я буду проектировать класс.

Я хочу иметь возможность вывести n значений полей System в отчет вместе с настраиваемыми полями.

Мне нужен простой метод интерфейса:

I Collection<Field> GetFieldDefinitions();

Внутренне это должно получить все поля, которые мне нужно показать в отчете.

СекундаМетод также будет возвращать поле и его значения:

ICollection<Field> GetFieldDefinitionsWithValues(T src);

T - это источник, из которого будет заполняться информация для каждого поля, например, если я передам Company, определение поля, если оно содержит CompanyName, Iвыполнит поиск в таблице Company, извлечет информацию и добавит ее в поле.

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 ();

или я должен использовать композицию?Как я могу сделать это через интерфейс?

1 Ответ

0 голосов
/ 17 ноября 2011

Абстрактный класс - это то, что вам нужно после

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
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...