Biblioteki mogą robić dosłownie wszystko. Ich zadaniem jest rozwiązywanie problemów, upraszczanie, udostępnianie czegoś. Ja na przykład bardzo bluzgałem ostatnio na oficjalną bibliotekę do Minio Storage. Ewidentnie pisał to ktoś kto nie miał pojęcia o .NETcie (rozwiązanie portowane chyba z JavaScript)\
Gdzie są biblioteki?
https://github.com/quozd/awesome-dotnet
Ano tu na przykład :)
Dla mnie najważniejsze cechy dobrej biblioteki to:
1. Prostota, prosty interfejs. - im mniej dziwnych rzeczy trzeba w kodzie zrobić by zdziałać to co ta biblioteka ma faktycznie robić tym lepiej. Po co mam korzystać z biblioteki, której zrozumienie i zastosowanie w moim kodzie pochłonie więcej czasu niż jakbym napisał sobie oferowane funkcjonalności sam.
2. Dobra i przejrzysta dokumentacja - nawet najlepsza biblioteka nie będzie lubiana jeśli nikt nie będzie umiał z niej skorzystać.
3. Przeciążenia. Dużo przeciążeń - postaraj się o to by użytkownik Twojej biblioteki nie musiał cały czas wykonywać w swoim kodzie rzutowań by skorzystać z Twoich metod. Popatrz na defaultowe biblioteki .NETa. Wiele metod ma po kilka, kilkanaście przeciążeń. Dzięki temu są uniwersalne i możemy z nich łatwo korzystać.
4. Pluginowość - jako użytkownik chcę mieć wpływ, chcę móc wstrzykiwać do Twojej biblioteki własne rozwiązania. Chcę móc customizować jej zachowanie. Pozwól mi zaimplentować interfejs i wrzucić do Twojej metody własną klasę zmieniając nieco zachowanie algorytmu. Wszędzie tam gdzie nie jesteś przekonany czy rozwiązanie, które proponujesz jest jedynym prawilnym podejściem, stwórz rozwiązanie defaultowe ale pozwól na jego podmienienie. Przykład? Twoja biblioteka może zapisywać wyniki do pliku CSV za pomocą klasy ResultToCsvConverter ale dodaj interfejs IResultConverter i to jego przekaż do metody SaveToFile. Wersja podstawowa metody SaveToFilemoże być taka SaveToFile(string resultPath) ale przeciąż ją SaveToFile(string resultPath, IResultConverter converter). Dzięki temu mogę wywołać tą drugą i przekazać tam moją klasę np ResultToPdfConverter implementującą interfejs konwertera i to na moich barkach będzie spoczywało żeby konwerter wypluł coś sensownego.
Życzę przyjemności z kodzenia bibliotek, może nawet kiedyś użyję jednej z Twoich :) Powodzenia i pozdrawiam.