Cleaner .NET – stan obecny, kierunki rozwoju | DSP 2017 #1

Konkurs już ruszył, więc czas najwyższy wziąć się za rozwijanie projektu. Gdybym zaczynał pisać coś od zera, zapewne przedstawiłbym mój zamysł, w kwestii tego, jak końcowy projekt ma wyglądać, jakie funkcjonalności zapewniać, a następnie zacząłbym go pisać i… przedstawiać efekty mojej pracy właśnie tu na blogu. „Problem” w tym, że ja projekt jako taki mam już napisany, o czym wspomniałem w poprzednim wpisie. Dlatego pomyślałem, że fajnie byłoby poświęcić chociaż jeden wpis temu, co do tej pory zrobiłem. Co prawda już kiedyś przedstawiałem tę aplikację, jednak tylko ze strony użytkowej. Dodatkowo od tamtego czasu zdążyłem wprowadzić kilka małych poprawek 😉

Na początek kilka słów przypomnienia i screenów

No dobrze, żeby ten wpis miał ręce i nogi to na początek przypomnę, że Cleaner .NET to program służący do czyszczenia systemu ze zbędnych plików. Jego design prezentuje się następująco:

Myślę, że jeżeli chodzi o samą prezentację, to tyle wystarczy. Jeżeli ktoś chce pobrać program i go przetestować to zapraszam do zakładki „Moje projekty”. Napomnę tylko, że skompilowana wersja gotowa do pobrania, jest nieco starsza niż ta dostępna na GitHubie. Różnice są kosmetyczne, więc myślę że link uaktualnię, kiedy zmiany będą bardziej widoczne. Niemniej jednak niecierpliwi mogą oczywiście sami kompilować sobie najnowsze wersje, zawsze dostępne na GitHubie.

No i w końcu… Kod!

Zacznę może od tego w jakiej technologii aplikacja została napisana. Jest to .NET/C#/WPF. Co za tym idzie w sposób mniej lub bardziej udolny zastosowałem w kodzie wzorzec MVVM. Do jego implementacji używam frameworka MVVMLight. Drzewo projektu prezentuje się mniej, więcej tak:

Nie będę się tutaj zbytnio rozwodził nad szczegółami działania kodu. Zajęłoby mi to ładnych kilka (może i kilkanaście) stron A4, a komu chciałoby się to czytać… Poza tym konkurs zakłada rozwijanie projektu, a nie rozwodzenie się nad tym, co już jest. Szkoda czasu, a biorąc pod uwagę, to co chcę jeszcze zrobić, będę miał jeszcze masę kodu(i problemów z nim), nad którym będę mógł się tutaj rozwodzić ;)

Struktura projektu prezentuje się następująco:

1. Pliki *.resx z językami (póki co tylko z polskim i angielskim)

2. Cała logika aplikacji:

– Build.cs – Prosta klasa z jedną właściwością, informującą o wersji assembly programu. Wyświetlam ją w zakładce „O programie”, coby się nie pogubić w różnorakich wersjach.

– CleanClass.cs – Klasa implementująca metody usuwające pliki. Można tu znaleźć metody, które są wywoływane po zaznaczeniu odpowiednich CheckBox’ów w zakładce „Cleaner → Windows”.

– FrameworkVersion.cs – Prosta klasa z metodą sprawdzająca, czy w systemie obecny jest .NET w wersji 4.5 lub nowszej. Wykorzystuję ją przy starcie aplikacji. To dosyć ważne, bo wykorzystuję w kodzie wątki asynchroniczne, więc bez .NET’a 4.5 ani rusz 😉

– Informations.cs – Jak sama nazwa wskazuje, jest to klasa z klasa, z której możemy „wyciągać” informacje. Takie jak wersja programu, czy nazwa użytkownika, który uruchomił program.

– PluginLoader.cs – Klasa odpowiadająca za ładowanie i obsługę pluginów aplikacji. Jest to element, który można by trochę poprawić… Jeżeli się na to zdecyduję to na pewno poświęcę mu jakiś wpis.

– Settings.cs – Klasa odpowiadająca za zapisywanie ustawień aplikacji. Takich jak ostatnio zaznaczone elementy. Swego czasu trochę nad nią siedziałem. Głównie przez to, że zapisuje ona elementy dodawane do programu przez pluginy. Ustawienia muszą być, więc dodawane na bieżąco.

– SystemInformation.cs – Stąd pobierane są wyświetlane w oknie programu informacje o systemie.

– XmlReader.cs – Klasa służąca do odczytywania zapisanych ustawień aplikacji. Stworzona dlatego, że standardowe odczytywanie nowo dodanych elementów po prostu nie działało. Rozwiązałem ten problem odczytując wartości ręcznie z pliku z ustawieniami. Do tej sprawy też musiałbym wrócić.

3. Pliki zasobów – Tutaj umieszczone są wszelkie grafiki.

4. ViewModel – Z kolei tutaj umieszczone są ViewModele. Pomimo, że program posiada tylko jedno okno główne, pozwoliłem rozbić sobie ViewModel na kilka plików – po jednym dla każdego TabItem’u. Znacząco poprawia to czytelność kodu i pozwala na łatwiejszą rozbudowę projektu.

Jeżeli ktoś ma chęć szczegółowo przejrzeć kod to jest on dostępny pod tym adresem: https://github.com/lukaszpl/Cleaner.NET. Oczywiście będę wdzięczny za wszelkie uwagi 🙂

Co chcę zmienić/dodać/ulepszyć?

Nie mam sztywno ustalonego planu działania. Na pewno chcę dodać do programu funkcję przeszukiwania rejestru pod kątem zbędnych wpisów i tym zajmę się na dobry początek. Zadaję sobie sprawę, że nie będzie to zbyt łatwe – tym bardziej przy moim poziomie doświadczenia. Jednak jeżeli uda mi się z tym dosyć szybko uwinąć, to roboty będzie jeszcze masa… Pisanie nowych pluginów, może stworzenie jakiegoś modułu usuwającego niechciane oprogramowanie(coś jak AdwCleaner?), no i przede wszystkim poprawianie estetyki kodu… Tego chyba nigdy za wiele. Pomysłów na rozbudowywanie projektu jest masa, tylko czasu niewiele. Może wy też podrzucicie jakieś pomysły? Inspiracji nigdy za dużo :) Pod koniec konkursu zrobię małe podsumowanie tego, co udało mi się zrobić przez cały ten czas. Sam jestem ciekawy efektów. Może kiedyś będzie to naprawdę narzędzie dorównujące innym tego typu – a do tego otwarte i darmowe? Można sobie przecież pomarzyć ;)

180 total views, 1 views today