Почему ORM считается хорошим, а «select *» - плохим? - PullRequest
35 голосов
/ 15 ноября 2008

Разве ORM обычно не включает в себя что-то вроде выбора *?

Если у меня есть таблица MyThing со столбцами A, B, C, D и т. Д., То обычно будет объект MyThing со свойствами A, B, C, D.

Было бы злом, если бы этот объект был создан не полностью с помощью оператора select, который выглядел следующим образом, получая только A, B, а не C, D:

выберите A, B из MyThing / * не получите C и D, потому что они нам не нужны * /

но было бы также плохо всегда делать это:

выберите A, B, C, D / * получить все столбцы, чтобы мы могли полностью создать экземпляр объекта MyThing * /

Предполагает ли ORM, что доступ к базе данных является таким быстрым, что вам не нужно об этом беспокоиться, и вы всегда можете выбрать все столбцы?

Или у вас есть разные объекты MyThing, по одному для каждой комбинации столбцов, которые могут оказаться в операторе select?

РЕДАКТИРОВАТЬ: Прежде чем ответить на вопрос, пожалуйста, прочитайте ответы Николаса Пиасеки и Билла Карвина. Наверное, я плохо задал вопрос, потому что многие его неправильно поняли, но Николай понял это на 100%. Как и он, меня интересуют другие ответы.


РЕДАКТИРОВАТЬ # 2: Ссылки, связанные с этим вопросом:

Зачем нам нужны объекты сущностей?

http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx, особенно раздел «Проблема частичных объектов и парадокс времени загрузки»

http://groups.google.com/group/comp.object/browse_thread/thread/853fca22ded31c00/99f41d57f195f48b?

http://www.martinfowler.com/bliki/AnemicDomainModel.html

http://database -programmer.blogspot.com / 2008/06 / почему-я-ду-не-потребительная orm.html

Ответы [ 12 ]

0 голосов
/ 15 ноября 2008

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

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

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

0 голосов
/ 15 ноября 2008

SELECT * не плохо. Вы спрашивали, кто бы это ни считал плохим, "почему?"

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