Здравствуйте!
Есть такой вопрос, даже и не знаю как сформулировать строку поиска в гугл, поэтомц решил спросить здесь.
Допустим есть класс, который представляет некую сущность из БД. Полей у класса очень много. Вопрос заключается в том, как поступить, когда требуется загрузить только определённые поля из БД? Для примера возьмём такой класс:
class Person
{
int id;
string name;
string field1;
...
string fieldN;
}
Для одних задач нужны все поля, для других достаточно двух-трёх. Если для большого количества объектов типа Person загружать все поля в задаче, где требуется только одно поле, то производительность сильно падает, да и не логично это. Вопрос состоит в том, как сделать так, чтобы можно было загрузить только определённые поля. У меня есть только один вариант. Примерно такой:
(псевдокод)
class Person
{
public Person(string[] filedsToLoad)
{
foreach(string field in fields)
{
switch (field)
{
case "id":
this.Id = this.loadId();
break;
case "name":
this.Name = this.loadName();
break;
//loadOtherFields
}
}
}
}
Но он мне не нравится, потому что в этом случае будет происходить обращение к базе за каждым полем. Это, конечно, не все поля загружать, но получается очень много обращений к базе. Скорее всего, тоже не очень хорошо. Хочется сделать один запрос.
Ещё вариант — иметь разные классы Person под разные задачи, но это совсем не то.
Может быть стоит воспользоваться конструктором sql-запросов? Если да, то какой посоветуете? Если нет, то как можно ещё этого добиться?
Спасибо!