Лучшая практика при хранении / извлечении данных из базы данных внутри класса - PullRequest
0 голосов
/ 26 февраля 2012

Я хотел бы знать, каков наилучший дизайн кода при хранении и извлечении данных из базы данных при работе с объектами и классами.

Я мог бы сделать это двумя способами.

В конструкторе класса я запрашиваю базу данных и сохраняю всю информацию в переменных экземпляра внутри класса и извлекаю их с помощью методов получения / установки. Таким образом, я всегда могу получить любую информацию, какую захочу, но во многих случаях не потребуется постоянно вся информация.

public class Group {
    public int GroupID { get; private set; }
    public string Name { get; private set; }
    public Group(int groupID)
    {
        this.GroupID = groupID;
        this.Name = // retrieve data from database
    }
    public string getName()
    {
        // this is just an example method, I know I can retrieve the name from the getter :)
        return Name;
    }
}

Другой способ - создать несколько методов и передать groupID в качестве параметра, а затем запросить в базе данных ту конкретную информацию, которая мне нужна. Это может привести к большему количеству запросов, но я получу только ту информацию, которая мне нужна.

public class Group {    
    public Group()
    {
    }
    public string getName(int groupID)
    {
        // query database for the name based on groupID
        return name;
    }
}

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

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

Ленивая загрузка по сравнению с ранней загрузкой, к которой все сводится, лучше всего определяется по использованию.

В основном это означает связанные объекты - например, если вы имеете дело с отдельным адресом, разделениечитать для города, читать для государства было бы сумасшествием;OTOH при возврате списка сотрудников компании, читающих их адресную информацию, вероятно, является пустой тратой времени и памяти.

Кроме того, это не взаимоисключающие опции - вы можете иметь конструктор, который вызывает базы данных, иконструктор, который использует предоставленные данные.

1 голос
/ 26 февраля 2012

Вы не хотите выполнять тяжелую работу с БД в конструкторе. Тяжелая работа должна быть выполнена методами.

Вы также не хотите обязательно связывать работу БД с классом сущностей, который содержит данные. Что если вы хотите, чтобы метод возвратил два из этих объектов из базы данных? Например, GetGroups () - вы даже не можете создать его, не выполняя работу с БД. Для чего-то, что возвращает множественное число, хранение и поиск отделяются от класса сущности.

Вместо этого отделите работу вашей БД от объектов-сущностей. Одним из вариантов является то, что вы можете использовать dataaccesslayer с такими методами, как GetFoo или GetFoos и т. Д., Которые запрашивают базу данных, заполняют объекты и возвращают их.

Если вы используете ORM, см .:

https://stackoverflow.com/questions/3505/what-are-your-favorite-net-object-relational-mappers-orm

0 голосов
/ 26 февраля 2012

Если это реляционная база данных, лучшим способом было бы сделать это с ORM (объектно-реляционное отображение).Смотрите здесь список ORM-картографов:

https://en.wikipedia.org/wiki/List_of_object-relational_mapping_software

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...