Używanie discard

0

Cześć,

starając się cały czas pracować nad tym co wychodzi spod moich rąk zacząłem się ostatnio zastanawiać nad używaniem discard. Pokażę przykładowy kod:

if (!(FileHelper.CheckFileSize(photoDirectory) is long size && size > 0))
            {
                Infohelper.ShowMessageBox("Wystąpił problem podczas przygotowywania załącznika. Spróbuj ponownie.",
                                          "Houston, mamy problem",
                                          MessageBoxButtons.OK,
                                          MessageBoxIcon.Error);
                return;
            }

Słowem wyjaśnienia: InfoHelper to moja własna klasa do obsługi wyświetlanych informacji użytkownikowi (np. przy błędach logowanie tego zdarzenia do DB oraz możliwość automatycznego założenia zgłoszenia w oprogramowaniu do tasków.

Wg VisualStudio w tym miejscu przy wywołaniu InfoHelper powinien być zastosowany discard, czyli wyglądałoby to tak:

_ = Infohelper.ShowMessageBox("Wystąpił problem podczas przygotowywania załącznika. Spróbuj ponownie.",
                                          "Houston, mamy problem",
                                          MessageBoxButtons.OK,
                                          MessageBoxIcon.Error);

Czy rzeczywiście tak powinno się robić? Wygląda to dość dziwnie. Czemu to dokładnie ma służyć?

2

VS tak ma, że różne dziwne rzeczy sugeruje jak np. używanie LINQ Query. Odpowiadając - tak się nie robi.
Tutaj masz kilka bardziej życiowych przykładów: https://csharp.today/c-7-0-discards/

1

A ten infohelper to co zwraca? Taska?

2

A tak z kompletnei innej beczki:

  • FileHelper przerób na serwis, dodaj interfejs IFileHelper i wstrzyknij go (polecam użycie IoC). Nie używaj statycznych metod, bo ich zamockowanie jest trudne, a to uniemozliwia zrobienie testów jednostkowych.
  • CheckFileSize nie sprawdza rozmiaru pliku, tylko go pobiera i zwraca, więc GetFileSize. A skoro i tak jesteś w FileService, to wiadomo, że dotyczy to pliku, więc powinno wystarczyć samo GetSize.
  • Po co sprawdzasz typ zwracany przez CheckFileSize? Czy rozmiar pliku może być czymś innym od liczby? W środku zapewne używasz FileInfo.Length, które zwraca long, więc Twoja metoda też powinna zawsze taki typ zwracać.
  • photoDirectory to chyba nie katalog, skoro wsadzasz wartość z tej zmiennej do metody, która ma w nazwie "File". Popraw nazwę zmiennej albo popraw nazwę metody.
  • Infohelper ma literówkę -> InfoHelper. Ponownie - nie używaj helperów, rób serwisy z interfejsami i wstrzykuj je, co umożliwi tworzenie testów jednostkowych.
  • Komunikat "Wystąpił problem podczas przygotowywania załącznika. Spróbuj ponownie." jest bardzo lakoniczny. Skoro wiesz, że pliku nie ma albo jest pusty, to warto to użytkownikowi podać wraz z nazwą problematycznego pliku.
  • Wcięcia przy parametrach ShowMessageBox są absurdalnie duże. Trzymaj się zasady: nowy blok kodu = dokładnie jeden poziom wcięcia więcej.
0
ŁF napisał(a):

A tak z kompletnei innej beczki:

  • FileHelper przerób na serwis, dodaj interfejs IFileHelper i wstrzyknij go (polecam użycie IoC). Nie używaj statycznych metod, bo ich zamockowanie jest trudne, a to uniemozliwia zrobienie testów jednostkowych.
  • CheckFileSize nie sprawdza rozmiaru pliku, tylko go pobiera i zwraca, więc GetFileSize. A skoro i tak jesteś w FileService, to wiadomo, że dotyczy to pliku, więc powinno wystarczyć samo GetSize.
  • Po co sprawdzasz typ zwracany przez CheckFileSize? Czy rozmiar pliku może być czymś innym od liczby? W środku zapewne używasz FileInfo.Length, które zwraca long, więc Twoja metoda też powinna zawsze taki typ zwracać.
  • photoDirectory to chyba nie katalog, skoro wsadzasz wartość z tej zmiennej do metody, która ma w nazwie "File". Popraw nazwę zmiennej albo popraw nazwę metody.
  • Infohelper ma literówkę -> InfoHelper. Ponownie - nie używaj helperów, rób serwisy z interfejsami i wstrzykuj je, co umożliwi tworzenie testów jednostkowych.
  • Komunikat "Wystąpił problem podczas przygotowywania załącznika. Spróbuj ponownie." jest bardzo lakoniczny. Skoro wiesz, że pliku nie ma albo jest pusty, to warto to użytkownikowi podać wraz z nazwą problematycznego pliku.
  • Wcięcia przy parametrach ShowMessageBox są absurdalnie duże. Trzymaj się zasady: nowy blok kodu = dokładnie jeden poziom wcięcia więcej.

Cześć,

bardzo dziękuję za to co napisałeś ;)
FileHelper, InfoHelper - czy mógłbyś podać jakiś prosty sposób stworzenia właśnie takiego FileService i dodania do tego interfejsu? Nigdy czegoś takiego nie robiłem.
CheckFileSize - oczywiście racja, nazwa powinna być inna :), sprawdzanie typu - w sumie bez sensu, wcześniej miałem tak, że wykorzystywałem tą zmienną size w komunikacie, dlatego ją sobie tworzyłem.
photoDirectory- podałem do metody z rozpędu nie tą zmienną, zauważyłem to po odpaleniu aplikacji :)
Komunikat na razie był pisany tak na sztywno, w przyszłości byłby rozbudowany.
Wcięcia - automatycznie zrobione przez VS, będę tego pilnował :)

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