Przejdź do treści stopki
Iron Academy Logo
Aplikacja C#
Aplikacja C#

Inne Kategorie

Rozwój aplikacji C#: Głębokie wejście przez „Create Team Form Part 2” Tima Corey’a (Lekcja 13)

Tim Corey
46m 06s

W tym artykule, idąc za Lekcją 13 "C# App Start to Finish" Tima Coreya, przyjrzymy się bliżej rozwojowi aplikacji C#. Tim przeprowadza nas przez proces budowy funkcjonalnej aplikacji Windows Forms, koncentrując się na tym, jak połączyć elementy kontrolne UI, takie jak comboboxy, listboxy i przyciski z danymi. Ta lekcja demonstruje kluczowe koncepty, takie jak powiązanie danych, zarządzanie listami, łączność z bazą danych przy użyciu Dappera oraz podstawową walidację i debugowanie, umiejętności niezbędne do budowania rzeczywistych aplikacji C#.

Kontynuacja formularza Create Team

Tim zaczyna, przypominając nam, że Lekcja 13 jest kontynuacją poprzedniego wideo, w którym połączono sekcję "Add New Member". W tej lekcji Tim wyjaśnia, że głównym celem jest połączenie rozwijanej listy (combobox) i listboxa, a następnie powiązać nowo utworzony obiekt osoby, aby pojawiał się na liście. Tim jasno określa plan: ta lekcja skupi się na łączeniu UI, przemieszczeniu danych i synchronizacji list — fundamentalne aspekty budowy aplikacji desktopowej w C#.

Zrozumienie danych w rozwijanej liście i listboxie

Tim wyjaśnia, że za rozwijaną listą i listboxem znajduje się lista obiektów Person. To klasyczny przykład powiązania danych w Windows Forms, gdzie elementy interfejsu są powiązane z kolekcjami modeli danych.

Tworzy dwie prywatne listy na poziomie klasy:

  • availableTeamMembers – osoby, które mogą być dodane do zespołu

  • selectedTeamMembers – osoby już dodane do zespołu

Tim wyjaśnia oczekiwane działanie: gdy osoba zostanie wybrana z rozwijanej listy i dodana, powinna przejść z availableTeamMembers do selectedTeamMembers. To standardowy wzorzec CRUD w rozwoju aplikacji desktopowych, gdzie UI odzwierciedla dane źródłowe.

Dlaczego Tim nie ogranicza członków zespołu według turnieju

Tim odpowiada na częste pytanie projektowe: "Dlaczego nie ograniczyć członków zespołu na podstawie turnieju?". Wyjaśnia, że formularz Create Team nie jest bezpośrednio powiązany z turniejem, a wiele turniejów może odbywać się jednocześnie.

Tim używa praktycznego przykładu: jeśli jednocześnie odbywa się turniej koszykówki i ping-ponga, osoba może brać udział w obu. Ograniczenie rozwijanej listy wymagałoby złożonej logiki i mogłoby wprowadzić błędy. Zamiast tego Tim wybiera prostsze podejście:

  • Usuwa osobę z rozwijanej listy dopiero po jej dodaniu do zespołu.

To podejście demonstruje praktyczną decyzję projektową oprogramowania: unikać nadmiernej komplikacji, gdy nie jest to konieczne.

Tworzenie metody WireUpLists

Tim tworzy metodę o nazwie WireUpLists, aby połączyć listy z kontrolkami UI. Ta metoda wiąże listę availableTeamMembers z comboboxem i listę selectedTeamMembers z listboxem.

Tim zwraca uwagę na kluczową poprawę: w nowoczesnych Windows Forms można bezpośrednio wiązać listy z kontrolkami bez użycia oddzielnego BindingSource. To przydatna wskazówka dla programistów pracujących nad wiązaniem danych w Windows Forms.

Dodawanie DisplayMember z pełną nazwą

Tim wyjaśnia, że w comboboxie musi być wyświetlana czytelna nazwa. Właściwość DisplayMember oczekuje na właściwość string z modelu Person. Tim ostrzega, że użycie tylko FirstName lub LastName może powodować duplikaty.

Dlatego Tim tworzy właściwość tylko-odczytu o nazwie FullName:

public string FullName
{
    get
    {
        return "{FirstName} {LastName}";
    }
}

To demonstruje ważną praktykę UI: zawsze upewnij się, że twój UI wyświetla przyjazne użytkownikowi informacje, a nie surowe dane obiektu.

Tworzenie przykładowych danych do testowania

Tim tworzy metodę o nazwie CreateSampleData do testowania list i UI. Dodaje przykładowe obiekty Person do obu list i wywołuje WireUpLists w konstruktorze.

To przydatna technika do szybkiego budowania i testowania aplikacji Windows Forms przed połączeniem z rzeczywistą bazą danych.

Zastępowanie przykładowych danych rzeczywistymi danymi

Tim komentuje przykładowe dane i przygotowuje się do załadowania rzeczywistych danych. Dodaje metodę GetPerson_All do interfejsu IDataConnection. Tim wyjaśnia swoją konwencję nazewnictwa:

  • Create = insert

  • Get = select

To standardowa strategia nazewnictwa dla warstw dostępu do danych w aplikacjach C#.

Implementacja pobierania danych SQL za pomocą Dappera

Tim implementuje wersję SQL GetPerson_All przy użyciu Dappera i procedury przechowywanej:

connection.Query<PersonModel>("spPeople_GetAll").ToList();

Tim celowo używa zmiennej wyjściowej zamiast bezpośredniego zwrócenia, aby ułatwić debugowanie. To pokazuje, jak praktyki debugowania mogą wpływać na projekt kodu.

Porządkowanie powtarzanego kodu za pomocą stałych

Tim zauważa powtarzające się nazwy ciągów połączeń i zmienia je na stałą. Wyjaśnia, że powtórzenie jest złą praktyką i może powodować błędy później.

To ważna zasada inżynierii oprogramowania: DRY (Don't Repeat Yourself).

Załadanie rzeczywistych danych do rozwijanej listy

Tim tworzy LoadListData() i wypełnia availableTeamMembers przy użyciu GetPerson_All(). Lista selectedTeamMembers pozostaje pusta, co jest właściwe, ponieważ nowy zespół zaczyna się pusty.

To pokazuje, jak połączyć UI z rzeczywistymi źródłami danych, czy to bazą danych, czy plikiem tekstowym.

Połączenie przycisku Add Member

Tim tworzy obsługę zdarzeń przycisku Add Member. Logika jest:

  1. Pobierz wybraną osobę z rozwijanej listy

  2. Usuń ją z dostępnej listy

  3. Dodaj ją do wybranej listy

  4. Odśwież interfejs użytkownika

Tim wyjaśnia, że wybrany element musi być rzutowany na PersonModel, ponieważ pole kombi przechowuje obiekty jako object. To podkreśla znaczenie rzutowania typów i obsługi obiektów w C#.

Debugowanie problemu z odświeżaniem

Tim odkrywa, że interfejs użytkownika nie odświeża się po przeniesieniu elementów. Po debugowaniu znajduje rozwiązanie:

  • Ustaw DataSource na null

  • Następnie ponownie przypisz listę

To wymusza odświeżenie pola kombi i pola z listą. Tim podkreśla, że umiejętności debugowania są niezbędne i często wymagane do zrozumienia, jak zachowuje się powiązanie danych.

Podłączanie przycisku Usuń Wybrane

Tim zmienia nazwę przycisku na Usuń Wybrane i tworzy obsługę zdarzenia. To odwraca operację dodawania:

  • Usuń z selectedTeamMembers

  • Dodaj z powrotem do availableTeamMembers

  • Odśwież interfejs użytkownika

Tim odkrywa błąd: jeśli żaden element nie jest wybrany, dodawana jest wartość null. Dodaje walidację:

if (p != null)
{
// kontynuuj
}

To demonstruje podstawową walidację i zapobieganie błędom.

Znaczenie testowania

Tim podkreśla testowanie aplikacji jako użytkownika, który próbuje ją zepsuć. Radzi mieć testerów, którzy celowo próbują zepsuć aplikację, ponieważ prawdziwi użytkownicy będą wykonywać nieoczekiwane działania.

To kluczowa lekcja dla budowania niezawodnego oprogramowania.

Podłączanie przycisku "Utwórz Członka"

Tim modyfikuje przycisk "Utwórz Członka", aby zapisać nową osobę w magazynie danych i natychmiast dodać ją do wybranej listy. To pokazuje, jak wdrożyć operacje CRUD w aplikacji Windows Forms.

Implementacja GetPerson_All dla pliku tekstowego

Tim zdaje sobie sprawę, że brak wersji plikowej GetPerson_All. Wdraża go za pomocą prostego wiersza:

return PeopleFile.FullFilePath.LoadFile().ConvertToPersonModels();

To pokazuje, że przechowywanie na podstawie plików można łatwo wdrożyć bez skomplikowanej logiki.

Potwierdzanie, że wszystko działa

Tim uruchamia aplikację i potwierdza, że teraz dropdown ładuje ludzi z pliku tekstowego i bazy danych. Dodaje nowych ludzi i widzi, jak pojawiają się natychmiast, pokazując, że cały system działa poprawnie.

Co dalej?

Tim kończy, stwierdzając, że następne wideo skupi się na tworzeniu samego zespołu. To obejmuje zapisanie wielu fragmentów danych do bazy danych lub pliku tekstowego, uzupełniając funkcję.

Podsumowanie

Lekcja 13 Tima Coreya Lekcja 13 to rzeczywisty przykład rozwoju aplikacji Windows Forms w C#. Od podłączania kontrolek interfejsu użytkownika i powiązania danych po debugowanie i walidację, Tim uczy praktycznych umiejętności programowania do budowania prawdziwych aplikacji desktopowych. Ta lekcja jest szczególnie wartościowa dla programistów, którzy chcą uczyć się powiązania danych, Dappera, operacji CRUD w SQL i programowania z napędem UI w C#.

Jeśli chcesz kontynuować naukę, następna lekcja Tima zakończy funkcję tworzenia zespołu i połączy wszystko w działającą aplikację.

Hero Worlddot related to Rozwój aplikacji C#: Głębokie wejście przez „Create Team Form Part 2” Tima Corey’a (L...
Hero Affiliate related to Rozwój aplikacji C#: Głębokie wejście przez „Create Team Form Part 2” Tima Corey’a (...

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie