Integracja z innym systemem i uzycie Entity Framework Core

0

W jaki sposób robi się integracje z innymi systemami do których nie mamy dostepu do kodu źródłowego?

Może opiszę swój przypadek. Potrzebujemy integrować się do systemu X, gdzie głównie chodzi o pisanie i czytanie do jego bazy danych. Dostep do bazy mamy.
Teraz piszemy własną aplikacje Y, która ma się integrować z aplikacją X i chcemy uzyc EF core. Nasza aplikacja Y ma swoją baze danych ktora jest obslugiwana przez EF. Jak teraz robić integracje naszej aplikacji Y z aplikacją X? Czy w aplikacji Y powinny być zdefiniowane dwa konteksty Entity Framework? Bo po wykonaniu jakiejś operacji w aplikacji Y jest np. potrzeba zapisania danych w bazie aplikacji Y i dodatkowo również zapisania danych w bazie aplikacji X.

Mogłby ktoś podpowiedzieć jak to dobrze zrobić i jak się to ogólnie robi?

3

A po co Ci do integracji EF?

0

Wysokopoziomowe frameworki nie zawsze są dobre do integracji, np jeśli baza "integrowana" na niestardowy design.
A po drugie przy integracji chyba najczęściej nie chodzi o całość bazy, a tylko jej wycinki (grupy tabel, i tylko w wybranych "widokach":)

Mozę się okazać, ze libki z warstwą ręcznego kodu SQL mogą być lepsze.

2

Ja w takich przypadkach używam Dappera. EF do bazy aplikacji a Dapper czyta pisze do bazy innego systemu.
Moim zdaniem idealne rozwiązanie to API do zewn systemu. Jeśli go nie ma to stworzyć RESTa. Ale to też kwestia skali.

1

@john_doe: Nie trzeba od razu robić REST-a, wystarczy dodać warstwę integracji która dobrze się przetestuje. Podąrzając za SOLID-em robimy zewnętrzny system jest ukryty za abstrakcją.

0

@mr-owl: czyli do aplikacji ktorą robimy można by dodać taką warstwe integracji i z tej warstwy zapytania szły by do bazy aplikacji z którą się integrujemy?

1

@kalimata: Tak

0

@mr-owl a tak jeszcze uściślając, to np mam w mojej aplikacji metode do dodawania pracownika, to w tej metodzie powinienem wołac również metodę z wartswu integracykjnej, która zrobi mi tez instert do bazy z którą się integrujemy?
Czyli tak z grubsza to powinno wyglądac?:

public void DodajPracownika(Pracownik pracownik)
{
 // jakaś logika
 bazaAplikacji.ZapiszPracownika(Pracownik pracownik);  // zapis do bazy naszej aplikacji
 warstwaIntegracji.ZapiszPracownika(Pracownik pracownik); // zapis do bazy z którą się integrujemy
}
1
kalimata napisał(a):

@mr-owl a tak jeszcze uściślając, to np mam w mojej aplikacji metode do dodawania pracownika, to w tej metodzie powinienem wołac również metodę z wartswu integracykjnej, która zrobi mi tez instert do bazy z którą się integrujemy?
Czyli tak z grubsza to powinno wyglądac?:

public void DodajPracownika(Pracownik pracownik)
{
 // jakaś logika
 bazaAplikacji.ZapiszPracownika(Pracownik pracownik);  // zapis do bazy naszej aplikacji
 warstwaIntegracji.ZapiszPracownika(Pracownik pracownik); // zapis do bazy z którą się integrujemy
}

Jak widać na załączonym obrazku, baza danych i zewnętrzne systemy leżą w jednej klasie abstrakcji, i nie wiedzą nic o sobie. Ich gatewaye też powinny być oddzielne. Ale już implementacja logiki danego przypadku użycia, może wołać oba. I to chyba robi Twój kod.

screenshot-20220328000103.png

0

@mr-owl, @somekind: czy taka warstwa integracji to nie powinna być w warstwie infrastruktury, bo będą w niej funkcjonalności operujące bezpośrednio na bazie danych innego systemu?

1

Tak, powinna być. To jest to, co na schemacie oznaczane jest jako Gateways.

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