Programistą być

Main Menu

  • Felietony
  • Xamarin
  • Programowanie
  • Autor
    • Kontakt i współpraca
    • O mnie

logo

  • Felietony
  • Xamarin
  • Programowanie
    • "Social Project" - Xamarin Workbook #2 - Refit i Akavache

      28 lutego 2018
      0
    • "Social Project" - Xamarin Workbook #1

      25 lutego 2018
      0
    • Visual Studio - Build Events

      2 lipca 2017
      2
    • Jade-ERP #10 – Nowe ekrany

      7 maja 2017
      0
    • SOLID #5 – DIP

      4 maja 2017
      0
    • Jade-ERP #9 – Zaczyna coś się dziać

      30 kwietnia 2017
      0
    • Jade-ERP #8 – Projektowa porażka

      23 kwietnia 2017
      0
    • SOLID #4 – ISP

      20 kwietnia 2017
      0
    • Jade-ERP #7 - Zmniejszanie zależności

      16 kwietnia 2017
      0
  • Autor
    • Kontakt i współpraca
    • O mnie
  • Krótkie słowo #4 – Bądź świadomy

  • “Social Project” – Xamarin Workbook #2 – Refit i Akavache

  • “Social Project” – Xamarin Workbook #1

  • Visual Studio – Build Events

  • Koniec przygody – podsumowanie DSP 2017

Daj Się Poznać 2017Programowanie
Home›Daj Się Poznać 2017›Jade-ERP #4 – Dane z bazy

Jade-ERP #4 – Dane z bazy

By Krzysztof
26 marca 2017
910
0
Udostępnij:

Miniony tydzień ponownie jak poprzedni miałem wypełniony po brzegi, przez co ponownie niewiele udało mi się dodać do projektu. Zdecydowanie muszę bardziej skupić się na poprawieniu zarządzaniu swoim czasem, aby projekt ruszył z miejsca.  Plan na najbliższy tydzień – poświęcić więcej czasu na rozwinięcie projektu.

 

Zmiany

Przedstawię to, co udało mi się zaimplementować w ostatnich dniach.

Dodałem klasę bazową dla modeli widoków list (kontrahentów, towarów etc.). Jako że wszystkie listy w widokach muszą coś wyświetlić (co wydaje się całkiem logiczne 😊 ), więc pobranie danych z bazy i utworzenie listy przeniosłem właśnie do wspólnej dla list klasy bazowej. W jaki sposób zarządzam rodzajem pobieranych danych? Oto konstruktor TableViewModel:

C#
1
2
3
4
5
6
7
8
9
10
11
public TableViewModel(Type enityType)
{
    var ex = typeof(DatabaseAccessService);
    var mi = ex.GetMethod("GetEntities");
    var miConstructed = mi.MakeGenericMethod(enityType);
    var itemList = miConstructed.Invoke(DatabaseAccessService.Current, null) as IList;
 
    if (itemList != null)
        foreach (var o in itemList)
            Items.Add(o);
}

 

Za chwilę wyjaśnię cel skorzystania z refleksji. Tymczasem przedstawię klasę do pobierania danych z bazy danych na podstawie typu obiektu, który chcemy uzyskać:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class DatabaseAccessService
{
    private readonly ERPDatabaseEntities _database = ConnectionHelper.CreateConnection();
 
    public DatabaseAccessService()
    {
        if (Current != null)
            throw new Exception($"Only one instance of {nameof(DatabaseAccessService)} can exists!");
 
        Current = this;
    }
 
    public static DatabaseAccessService Current { get; private set; }
 
    public List<T> GetEntities<T>() where T : class
    {
        var value = _database.GetType().GetProperty(typeof(T).Name).GetValue(_database, null);
        var obj = value as DbSet<T>;
 
        return new List<T>(obj);
    }
 
    public void AddEntities<T>(T entity) where T : class
    {
        var value = _database.GetType().GetProperty(typeof(T).Name).GetValue(_database, null);
        var obj = value as DbSet<T>;
    }
 
}

 

Dzięki użyciu metod generycznych posiadam uniwersalny mechanizm do pobierania lub dodawania danych dowolnego (przynajmniej teraz tak uważam) typu z i do bazy! Dlaczego korzystam z refleksji w konstruktorze  TableViewModel? Zwróć, proszę uwagę, że do konstruktora przekazuje pewien typ. Z jego pomocą muszę wywołać generyczną metodę GetEntities z klasy DatabaseAccessService. Niestety nie mogę tak po prostu przekazać parametru konstruktora do metody generycznej. Dość długo zastanawiałem się nad rozwiązaniem tego problemu – jak zwykle StackOverflow przyszedł z pomocą. Jeżeli znasz inny sposób niż korzystanie z refleksji, zapraszam do podzielenia się tym w komentarzu – jestem ciekawy czy istnieje inne rozwiązanie.

 

Słów kilka na koniec

W zasadzie jest to jedyny większy mechanizm, który dodałem do projektu. Pozostałe zmiany polegały na dodaniu drobnych klas pomocniczych oraz refaktoryzacji istniejącego kodu.

TagiC#Daj się poznać 2017MVVMProjektySOLID
Poprzedni

Programistą być #1

Następny

MVVM – #3 – MVVM Toolkit #2

3
Udostępnień
  • 3
  • +
  • 0

Krzysztof

Programista - pasjonata z dużym poczuciem humoru. Amator muzyki, sportu i dobrego starego filmu.

Powiązane Więcej

  • Daj Się Poznać 2017Programowanie

    Jade-ERP #2 – Struktura okien

    8 marca 2017
    By Krzysztof
  • Daj Się Poznać 2017Programowanie

    Jade-ERP #6 – Rozwojowe zmiany

    9 kwietnia 2017
    By Krzysztof
  • Programowanie

    Szkoła C# – 2 – Metody rozszerzające

    19 stycznia 2017
    By Krzysztof
  • Daj Się Poznać 2017Programowanie

    Jade-ERP #10 – Nowe ekrany

    7 maja 2017
    By Krzysztof
  • Daj Się Poznać 2017Programowanie

    Jade-ERP #1

    1 marca 2017
    By Krzysztof
  • Daj Się Poznać 2017Programowanie

    SOLID #3 – LSP

    3 marca 2017
    By Krzysztof

Może Cię zainteresować

  • Daj Się Poznać 2017InneWydarzenia

    Hackathon Rzeszów!

  • Felietony

    Nauka programowania

  • Programowanie

    SOLID #2 – OCP

Ostatnio skomentowane

  • Paweł Bulwan
    on
    19 sierpnia 2017
    Słomiany zapał niekoniecznie musi być zły ;) Tak naprawdę jeśli kilka razy w miesiącu wpadamy na ...

    Słomiany zapał

  • Przemek Smyrdek
    on
    4 lipca 2017
    Jeśli budujesz aplikację zdalnie, z wykorzystaniem jakiegoś narzędzia do CI/CD to możesz te eventy wykorzystać do ...

    Visual Studio – Build Events

  • Marcin Kościelniak
    on
    4 lipca 2017
    Ja np wykorzystuje czasem zdarzenie prev żeby do wersji aplikacji dobić numer rewizji svn z jakiej ...

    Visual Studio – Build Events

  • krzbb
    on
    9 czerwca 2017
    Dzięki za komentarz. Masz rację, programiści-gwiazdy nie są raczej dobrze postrzegani. Sam post (przynajmniej w moim ...

    Jak zadbać o siebie?

  • Cyan
    on
    7 czerwca 2017
    Moim zdaniem to nie ma nic wspólnego z informatyką a raczej brzmi jak artykuł z Cosmopolitana ...

    Jak zadbać o siebie?

Znajdź mnie na

Facebook

©2017 programistabyć.pl