WPF + LINQ dostęp do aktualnego stanu bazy z każdego okna

0

Witam serdecznie. Na samym początku napiszę, że jestem kompletnym laikiem jeżeli chodzi o C#. Robie prostą aplikację pozwalającą na dodawanie/usuwanie/edycję rekordów w bazie danych z wykorzystaniem LINQ. Aplikacja składa się na główne okno (przyciski dodaj, usuń etc. po naciśnięciu których otwierane jest kolejne okno z konkretną funkcjonalnością). Klasa MainWindow przechowuje dwie zmienne, które inicjalizowane są w konstruktorze:

private SqlConnectionStringBuilder connectionString;
private DBDataContext myDB;

Już po przypisaniu konkretnych wartości, ustawieniu connectionStringa otwierane jest połączenie z bazą:

myDB.Connection.Open();

Każde nowe okno, również posiada DBDataContext i przy jego tworzeniu konstruktor inicjuje to pole aktualnym stanem z MainWindow. Zastanawiam się czy jest to rozwiązanie poprawne czy warto zrobić to w całkiem inny sposób? Myślałem o stworzeniu jakiejś osobnej klasy typu ConnectionInfo, która przechowywałaby te dwa elementy (stringBuilder i DataContext), aczkolwiek nie mam pojęcia jak uzyskać dostęp z każdego okna do aktualnego stanu tych zmiennych bez zastosowania zmiennych globalnych. Można by tu wykorzystać zmienne statyczne? Za każdą podpowiedź/wskazówkę będę wdzięczny :).

1

Architektura klas powinna być dobrana indywidualnie do potrzeb. Niemniej nie powinieneś wkładać elementów przetwarzania danych do widoków - kodu obsługującego formę, interfejs graficzny. Do obsługi połączenia z bazą stwórz sobie klasę statyczna lub skorzystaj z wzorca projektowego - singleton. Co do operacji na bazie danych (CRUD) i odpowiedniego przedstawienia modelu relacyjnego w bazach danych na obiektowy - poczytaj sobie - http://pszwed.ia.agh.edu.pl/pub/Antywzorce.pdf strona 4. Będziesz miał jakąś wiedzę gdzie należy umieszczać metody dodaj(), pobierz(), usun() etc. Poczytaj o czymś takim jak ORM.

0

Bardzo dziękuje za odpowiedź :) Myślałem już wcześniej żeby wykorzystać singletona. Mam tylko takie pytanie odnośnie różnych metod - dodawania, usuwania itd. Powinny one znaleźć się w klasie w której zaimplementowany jest singleton? W końcu to ona przechowuje dane na temat bazy więc wydaje mi się, że wszystkie operacje realizowane na niej również powinny się tam znaleźć? Biorę się za czytanie podrzuconych linków i jeszcze raz dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1