Я понимаю, что в интересах эффективности, когда вы запрашиваете базу данных, вы должны возвращать только те столбцы, которые вам нужны, и не более.
Но, учитывая, что мне нравится использовать объекты для хранения результата запроса, это ставит меня перед дилеммой:
Если я получаю только те значения столбцов, которые мне нужны в конкретной ситуации, я могу заполнить объект только частично. Я чувствую, что это оставляет мой объект в неидеальном состоянии, когда доступны только некоторые свойства и методы. Позже, если возникнет ситуация, когда я захочу повторно использовать объект, но обнаружу, что для новой ситуации требуется другой, но перекрывающийся набор столбцов, я сталкиваюсь с выбором.
Должен ли я повторно использовать существующий SQL и добавить в список выбранных столбцов дополнительные поля, необходимые для новой ситуации, чтобы одна и та же логика запроса и сопоставления объектов могла быть повторно использована для обоих? Или я должен создать другой метод, который приводит к выполнению слегка отличающегося SQL, что приводит к заполнению только тех свойств объекта, которые были возвращены во втором запросе?
Я сильно подозреваю, что нет волшебного ответа, и что ответ действительно "зависит" от ситуации, но я думаю, что ищу общий совет. В общем, мой подход состоял в том, чтобы либо возвращать все столбцы из запрашиваемой таблицы, либо добавлять в запрос дополнительные столбцы, когда они необходимы, но повторно использовать тот же SQL (и код отображения), пока производительность не станет проблемой. В целом, я считаю, что, если вы не извлекаете большое количество строк - а я обычно это не делаю - что затраты на добавление дополнительных столбцов к выводу не оказывают заметного влияния на производительность и что экономия времени разработки и упрощение API, которые в результате являются хорошим компромиссом.
Но как вы справляетесь с такой ситуацией, когда производительность становится фактором? Вы создаете методы, такие как
Employees.GetPersonalInfo
Employees.GetLittleMorePersonlInfoButMinusSalary
и т. д. и т. д.
Или вы каким-то образом заканчиваете тем, что создали API, в котором пользователь вашего API должен указать, какие столбцы / свойства он хочет заполнить / вернуть, тем самым увеличивая сложность и делая ваш API менее дружественным / простым в использовании?
Допустим, вы хотите получить информацию о сотруднике. Сколько объектов обычно задействовано?
1) объект Сотрудник
2) Объект коллекции Employees, содержащий один объект Employee для каждой возвращаемой строки Employee.
3) Объект, такой как EmployeeQueries, который возвращает, содержит методы, такие как «GetHiredThisWeek», который возвращает коллекцию Employees из 0 или более записей.
Я понимаю, что все это очень субъективно, но я ищу предложения о том, что, по вашему мнению, лучше всего подходит для вас.