Из вашего списка, варианты 1, 2 и 4, вероятно, наиболее часто используемые.
1. Не беспокойтесь об этом, просто загружайте все из базы данных каждый раз: Что ж, если ваше приложение не находится под большой нагрузкой или у вас в таблицах слишком тяжелые поля, используйте эту опцию и избавьте себя от необходимости разбираться что-то лучше.
2. Имейте несколько разных, возможно унаследованных, классов для каждой таблицы и создайте подходящий для ситуации (например, SummaryArticle, FullArticle): Такие классы часто называют «моделями представления» или чем-то подобным, и в зависимости от вашей стратегии доступа к данным Вы можете получить доступ к таким объектам без объявления какого-либо нового класса. Например, используя Linq-2-Sql, выражение data.Articles.Select(a => new { a .Title, a.Author })
даст вам набор анонимно типизированных объектов со свойствами Title
и Author
. Сгенерированный SQL будет похож на select Title, Author from Article
.
4. Предоставьте объектам доступ к базе данных, чтобы они могли загружать некоторые поля по требованию: Объекты, которые вы здесь описываете, обычно называются «прокси-объектами» и / или их свойства называются «загруженными с отложенным доступом». Опять же, в зависимости от вашей стратегии доступа к данным, создание прокси может быть трудным или легким. Например. с NHibernate вы можете иметь ленивые свойства , просто добавив lazy=true
в ваше отображение, и прокси будут автоматически созданы.
В вашем вопросе не упоминается, как вы сейчас отображаете данные из своей базы данных в объекты, но если в данный момент вы не используете какой-либо фреймворк ORM, взгляните на NHibernate и Entity Framework - они оба довольно солидные решения.