Мне очень трудно понять, как определить хороший поисковый термин для моей проблемы: разделение взаимодействия между графическим интерфейсом и базой данных в Visual Studio 2008 с использованием Linq для sql.
По словам моего учителя в классе c #, неправильно, когда графический интерфейс зависит от конкретного способа получения данных.
В настоящее время мой проект настроен так, что у нас есть база данных mssql, где все хранится.
Решение разделено на 4 отдельных проекта. UserGUI, AdminGUI, Logic и Db.
Теперь, используя linq для заполнения списков и тому подобных вещей, я использую что-то вроде:
Из оконной формы в проекте UserGUI:
//The activeReservationBindingSource has Db.ActiveReservation as it's value
private void refreshReservation() {
activeReservationBindingSource.DataSource = logic.getActiveReservationsQry();
}
К проекту Логика:
public IQueryable getActiveReservationsQry() {
return dbOperations.getActiveReservationsQry(this.currentMemberId);
}
К проекту базы данных:
public IQueryable getActiveReservationsQry(int memberId) {
var qry =
from active in db.ActiveReservations
where active.memberId == memberId
orderby active.reservationId
select active;
return qry;
}
Это имеет смысл для меня, потому что я могу отправлять элементы из списков в проект базы данных и легко обновлять / вставлять их в базу данных mssql. Проблема в том, что было бы довольно сложно объединиться с базой данных mssql, скажем, для версии доступа.
Что я должен читать, чтобы понять, как это сделать правильно? Является ли создание собственных классов с теми же значениями, которые генерирует Visual Studio для меня, когда я создаю файл dbml, подходящим способом? Должен ли я тогда в проекте логики заполнить, например, List, который я передаю в GUI? Для меня это звучит как «двойная работа», но, возможно, это правильный путь?
Имейте в виду, что мы ничего не читали о шаблонах проектирования или бизнес-логике, которая кажется довольно большой темой, которую я с нетерпением жду, чтобы исследовать ее за рамками курса позже.
Я также думал, что IQueryable наследует от IEnumerable, и, возможно, это был путь, но я не смог найти никакой информации, которая имела бы для меня смысл, о том, как на самом деле это сделать.
GUI также знает об источниках данных, которые я считаю плохими, но не могу понять, как от них избавиться.
Пожалуйста, поймите, что я пытался выяснить это с моим учителем в течение получаса сегодня на единственном уроке, доступном для этого проекта, а затем провел большую часть дня, пытаясь найти похожие ответы в Google, SO и от одноклассников без какого-либо результата. .