NOVERA.Software

03 · Architektura

Jedna aplikacja, cztery warstwy.

Interfejs

Razor PagesBez frameworkaBez etapu budowaniaTokeny projektowe21 wspólnych kontrolek5 językówMobile-first

Moduły

Księga główna, zobowiązania i należnościBankowośćVATRaportyInwestycjeAI dla dokumentówPoczta e-mailKomunikatorTerminarzNotatkiPowiadomienia

Usługi

Silnik księgowańMagazyn danych finansowychSilnik VATMagazyn danych raportówSilnik inwestycyjnyUzupełnianie dokumentówKursy walutTłumaczenie82 usługi

Dane

SQL ServerHQFLAUEUKatalog językowyRęcznie pisany SQLParametry wiązaneBez ORM

Bramka AI

  • Jedna usługa dla każdego wywołania
  • Domyślnie Claude Sonnet 4.5
  • Klucz wyłącznie ze zmiennej środowiskowej
  • Klucz ani treść nie są logowane

Usługi zewnętrzne

  • Kursy walut EBC
  • Źródło notowań rynkowych
  • Poczta transakcyjna
  • Bramka SMS
  • Web Push

Zadania w tle

  • Cykliczny przegląd przypomnień
  • Dostarczanie powiadomień
  • Segregacja skrzynki odbiorczej
  • Wyszukiwanie faktur

Opis platformy

Architektura platformy

NOVERA to jedna aplikacja ASP.NET Core 8 zbudowana na Razor Pages, wdrażana jako pojedynczy zestaw (assembly), a jej wnętrze jest proste. Około 320 plików C# i Razor zawiera mniej więcej 182 000 wierszy kodu aplikacji, uzupełnionych przez 82 usługi i około 22 000 wierszy arkuszy stylów.

Dwa wybory kształtują wszystko inne.

  • Projekt zawiera dokładnie jedno odwołanie do pakietu i nie wolno dodać żadnego nowego pakietu.
  • W całym rozwiązaniu nie ma mapowania obiektowo-relacyjnego, frameworka front-endowego ani etapu budowania.

Dostęp do danych. Cały SQL jest pisany ręcznie, w dosłownych ciągach interpolowanych, z typowanymi, wiązanymi parametrami w każdym miejscu. Jedyne odwołanie do pakietu istnieje ze względu na dołączoną do niego bibliotekę klienta SQL; projekt nie używa mappera.

  • Korzyść: każde polecenie wydawane przez system można przeczytać, wyjaśnić i dostroić. Ma to ogromne znaczenie wobec dwudziestoletniej księgi o nietypowych konwencjach.
  • Koszt: poprawność opiera się na dyscyplinie zamiast na frameworku i dlatego istnieje zestaw bramek opisany w części Inżynieria.

Front-end. Zwykły HTML i CSS z kilkunastoma niewielkimi modułami w czystym JavaScripcie, bez bundlera.

  • Arkusz tokenów definiuje paletę barw, odstępy i promienie zaokrągleń; arkusz stylów aplikacji jest na nim zbudowany; trzeci plik zawiera punkty przełamania i nigdy niczego nie przekolorowuje.
  • Dwadzieścia jeden wspólnych częściowych widoków Razor pełni rolę kontrolek wielokrotnego użytku (stronicowanie, karta odwracana, panel szczegółów, przeglądarka dokumentów, edytor pól, znacznik podmiotu, edytor tekstu sformatowanego i inne), dzięki czemu reguła jest ustalona w jednym miejscu i dziedziczona wszędzie.
  • Szata graficzna opiera się na ciemnym granacie i złocie z krojami pisma hostowanymi na własnym serwerze, a układ jest projektowany od urządzeń mobilnych w górę w pięciu nazwanych przedziałach szerokości ekranu, z jedną powierzchnią nawigacji widoczną w danym momencie i polami dotyku o wielkości czterdziestu ośmiu pikseli.

Języki i praca w tle. Interfejs jest dostępny w pięciu językach, z 3196 kluczami zmieniającymi się razem jako jeden pakiet; nazwy przechowywane w bazie danych są tłumaczone przez tłumacza z pamięcią podręczną zamiast ponownego wprowadzania. Wewnątrz aplikacji działają cztery usługi w tle: przypomnienia, powiadomienia, segregacja poczty e-mail oraz wyszukiwanie faktur.

Bezpieczeństwo podąża tą samą zachowawczą linią:

  • uwierzytelnianie oparte na plikach cookie, z podmiotem przenoszonym w oświadczeniach (claims);
  • hasła przechowywane jako skróty PBKDF2-SHA256 obliczane przy 210 000 iteracji;
  • logowanie z ograniczeniem częstotliwości i sesje wygasające po dwóch godzinach;
  • każdy sekret w systemowej zmiennej środowiskowej, nigdy w pliku udostępnianym przez serwer WWW;
  • niezaufany HTML oczyszczany wszędzie, gdzie jest renderowany;
  • cała diagnostyka SQL uruchamiana na katalogach produkcyjnych z zasady wyłącznie do odczytu.