Mamy aplikację internetową, która składa się z 3 warstwowego zaplecza (Controller/Biz/Data) z interfejsem użytkownika. Nasza warstwa danych jest wyłącznie odpowiedzialna za wyciąganie danych z instancji bazy danych (SQL), wiadomość biznesowa warstwy danych i tworzy właściwości pochodne, kontroler jest odpowiedzialny za wysyłanie tych zmian do interfejsu użytkownika.SQL Dependency and SignalR w 3 warstwowej architekturze
Potrzebujemy aktualizacji w czasie rzeczywistym w naszej aplikacji, która MUSI być śledzona na poziomie bazy danych (nie na poziomie kontrolera).
Zdecydowaliśmy się użyć SQL Dependency i SignalR jako naszego rozwiązania.
Wszystko, co badałem na temat SignalR i zależności SQL, znajduje się na poziomie bazy danych, gdzie SQL Dependency zidentyfikuje zmianę i transmisję, wszystko w warstwie danych. Z oczywistych powodów ta metodologia pominęłaby pochodne właściwości utworzone w warstwie biznesowej i dałaby nam inny obiekt wyglądający.
Jedyne rozwiązanie, jakie mogę sobie wyobrazić to użycie zależności SQL do śledzenia zmian, zrzucenie ich do tabeli/obiektu, a następnie użycie odpytywania do pobrania tych danych ze sterownika, do warstwy biz, do warstwy danych i utworzyć kopię zapasową.
- Pytanie nr 1: Czy istnieje lepsze rozwiązanie?
- Pytanie nr 2: Jakie jest najlepsze rozwiązanie, aby uwzględnić logikę warstwy biznesowej, ale nadal można śledzić zmiany w warstwie danych?
- Pytanie nr 3: Czy jest to możliwe bez odpytywania?
To nie rozwiązuje mojego problemu, ponieważ ten typ kodu/logiki nie powinien być na poziomie biznesowym. Poziom biznesowy nie powinien być świadomy czegokolwiek związanego ze schematem i powinien działać tylko na DTO. – mtsuggs
Do jakiego końca? Więc możesz usiąść wygodnie i podziwiać, że utrzymałeś koncepcję 3 poziomu, kosztem rozwiązania? Używamy tych narzędzi do rozwiązywania problemów. Nie każdy problem będzie pasował do najnowszego pomysłu na wzorce projektowe, które wszyscy lubimy w tej dekadzie. Masz rozwiązanie, więc nieco zamazujesz kontroler i warstwę biznesową. Wielka rzecz. Po prostu pozostaw widok lub użytkownik końcowy z bezpośredniego dostępu do danych, a nadal jesteś złoty. – Jason