Aplikacje internetowe

Projektowanie i rozwój aplikacji internetowych to najczęściej wybierana usługa w aveneo. W ostatnich latach rozwiązania działające wewnątrz przeglądarek internetowych skutecznie wypierają inne programy komputerowe: aplikacje desktopowe (klasyczne) i aplikacje mobilne. Powodów jest bardzo wiele, ale wśród najważniejszych należy wymienić nieograniczoną dostępność pozbawioną kompromisów. Choć architektura naszych rozwiązań składa się z bardzo wielu warstw, w naszych aplikacjach internetowych należy zwrócić szczególną uwagę na silny podział dwóch warstw: backendu i frontendu. Dzięki takiemu podejściu oddzieliliśmy warstwę UI i UX (interfejsu użytkownika) od logiki biznesowej, modelu i bazy danych czy integracji z innymi rozwiązaniami.

Po stronie serwera (backend)

Część aplikacji internetowej odpowiedzialna za logikę procesów biznesowych, przetwarzanie i przechowywanie danych, integracje z innymi rozwiązaniami czy moc obliczeniową, dla skomplikowanych operacji i sztucznej inteligencji. Całość realizowana jest po stronie infrastruktury serwerowej, która może być rozproszona i dowolnie skalowalna, dzięki czemu nigdy nie będzie stanowiła ograniczeń dla biznesu.

.NET

Microsoft .NET Core

Microsoft .NET Core to silna podstawa każdego z naszych rozwiązań. Korporacyjne rozwiązanie dostępne na wielu platformach jest łatwo skalowalne, bezpieczne i przede wszystkim wydajne.

Dowiedz się więcej o platformie .NET Core

Po stronie serwera (backend)

Część aplikacji internetowej odpowiedzialna za logikę procesów biznesowych, przetwarzanie i przechowywanie danych, integracje z innymi rozwiązaniami czy moc obliczeniową, dla skomplikowanych operacji i sztucznej inteligencji. Całość realizowana jest po stronie infrastruktury serwerowej, która może być rozproszona i dowolnie skalowalna, dzięki czemu nigdy nie będzie stanowiła ograniczeń dla biznesu.

.NET

Microsoft .NET Core

Microsoft .NET Core to silna podstawa każdego z naszych rozwiązań. Korporacyjne rozwiązanie dostępne na wielu platformach jest łatwo skalowalne, bezpieczne i przede wszystkim wydajne.

Dowiedz się więcej o platformie .NET Core

Po stronie klienta (frontend)

Oprogramowanie działające w obszarze przeglądarki internetowej odpowiedzialne za warstwę wizualną zapewniającą doświadczenie użytkowników w aplikacji internetowej. Dostarcza nie tylko interaktywny interfejs, ale przede wszystkim stanowi połączenie ludzi z procesami i danymi w sposób tak bardzo naturalny, jak to tylko możliwe. Do tego piękne.

React

ReactJS + Redux

Framework ReactJS w połączeniu z Redux stanowią podstawę każdego naszego rozwiązania internetowego, w tym również aveneo.SDK. To jedno z najpopularniejszych rozwiązań wybierane wszędzie tam, gdzie wydajność i możliwości rozwoju stanowią najważniejsze wartości.

Dowiedz się więcej o frameworku ReactJS

Frontend oparty o ReactJS, Redux i aveneo.SDK


Niezliczone komponenty

Rozwijając aveneo.SDK stworzyliśmy bardzo dużą liczbę gotowych komponentów, które pozwalają nam skracać czas rozwoju aplikacji internetowych do minimum. Wizualizacja danych, formularze, komunikacja, uwierzytelnianie użytkowników — to tylko niektóre z elementów, o których rozwój nie musisz się martwić. Po co każdorazowo zaczynać projekt od projektowania koła?

Dzięki temu stworzenie aplikacji pozwalającej na pełne zarządzanie danymi (ang. CRUD - create, read, update, delete) zajmuje nam minuty. Do tego aplikacja tworzona w szybkim modelu boiler plate, gotowe API i mamy przepis na prototyp w rekordowo krótkim czasie.

Schemat architektury frontowej aveneo.SDK

Piekielnie prosty backoffice

Nasze rozwiązania klasy backoffice są ustandaryzowane do granic możliwości. Każda dana tabelaryczna będzie wyglądała i działała tak samo, jeżeli tylko będziesz tego chciał. Eksploracja i zarządzanie danymi nigdy nie było tak proste i przyjemne. Do tego zapamiętujemy ustawienia użytkowników i urządzeń, dzięki czemu widzą oni tylko to, co dla nich najważniejsze.

Wydajność i dostępność

Specyfiką rozwiązania opartego o ReactJS z Redux-em jest wirtualne drzewo DOM i reaktywne aktualizacje w momencie zmiany stanu aplikacji. W praktyce oznacza to, że jakiekolwiek zmiany w danych skutkują błyskawicznymi aktualizacjami aplikacji i wizualizacji danych bez czekania, aż strona "się wczyta".

Wielojęzyczność i globalizacja

Standardem w naszych rozwiązaniach jest wielojęzyczność i możliwość dostarczania interfejsu użytkownika w dowolnym języku. Idziemy jednak krok dalej - nie tylko tłumaczymy, ale prezentujemy dane w zależności od lokalizacji użytkownika. Przypisujemy dane do geolokalizacji i budujemy w ten sposób międzynarodowe rozwiązania zorientowane na rynki lokalne.

Komponenty aveneo.SDK

Komponenty dostarczają kompletną funkcjonalność z interfejsem użytkownika. Mamy również własny domyślny template, który pozwala dostarczyć gotowe rozwiązanie biznesowe w ciągu dni. Może to zostać osiągnięte np. dzięki generycznym formularzom (formularze są generowane automatycznie na podstawie metadanych modeli) i gridom z pełnym wsparciem sortowania, filtrowania, paginacji i wielu innych funkcjonalności.

Zobacz, jak wygląda aveneo.SDK

Biblioteki aveneo.SDK

Mamy dużo kodu, który współdzielimy między projektami. Rozszerzenia framework-u, algorytmy, wzorce projektowe, wielowarstwowa architektura. Udostępniamy wszystko, co może zostać wewnętrznie użyte ponownie. Podczas rozwoju takiego kodu utrzymujemy wyśrubowane wewnętrzne standardy i dokumentujemy go, a następnie szkolimy cały zespół jak go używać.

Poznaj budowę aveneo.SDK

Backend oparty o .NET Core i aveneo.SDK


Biblioteki aveneo.SDK

Mamy dużo kodu, który współdzielimy między projektami. Rozszerzenia framework-u, algorytmy, wzorce projektowe, wielowarstwowa architektura. Udostępniamy wszystko, co może zostać wewnętrznie użyte ponownie. Podczas rozwoju takiego kodu utrzymujemy wyśrubowane wewnętrzne standardy i dokumentujemy go, a następnie szkolimy cały zespół jak go używać.

Poznaj budowę aveneo.SDK

Wielowarstwowa architektura modularnego monolitu

Architektura modularnego monolitu oznacza, że dostarczamy jedno rozwiązanie z zauważalnymi granicami modułów wynikających z wartości biznesowych działalności, której potrzeby adresuje oprogramowanie. Oznacza to, że staramy się w sposób zrównoważony granulować oprogramowanie do postaci modułów, które mogą być w czasie osobno skalowalne, mogą korzystać z osobnych zasobów danych, własnych integracji, a nawet mogą być całkowicie wymienne. Dzięki komunikacji opartej o zewnętrzną szynę pozostają niezależne i wzajemnie niezawodne, co dodatkowo podnosi komfort korzystania z rozwiązania i ułatwia integrację z rozwiązaniami firm trzecich.

Schemat wielowarstwowej architektury modularnego monolitu aveneo.SDK
Możliwość wymiany modułów
Niezależny rozwój modułów
Nieograniczone integracje
Dowolna skalowalność
Rest Logo

+

Web Socket Logo

Komunikacja z wykorzystaniem REST API i WebSocket

Do komunikacji między frontend-em a backend-em wykorzystujemy dwa protokoły - bezpołączeniowy HTTP z architekturą REST-a i połączeniowe WebSocket-y. Pierwsza technologia sprawdza się bardzo dobrze przy pobieraniu i wysyłaniu dużych porcji danych. Druga pozwala nam dostarczać rozwiązania, których zawartość zmienia się w czasie rzeczywistym, a przesyłana zawartość jest minimalizowana do tylko niezbędnych danych. Dzięki temu rozwiązania mogą odpowiadać w czasie rzeczywistym na zmieniające się dane i reagować w różnych sytuacjach np. brak dostępu do sieci i serwera.

(do)Wolność integracji z innymi rozwiązaniami

Rozwiązanie internetowe to nieograniczone możliwości integracyjne. Oprogramowanie działające po stronie serwera może komunikować się z rozwiązaniami firm trzecich, począwszy od lokalnego, istniejącego już oprogramowania, po rozwiązania chmurowe i usługi takich firm jak Google, Amazon czy Microsoft.

Schemat możliwych integracji aveneo.SDK z innymi rozwiązaniami

Skalowalność i wieloplatformowość

Backend naszych aplikacji internetowych może działać praktycznie na każdej platformie sprzętowej. Wszystko dzięki platformie .NET, która dostępna jest zarówno na rodzime systemy firmy Microsoft - Windows i Windows Server, ale również na platformy Linux/Unix czy macOS. Dodatkowo rozwiązania zamykamy w kontenerach i możemy skalować je w dwóch wymiarach - wzdłuż i wszerz. Bez specjalnej ingerencji programistycznej - tak po prostu.

Windows Logo

Windows

Linux Logo

Linux

macOS Logo

macOS

UNIX Logo

UNIX

Docker Logo

Docker

Kubernetes Logo

Kubernetes

Bezpieczeństwo

Bezpieczeństwo użytkowników i danych to najważniejsza cecha oprogramowania, na którą powinien zwracać uwagę każdy, kto chce uniknąć problemów. Wykorzystanie zintegrowanego dwuetapowego uwierzytelniania, integracja z zewnętrznymi centrami poświadczeń z wykorzystaniem OAuth czy OpenID czy wreszcie uwierzytelnianie z wykorzystaniem kont Google/Microsoft/Facebook/Apple. Szyfrowanie end-to-end komunikacji, przechowywanie danych w zaszyfrowanych kontenerach to tylko niektóre ze stosowanych przez nas rozwiązań. Nasze aplikacje internetowe wielokrotnie przechodziły bardzo rygorystyczne audyty bezpieczeństwa realizowane w modelu "ethical hacking" i nigdy nie zostały wykryte poważne luki zagrażające bezpieczeństwu danych, organizacji czy użytkowników.

Szyfrowanie SSL 3.0
Dwuetapowe uwierzytelnianie użytkowników
Szyfrowanie end-to-end
Architektura zorientowana na redundancję
Ochrona przed DDOS
Audyty "ethical hacking"

Technologie "legacy"


Świat technologiczny ulega bardzo dynamicznemu rozwojowi, a wszystko to za sprawą zmieniającego się otoczenia i oczekiwań użytkowników. Poniższe technologie określiliśmy mianem przestarzałych z wielu różnych powodów - nie spełniają norm bezpieczeństwa, nie są wspierane i rozwijane przez ich twórców, nie są przenoszalne albo nie są tak wydajne, jak nowsze rozwiązania. Dzięki temu, że w przeszłości rozwijaliśmy oprogramowanie w poniższych technologiach, możemy zaoferować ich wsparcie i utrzymanie, a w ramach rozwoju migrację do nowszych rozwiązań, wskazanych chociażby powyżej.

Case study


Jesteś gotowy, żeby porozmawiać o swoim projekcie?
  • Czy znając wyłącznie potrzebę lub problem do zaadresowania przez oprogramowanie, jesteście w stanie pomóc?

    Naszym nadrzędnym celem jest nie tyle dostarczanie oprogramowania, co realne adresowanie potrzeb i rozwiązywanie problemów naszych klientów. Zanim zaczniemy wspólnie tworzyć wizję funkcjonalności oprogramowania przeprowadzimy głęboką analizę, którą ujawnimy potrzeby. Następnie ułożymy je według priorytetów na podstawie wartości biznesowych. Będziemy również szukali ścieżek do optymalizacji działania Twoich procesów biznesowych, nie tylko z perspektywy samego oprogramowania.

  • Obawiam się problemów przy tworzeniu oprogramowania wynikających z mojego braku merytorycznej wiedzy o tym procesie. Czy słusznie?

    Kluczową wartością we współpracy z klientami nieposiadającymi wiedzy technologicznej jest dla nas przybliżenie ich do technologii tak bardzo, jak to tylko możliwe. Dlatego poświęcamy dużo czasu i uwagi starannemu tłumaczeniu każdego etapu procesu powstawania oprogramowania. Służymy również doradztwem tak, aby podejmowane decyzje projektowe były w pełni świadome i podejmowane na podstawie zrozumiałych wartości.

  • Nie wiem jak zarządzać budżetem na stworzenie oprogramowania. Co robić?

    Wielu klientów boi się ujawnienia budżetu na wczesnej fazie projektu sądząc, że wpłynie to negatywnie na wycenę projektu. To najczęstszy błąd i przyczyna frustracji w procesie tworzenia oprogramowania. Realne zdefiniowanie budżetu pozwala spojrzeć na potrzeby funkcjonalne z wielu perspektyw. Posiadając świadomość ograniczonego budżetu możemy szukać rozwiązań bardziej ekonomicznych, które być może nie będą w pełni satysfakcjonujące, ale na tym etapie zaadresują potrzeby i będą wystarczające. Wraz ze wzrostem wartości biznesowej całego przedsięwzięcia obszary te mogą zostać rozwinięte, jednak nie musi się to wydarzyć od razu. Istnieje kilka sprawdzonych rozwiązań pozwalających na kontrolowany sposób zarządzania budżetem - przedstawimy je i pomożemy w tym zadaniu jak tylko się poznamy.

  • Czy rozwój oprogramowania w metodologii zwinnej nie spowoduje opóźnień, rozmycia się celów i zwiększenia kosztów?

    To jedna z najczęstszych obaw, jaka pojawia się na wczesnym etapie rozmów o realizacji nowego projektu. W skrócie: nie. Zwinne podejście do projektu nie wyklucza postawienia sobie jasnych celów i punktów na osi czasu, które mają zostać osiągnięte. Natomiast częste i małe iteracje projektowe pozwalają szybciej otrzymać pożądane funkcjonalności przy zmniejszonym budżecie. Połączenie lean developmentu z ciągłą walidacją wymagań i założeń idealnie weryfikuje wcześniejszą analizę potrzeb. De facto analiza postępuje wraz z rozwojem projektu i w sposób naturalny optymalizuje jego zakres ograniczając zbędne kroki.

  • Skąd mam wiedzieć, czy podołacie technologicznie pracując nad moim projektem?

    Jeżeli nasze portfolio nie jest wystarczającym argumentem chętnie przeprowadzimy prezentację możliwości technologicznych i porozmawiamy o wyzwaniach, które napotkaliśmy przez lata pracy nad innymi projektami i sposobu, w jaki znaleźliśmy rozwiązania problemów, które pozornie były nierozwiązywalne.

  • Jak powinna wyglądać nasza komunikacja w trakcie trwania projektu?

    W komunikacji z klientami stawiamy przede wszystkim na szczerość, otwartość i transparentność. Pozwala to uniknąć niedopowiedzeń przy jednoczesnym budowaniu trwałego, obustronnego zaufania.

  • W jaki sposób możemy zarządzać harmonogramem projektu, aby nie rozciągał się w czasie?

    Na każdy projekt patrzymy w dwóch skalach - mikro i makro. W skali makro określamy kamienie milowe dotyczące modułów i obszarów funkcjonalnych, które chcemy osiągnąć w konkretnej kolejności i punktach na osi czasu projektu. W skali mikro zarządzamy zadaniami w iteracjach nie dłuższych niż 2 tygodnie, przez co w pełni panujemy nad etapem realizacji i możemy dynamicznie reagować, na pojawiające się zagrożenia przez np. zwiększenie wewnętrznego zasobu.

  • Co, jeżeli moi użytkownicy nie będą chcieli korzystać ze stworzonego wspólnie oprogramowania, lub będą robili to niezgodnie z założeniami?

    Wdrożenie nie jest ostatnim etapem cyklu rozwoju oprogramowania w aveneo. Pomagamy w szkoleniach i treningach użytkowników. Jesteśmy do tego najlepszym partnerem, ponieważ znamy wszystkie założenia projektowe i pełną mechanikę dostarczonego rozwiązania. Da to gwarancję satysfakcji i zrozumienia rozwiązania, a przy okazji pozwoli zebrać wnioski od użytkowników dotyczące potencjalnych optymalizacji i nowych funkcjonalności.

  • W jaki sposób pogodzić wiele różnych ról użytkowników oprogramowania, aby nie powstawały wewnętrzne sprzeczności?

    W przypadku dużych projektów trudno jest zebrać wszystkich interesariuszy na każdym spotkaniu. Pojawiające się oczekiwania różnych działów, które wzajemnie się wykluczają, są rzeczą zupełnie naturalną. Naszą rolą jest zebrać wszystkie potrzeby i zaprojektować takie rozwiązanie, które uwzględni wszystkie procesy biznesowe, a te stojące w wzajemnej opozycji pogodzi w spójną i logiczną całość.

  • Mam poważne obawy, czy projekt ostatecznie się powiedzie. Jak sobie z tym radzić?

    To zupełnie normalne! Każda inwestycja niesie pewne ryzyko. W zależności od źródła obaw należy wdrożyć dodatkowy poziom zabezpieczeń. Z naszej strony postaramy się znaleźć takie narzędzia, które pozwolą pozbyć się stresu i zagwarantują sukces projektu. Przykładowo jeżeli obawy dotyczą zakresu funkcjonalnego sugerujemy wskazanie najbardziej wartościowych funkcjonalności i zbudowanie małego wycinka oprogramowania, a następnie walidację założeń i sprawdzenie w realnym środowisku, czy rozwiązanie jest satysfakcjonujące.