Очень хороший вопрос, и вы, безусловно, на правильном пути!
Будучи самим компьютерным инженером, базы данных и то, как писать код для взаимодействия с базами данных, также никогда не были большой частью моей университетской степени, и, разумеется, я отвечаю за весь код базы данных на работе.
Вот мой опыт использования устаревших технологий начала 90-х для одного проекта и современных технологий с C # и WPF для другого.
Я приложу все усилия, чтобы объяснить терминологию по ходу дела, но я, конечно, сам пока не эксперт.
Таблицы, объекты и отображения Oh My!
База данных содержит таблицы, но что это на самом деле? Это просто плоские данные, связанные с другими плоскими данными, и если вы погрузитесь в них и начнете собирать информацию, все будет очень быстро! Строки будут повсюду, операторы SQL повторяются, записи загружаются дважды и т. Д. Поэтому, как правило, рекомендуется представлять каждую запись таблицы (или коллекцию записей таблиц в зависимости от их отношений) как один объект, обычно называемый как модель. Это помогает инкапсулировать данные и обеспечивает функциональность для поддержания и обновления их состояния.
В вашем сообщении ваш класс Customer будет действовать как Модель! Итак, вы уже осознали эту выгоду.
Теперь существует множество инструментов / сред (LINQ2SQL, dotConnect, Mindscape LightSpeed), которые напишут весь код вашей модели для вас. В конце они отображают объекты в реляционные таблицы или O / R, как они ссылаются на него.
Как и ожидалось, когда ваша база данных изменится, так же, как и ваши O / R-сопоставления. Как вы уже упоминали, если ваш клиент меняется, вы должны исправить это в одном месте, опять же, почему мы ставим вещи на занятия. В случае моего унаследованного проекта обновление моделей занимало много времени, потому что их было очень много, в то время как в моем новом проекте это всего несколько щелчков мышью, НО в конечном итоге результат остается тем же.
Кто должен знать что?
В моих двух проектах было два разных способа взаимодействия объектов со своими таблицами.
В некоторых лагерях Модели должны знать все о своих таблицах, о том, как себя сохранить, иметь прямой общий доступ к соединению / сеансу и могут самостоятельно выполнять действия, такие как Customer.Delete()
и Customer.Save()
.
Другие лагеря, поместите чтение, запись, удаление, логику в управляющий класс. Например, MySessionManager.Save( myCustomer )
. Преимущество этой методологии заключается в возможности легко реализовывать отслеживание изменений на объектах и обеспечивать, чтобы все объекты ссылались на одну и ту же базовую запись таблицы. Однако его реализация является более сложной, чем упомянутый ранее метод локализованной логики класса / таблицы.
Заключение
Вы на правильном пути, и, на мой взгляд, взаимодействие с базами данных чрезвычайно полезно. Я помню, как у меня кружилась голова, когда я сам начал заниматься исследованиями.
Я бы порекомендовал немного поэкспериментировать, начать небольшой проект, возможно, с простой системой выставления счетов, и попробовать написать модели самостоятельно. После этого попробуйте другой небольшой проект и попробуйте использовать инструмент отображения базы данных O / R и увидите разницу.