przemekwa / LiczbyNaSlowaNET

Konwerter liczb na odpowiedniki słowne z zachowaniem polskiej gramatyki.
http://blogprogramisty.net/zamiana-liczby-na-slowa-z-polska-gramatyka-c/
MIT License
18 stars 11 forks source link

Rozdzielenie kontenera IoC lub rezygnacja? ;) #7

Closed ZmorzynskiK closed 7 years ago

ZmorzynskiK commented 7 years ago

Na wstępie: bardzo fajny projekt, czegoś takiego brakowało w polskim .NET 👍

Pierwszą wersję biblioteki pobrałem kilka miesięcy temu i bardzo mi się spodobała, bo był to po prostu jeden plik DLL, który robił to co do niego należało. Ostatnio jednak zorientowałem się, że jest błąd podczas tworzenia tekstu dla numeru np 10.5 w sytuacji, gdy decimal.ToString zwraca 10,5 (np dla locale PL) - wtedy zamiast dziesięć złotych pięć groszy dostaję dziesięć złotych pięć tysięcy groszy. Rozwiązaniem jest decimal.ToString( CultureInfo.InvariantCulture ) w metodzie NumberToText.PrepareNumbers - i ta zmiana jest już wprowadzona w obecnej wersji na repo.

Jednak przyznam, że przed wykorzystaniem aktualnej wersji z repo, powstrzymał mnie fakt, że obecnie biblioteka ma szereg zewnętrznych zależności, tzn Castle.Core i Ninject. Chodzi o to, że w sytuacji, w której korzystam z Autofac jako kontenera IoC, czuję wewnętrzny imperatyw powstrzymujący mnie przed wykorzystaniem biblioteki, która wykorzystuje zupełnie inny kontener IoC. Byłaby to jedyna biblioteka w projekcie, która ma zależność kontenera IoC.

Wiem, że wykorzystanie kontenera sporo ułatwia, ale co sądzisz o tym, żeby może spróbować wrócić do prostszej wersji (bez zależności od kontenera) albo rozdzielić projekt tak (wprowadzając jakiś dodatkowy poziom abstrakcji), aby udało się pozbyć bezpośredniej zależności biblioteki od konkretnych kontenerów? Oczywiście deklaruję pomoc w tym temacie, o ile będzie potrzebna.

przemekwa commented 7 years ago

Cześć. Dzięki za informację zwrotną. Jak najbardziej się z Tobą zgadzam aby zrezygnować z IoC. Na początku był to tylko test jak można zastosować Ninject a potem jeden z kolegów dodał pewna funkcjonalność i mocno się oparł o kontenery no i zrobiło się trochę duża zależność aby szybko było mozna się pozbyć kontenerów.

Największy problem jest dla mnie fakt, że nie wiem jak ta biblioteka powinna się prezentować dla klienta. Czy to powinna być statyczna klasa i metoda, tak jak jest teraz czy coś bardziej skomplikowanego dla klienta ale łatwiejsze utrzymaniu czystego kodu.

No i drugie pytanie na które już trochę się skłaniam, czy to ma być w przyszłości tylko biblioteka do polskich słówek i liczebników czy tez dla innych języków? Teraz planuje aby było to tylko biblioteka do polskich liczebników i walut. To ułatwia i uprasza trochę projektowanie...

Mam trochę czasu dziś i jutro więc nad tym popracuje. Zrobię tak aby pozbyć się kontenera i zostawić czystą postać tak abyś nie miał żadnych oporów. Będę wdzięczny za informacje zwrotną jak to wyszło. Dam znać.

Stay in touch.

ZmorzynskiK commented 7 years ago

Super, cieszę się, że planujesz zrezygnować z IoC w tym przypadku :)

Jeśli chodzi o użycie biblioteki przez klienta, to moim zdaniem jeśli czystość kodu biblioteki nie ucierpi zbytnio, to sensownie jest zostać przy statycznej klasie i metodzie, nie ma co chyba komplikować sprawy. Zawsze można w przyszłości zrobić jak JSON.NET czyli podstawowe, proste funkcje są dostępne przez statyczną klasę/metodę, a więcej kontroli za pomocą jakiejś instancji.

Hm chyba też proponowałbym zostać przy języku polskim i dopieścić jego obsługę. Zwłaszcza, że nazwa biblioteki jest... taka polska :) A z drugiej strony, jak uznasz, że język polski jest już dopieszczony w 100% , to zawsze możesz wykorzystać zdobyte doświadczenie i zrobić NumbersToWordsNET :)

przemekwa commented 7 years ago

Cześć, zrobiłem. Na gałęzi master jest wersja bez kontenera. Dodatkowo dużo innych elementów się poprawiło. Jeszcze będę pracował nad tą wersją 1.0.0.4.

Był bym wdzięczny za informację zwrotną lub jakieś konkretne zmiany jeśli masz na coś pomysł.

przemekwa commented 7 years ago

Cześć. Postanowiłem wystawić nową wersję do Nuget-ów więc teraz w nugetach jest wersja 1.0.4, która (jak się zindeksuję nuget.org) będzie dostępna i będzie bez kontenera DI.

Wystawiłem również realese 1.0.0.4 na github-ie.

Więc mam nadzieje, że zachęciłem Cię do używania biblioteki.

ZmorzynskiK commented 7 years ago

Wow, szybka reakcja, dzięki :) Na razie zaktualizowałem i skompilowałem - wszystko wygląda super, zastosuję to do projektu. Albo może faktycznie poczekam aż na nugecie się pojawi i wtedy wezmę bezpośrednio stamtąd.

Postaram się potem rzucić okiem na kod i jak będę miał coś sensownego do zaproponowania, to będę pisał i forkował w razie czego :)

Pozdrawiam!

przemekwa commented 7 years ago

Już jest wersja 1.0.4 dostępna na nuget-ach. Możesz śmiało podłączać. Czekam z chęcią na komentarze. Pozdrawiam