oto pytanie pierwsze:Automatyczne generowanie silnie wpisany AppSettings klasę
Czy to możliwe? Inspirację czerpię z Joe Wrobel's work (redux zapomnianego Codeplex project). Tutaj wykonujesz swoją pracę nad stworzeniem swojego profilu dla dostawcy, a także zajmuje się tworzeniem silnego pisania dla niego, skutecznie tworząc elewację dla klasy Profile.
A teraz historia z tyłu!
Naprawdę nie podoba mi się magic strings. Są dość złe i mogą powodować poważne problemy przy aktualizacji aplikacji. Pracując w językach takich jak PHP i ColdFusion, wiem, że łatwo jest umieścić je w swojej aplikacji i zapomnieć o nich, dopóki nie trzeba ich zmienić. A potem musisz polować na każdą odmianę i odpowiednio je zmienić.
.NET nie jest o wiele lepszy, jeśli zastosujesz szablony aplikacji "od razu po wyjęciu z pudełka". Wiele przykładów tam dostępnych używa appsettings w web.config do przechowywania różnych ustawień. Jest to rzeczywiście dobre miejsce do przechowywania i jest idealne dla większości aplikacji. Problemy zaczynają się jednak pojawiać, gdy zaczniesz je wywoływać bezpośrednio - na przykład ConfigurationManager.AppSettings["MyAppSetting"]
. W takim razie nie jesteś wcale lepszy od użytkownika PHP, ponieważ używasz magicznych ciągów.
W tym miejscu przychodzi facades. Elewacje oferują sposób tworzenia silnie wpisanego obiektu z magicznego łańcucha w jednym miejscu i odsyłając go do dewelopera od reszty aplikacji.
Teraz, zamiast używać pliku web.config do przechowywania moich ustawień, używam bazy danych do przechowywania wszystkich. Po uruchomieniu aplikacji, combo nazwa/wartość są pobierane, a następnie są kolejno dodawane do ConfigurationManager.AppSettings
przez Set
. Bez biggie (poza problem miałem wcześniej!).
Ta "elewacja aplikacji" jest dostępna dla mojej warstwy danych, warstwy usługi i warstwy prezentacji i zawiera rzeczy takie jak tryb aplikacji, który punkt końcowy usługi używa yada yada yada i ogranicza potrzebę polowania na wiele ciągów magicznych, do dwóch magicznych łańcuchów - jednego (nazwa) w elewacji, a drugiego (nazwa i wartość) w punkcie tworzenia (który, dla mnie jest db).
Ta klasa elewacji nareszcie się urośnie i ostatecznie zmęczy mnie konieczność ich aktualizacji.
Tak więc chciałbym mieć klasę ApplicationFacade, która generuje się automatycznie za każdym razem, gdy kompilacja jest wykonywana. A teraz z powrotem na początek ... Czy to możliwe?
To interesujący pomysł, ale nie jestem wielkim fanem CodeSmith, szczerze mówiąc. W końcu napisałem własną klasę, która była wymagana w każdym przypadku, ponieważ nie było sposobu, aby moja aplikacja mogła wywnioskować, jaki typ były moje ustawienia. –
Dodałem trochę kodu do mojego postu. Mam nadzieję, że to ci pomoże. – Cheburek
To naprawdę ciekawe rozwiązanie! Jedną z rzeczy, z którymi wydawało się mieć problemy (a jest to VBs IsNumeric) jest "0,5,0", co według VB jest wartością numeryczną, chociaż nie jestem pewien jak! –