Do napisania niniejszego posta przyczynił się artykuł (blog Kamila Kiełbasy) znaleziony w odmętach internetu, będący krótkim poradnikiem na temat połączenia MongoDB i C#.

Kod, który był tam zamieszczony przykuł moją uwagę, a szczególnie deklaracja interfejsu. Była ona, dla mnie, co najmniej nie zrozumiała, postanowiłem to zmienić.

Ten post miał być o interfejsach (żebym nie zapomniał jak one działają) ale pojawił się mały projekcik na horyzoncie w którym postanowiłem wykorzystać MongoDB. W ten oto sposób interfejsy wplecione zostały w mongo, a całość przybrała formę małej aplikacji i krótkiego turoriala (żebym nie zapomniał jak się tego używa).

Przykład interfejsu, który wzbudził moje zainteresowanie, nie co go ubogaciłem.

To co robi interfejs w tym momencie nie jest istotne ale definicja interfejsu. Do tej pory spotykałem się z czymś takim ale albo pomijałem albo myślałem, że tak ma być brałem bez zrozumienia idei, a nawet używałem (IEnumerable<>) nie wiedząc o tej konstrukcji.

Poszukiwania rozpoczołem i dostałem się na strone MSDN-a nie za bardzo mi to pomogło (za pierwszym razem) a jedynie dowiedziałem się, że temat jest znacznie bardziej rozbudowany niż mi się wydaje.

Na początek mój przykład (kod na githubie):

Krótki opis 

IMongoInreface<T> where T : class – definicja kontraktu, który przy wywołaniu potrzebuje otrzymać informacje, jaką konkretną klasę ma reprezentować, litera T (czyli typ referencyjny).

The type argument must be a reference type. This constraint applies also to any class, interface, delegate, or array type

MSDN

Żeby było ciekawiej jest znacznie więcej takich warunków, a dodatkowo można je łączyć, ja łącze z warunkiem napisania publicznego konstruktora bez paramterów w klasie wypełniającej kontrakt (ciekawe czy da się wymusić konstruktor parametrowy?).

No i tyle było by o interfejsach teraz MongoDB

Instalacja i uruchomienie.

Ja opierałem się na dwóch blogach i dokumentacji, do których linki tu zamieściłem, poniżej będzie streszczenie tego i tak krótkiego procesu.

Plik z wersją instalacyjną servera MongoDB Community Server

Interfejs graficzny, ja korzystam z NoSQL Managment for MongoDB, Lista interfejsów graficznych.

Aby uruchomić już zainstalowaną bazę, trzeba stworzyć gdzieś na dysku folder w którym baza będzie przechowywana u mnie „E:\test_mongo\” (nie wiem jak jest ze spacjami w nazwie, nie testowałem ).

Następnie skierować swoje kroki do folderu instalacyjnego, u mnie „C:\Program Files\MongoDB\Server\4.2\bin”  , wykonać polecenie w konsoli

W aplikacji do zarządzania MongoDB trzeba stworzyć połączenie, ja w aplikacji mam domyślne localhost i port 27017. Kolejnym krokiem jest utworzenie bazy, a potem kolekcji (tabela). Kolekcja przechowuje dokumenty (rekordy).

Sposób zależy od managera którego używamy.

Uwaga

Nie wolno zamknąć konsoli, gdyż zatrzymamy server.

Przygotowanie aplikacji

Do poprawnego działania  MongoDB w C# potrzebujemy dodatkowych bibliotek. Konsola menagera pakietów NuGet:

Kod aplikacji

Struktura do zapisu klasa Tag

Wyjaśnienie :

[BsonId] – oznaczenie klucza głównego, będzie tam guid, ObjectId w mongo jest inny niż typ Guid w C#,

[BsonElement(„id”)] – nazwa  elementu w kolekcji.

[BsonDateTimeOptions(Kind = DateTimeKind.Local)] – MongoDB zapisuje czas w formacie UTC .

Główny interfejs, który pozwala na realizacje podstawowych metod dostępnych.  Interfejs ten posłużył mi do stworzenia nie co bardziej uniwersalnego narzędzia. Abstrakcja ta w dłuższej perspektywie będzie używana  do rejestracji czasu poprzez czytnik RFID.

Wypełnienie kontraktu, nagłówek klasy

Klasa posiada cztery zależności (inrefejsy) i dwa konstruktory.  Jeden konstruktor bez parometrowy („ręczne” rozwiązanie zależności) i konstruktor z parametrami, które to parametry są interfejsami (przygotowane pod kontener zależności) .

Konstruktor bez parametrowy

Metody zapis jednego dokumentu, aktualizacja,pobranie wszystkich, pobranie specyficznego dokumentu, usunięcie.

Reszta w kolejnej części.

Link do GitHuba ->  projekt całość.

 

Linki:

Kategorie: Archiwum