Я создаю небольшое приложение с интенсивным использованием данных с помощью Windows Forms. В основном проекте у меня есть папка, в которой хранятся мой DBML, а также классы данных для обеспечения CRUD-операций с базой данных. В настоящее время существует около 10 указанных классов данных.
Код в форме создает экземпляры бизнес-объектов и обращается к ним, чтобы выполнить всю работу. Эти бизнес-объекты выполняют вызовы к классам доступа к статическим данным.
Примером класса данных будет что-то вроде этого
static class CustomerData
{
public static IEnumerable<Customer> GetCustomersForRun(int runID)
{
var db = new FooDataContext("connectionString");
return db.Customers.Where(ri => ri.RunID == runID);
}
}
Теперь, очевидно, есть несколько проблем с моим первоначальным дизайном, которые мне нужно решить.
1) Нехорошо иметь каждый статический метод для создания своего собственного DataContext. Это совсем не СУХОЕ.
2) Поскольку я полагаюсь на ленивую загрузку, я не могу обернуть свой DataContext в оператор использования.
Несколько разных идей, которые мне нужно решить, это
1) Избавьтесь от статических методов и вместо этого создайте абстрактный базовый класс доступа к данным, который может создавать экземпляр моего DataContext.
2) Пусть каждый бизнес-объект создает свой собственный DataContext и передает его в статические методы классов доступа к данным.
Пример сигнатуры метода будет тогда
public static IEnumerable<Customer> GetCustomerForRun(DataContext db, int runID)
Мои конкретные вопросы
1) Я слишком усложняю это?
2) Обычно вы избавляетесь от своих объектов DataContext?
3) Какое из моих решений наиболее целесообразно? Если ни один из них, что вы рекомендуете?