#dotnet

4
13
Hej, programiści. Mam pytanie filozoficzno-techniczne.

Załóżmy, że jest sobie jakieś tam API udostępniające różne funkcje. API nie jest obiektowe i stanowi po prostu jedną płaską listę funkcji, które można wywołać z różnymi parametrami. Obowiązkowym parametrem każdej funkcji jest identyfikator klienta (pluginu), który funkcję wywołuje.
Chciałem sobie to API jakoś opakować i porobić na jego podstawie jakieś proste obiekty, którymi potem będzie można manipulować, ale nie wiem jak to rozwiązać architektonicznie, głównie przez ten obowiązkowy identyfikator, który trzeba zawsze przekazywać. Każdy jeden obiekt musiałby znać ten identyfikator, więc musiałby być on globalny. Z drugiej strony nie może być za bardzo globalny (np. jako obiekt statyczny), ponieważ teoretycznie w tej samej przestrzeni pamięci będą przebywać różne pluginy z różnymi identyfikatorami. Z kolei przekazywanie identyfikatora jawnie do obiektów za każdym razem trochę mija się z celem, gdyż właśnie tego chcę uniknąć.

Może zetknęliście się kiedyś z takim problemem, albo istnieje jakiś wzorzec na coś takiego?

#programista15k #programowanie #csharp#dotnet #cpp (dla zasięgu)
sierzant_armii_12_malp

@MostlyRenegade No to niech sobie każdy obiekt trzyma ten API key - wtedy nie będziesz go musiał za każdym razem do obiektu przekazywać. Różne pluginy w tej samej przestrzeni bdą, oczywiście, musiały korzystać z innych instancji danej klasy.

MostlyRenegade

@sierzant_armii_12_malp Właśnie wymyśliłem, że przecież i tak te obiekty muszę najpierw pobrać funkcją API, a potem wszelkie zmiany zatwierdzić innymi funkcjami, więc już na etapie ich pobierania mogę im przypisać klucz. A gdybym tworzył nowy obiekt, to nic nie stoi na przeszkodzie, aby pobrana kolekcja (w sensie obiekt) również trzymała klucz i przekazywała go obiektom w miarę potrzeby.


Czasem wystarczy napisać posta na hejto i rozwiązanie samo przychodzi ( ͡° ͜ʖ ͡°)

wombatDaiquiri

@MostlyRenegade o widzisz, a ja się zastanawiałem dla kogo pisze @elszczepano a pisze dla Ciebie - polecam jego bloga@MostlyRenegade


w większości przypadków wystarczy użyć konstruktora obiektu z parametrem: https://www.frontstack.pl/blog/constructor-design-pattern


dla bardziej specyficznych zastosowań możesz chcieć użyć: https://devszczepaniak.pl/wzorzec-projektowy-builder/ lub https://devszczepaniak.pl/wzorzec-projektowy-factory-fabryka/

koszotorobur

@wombatDaiquiri - zaoszczędziłeś mi wymądrzania się

mortt

jeśli Cię dobrze rozumiem to możesz to ogarnąć przez clousures albo klasę z konstruktorem zależy czy funkcyjnie czy obiektowo.


edit - wombat dał bardziej kompleksową odpowiedź.

Zaloguj się aby komentować

Hej, zna się tu ktoś na C++/CLI?

Jest sobie aplikacja, do której można pisać pluginy. Wtyczki mają postać bibliotek dll, które muszą eksportować odpowiednie funkcje i muszą znajdować się w odpowiednim folderze w ścieżce aplikacji np. "c:\Aplikacja\plugins\"). Interfejs i API jest natywne, ale mam narzędzie napisane w C#, które chciałem podpiąć. Jedna opcja to użycie jakiegoś starego pakietu z NuGeta (DllExport), które dokleja tablicę eksportów do dotnetowego zestawu, ale pomyślałem, że zrobię po prostu pomost w C++/CLI, z którego będą wywoływał obiekty napisane w C#.

Problem polega na tym, że nie mam pomysłu jak poprawnie skonfigurować ścieżki w projekcie, żeby wszystkie DLLki ładowały się od razu przy starcie wtyczki, bez konieczności ręcznego ładowania zestawów dotnetowych i pokazywania ścieżek. Obecnie zestawy dotnetowe muszą być obok aplikacji wywołującej (w "c:\Aplikacja\"), a chciałbym, aby były folderze z pluginami, albo jeszcze lepiej - w dedykowanym folderze wewnątrz katalogu z pluginami (c:\Aplikacja\plugins\MojaWtyczka\). Oczywiście dobrze by było, żeby wszystkie dll-ki budowały się od razu do docelowych folderów przy debugowaniu.

A może jednak trzeba napisać własny resolver, żeby pokazać, gdzie dotnet ma szukać dll-ek?

#programista15k #programowanie #cpp #csharp #dotnet
MostlyRenegade

@fadeimageone no właśnie nad czymś takim pracuję: natywna aplikacja zewnętrzna + wrapper C++/CLI i reszta w C#. Chodzi mi natomiast o konkretny problem ze ścieżkami do wszystkich potrzebnych dll-ek. Nie mogą się znajdować gdziekolwiek, gdyż wtedy to nie działa.

I jak teraz na to patrzę, to chyba najefektywniej będzie po prostu napisać własny resolver, w którym będzie wskazana ścieżka do ich wyszukiwania.

John_polack

Napisałem kiedyś kalkulator w c++ - w czym mogę pomóc?

Zaloguj się aby komentować

Siema!
Mam pewien problem... Ogólnie robię aplikacje w C# Maui na Androida. Ostatnio dodałem drugi pakiet nuget do projektu i mi zaczęły wyskakiwać błędy.
Chyba to z powodu zależności pakietów? Prawdopodobnie jeden i drugi pakiet odwołuje się do jakieś biblioteki tylko że innej wersji...
Błąd występuje w java. Zrzut ekranu z błędem dorzucam.
Pomoże ktoś?
#csharp #programowanie #dotnet #visualstudio #android #maui #csharp#csharpmaui #problem #pomoc
c952714a-2f3e-49dc-8a4e-1b83b00c15dd
rastabaddon

Raczej masz konflikt definicja wystepuje wiecej niz jeden raz. Linkujesz 2 razy ta sama biblioteke?

Meverth

@kiko pokaż ostatni 'Caused by:`

Zaloguj się aby komentować

Siema.
Mam problem... Ogólnie robię sobie apkę w C# Maui na Androida i mam tam osadzoną przeglądarkę za pomocą kontrolki WebView. Ładuje do tej przeglądarki link do playera embbed z cda. I tu jest problem po załadowaniu strony, filmiki się nie uruchamia a w logach informacje że requesty są blokowane przez politykę CORS. Da się to jakoś obejść? Próbowałem dodać jakieś nagłówki (?) do request'ów i dalej nie działa. ಠ_ಠ

#programowanie #csharp #dotnet #maui #android
vinclav

@kiko 

>kontrolka WebView

>c#

>CDA

Nie chcę Cię martwić, ale masz tam DMC.

Ja bym porzucił WebView w zamian za czysty datastream.

kiko

@vinclav Kurde zależy mi trochę żeby to jakoś działało bo kurde część linków w apce przestało mi działać...

vinclav

@kiko no to pakujesz się w cross site scripting, hmm. No nie uciekniesz od natywnej apki. Już widziałem takie akcje z jakimiś sokami na zamówienie. Poważnie lepiej wystaw jakiś protobuf API albo rest albo vnc. Ale to brzmi jak DMC jakieś.

Na szybko, czy jest czas? Bo może wystarczy postawić jakiś streaming. End user się nie zorientuje.

5tgbnhy6

@kiko do przeglądarek desktopowych są wtyczki do pomijania tego CORS checka, bo z tego co rozumiem, to jest zabezpieczenie po stronie przeglądarki. może kod tych wtyczek coś Ci podpowie

kiko

Update jakby ktoś był ciekawy...

Apke zaktualizowałem do net 8. Zauważyłem że do kontrolki WebView dodali możliwość zmiany UesrAgent'a, więc zmieniłem go na desktop'a i zaczęło działać. Zdziwienie.wav

Chyba że coś w samym CDA się zmieniło

Zaloguj się aby komentować

https://www.reddit.com/r/dotnet/comments/15ljdcc/does\_moq\_in\_its\_latest\_version\_extract\_and\_send/

it looks like Moq, starting from version 4.20, does include a .NET analyzer that scans your local git config on build, gets your email address and sends it to some service hosted in Azure to check whether or not you're a sponsor. 

tutaj dluzsza dyskusja

https://github.com/moq/moq/issues/1372

Bye Moq Alez głupia decyzja, nie da się tego rozchodzić.

#programowanie #dotnet #bezpieczenstwo #cyberbezpieczenstwo
epsilon_eridani

@bacteria znasz jakąś ciekawą alternatywę? Z tego co patrzę to wszędzie jest moq xd

bacteria

@epsilon_eridani NSubstitute

Zaloguj się aby komentować

Biorąc pod uwagę to, że jednak ludzie to zawodne maszyny (a mi ostatnio dość często udaje się nawalać, choroba itd), będę szukał osoby, która będzie mi mogła pomóc przy pracy którą wykonuję.
Nad czym pracuję? Głównie zajmuję się utrzymaniem i rozwijaniem REST API, które wykorzystuje tak zwaną Sferę(Sfera dla Subiekta nexo). Sfera to zestaw narzędzi, który pozwala wykonywać prawie wszystkie działania, jakie dostępne są w Subiekcie Nexo. Największym wyzwaniem będzie ogarnięcie tutaj rzeczy jak to nazywamy "Subiektowych", związanych z Subiektem Nexo oraz Sferą.
Aplikacja stoi na #dotnet, czyli tutaj wiadomo, że jest #csharp.
LINQ, MS SQL, Swagger, Postman, ngrok, git, trello i tego typu sprawy. Nie ma tutaj jakiś super nowych technologii, jest raczej więcej grzebania w tych starszych.
Jeśli chodzi o doświadczenie, to pewnie taki junior byłby ok. Fajnie jeśli byłby to ktoś z Rzeszowa/Dębicy lub okolic.
Nie byłoby to coś na pełen etat, tylko raczej bardziej coś dodatkowego na UZ albo jeszcze inaczej, raczej idzie się tutaj dogadać, choć to już ode mnie zależy. Znajomość #vue(tutaj to już naprawdę dobra znajomość vuejs byłaby wymagana, czyli pewnie na poziomie doświadczonego mida), czyli #webdev też mogłaby mieć wpływ na to, jakby to tutaj wyglądało, ale akurat nie jest to priorytetem i ode mnie to nie zależy.
Mój wpis nie jest pełnoprawną ofertą pracy. Otwartej rekrutacji też nie prowadzimy, z niczym też pośpiechu nie ma.
Na razie sprawdzam, czy może jakiś chętny by się tutaj znalazł.
#programowanie #praca #pracait #dotnet #csharp
ali7200

@Dissociated mogę polecić kumpla, co prawda bardziej sieciowiec i wiele rzeczy musiałbyś go nauczyć, ale za to można mu płacić w orzeszkach

Dissociated

@ali7200 Tutaj jednak dobrze by było, jeśli ta osoba miałaby jakieś doświadczenie z programowania w .net, żeby chociaż w tych technologiach siedziała/uczyła się.

Zaloguj się aby komentować

Czuje się jakbym znowu głupie pytanie zadawał XD
Jak przetestować ascyn metodę w xunit?
Mam coś takiego:
      var movieDtoNotNull = RemoteMoviesControllerMockData.MovieDtoNotNull();
      //Arrange
      _remoteMoviesService.Setup(_ => _.GetMovieAsync(-1)).ReturnsAsync(movieDtoNotNull);
      //Act
      var resultAsync = await _controller.GetMovies(_movieTitle);
      var result = (OkObjectResult) resultAsync.Result;
      //Asert
      result.StatusCode.Should().Be(200);
No i mi rzuca błędem przy result no bo castowanie do dupy itp. Jak mam w gógla wpisać testowanie (xunit) endpointa async i to jakoś przetestować? ja po prostu chce sprawdzać czy zwraca 200 czy 401
#dotnet #testowanieoprogramowania
kalimer

Może chociaż pokaż błąd cały?


Jak masz await, to dlaczego linię dalej masz jeszcze .Result?

Zaloguj się aby komentować

Chciałbym na proda wrzucić appkę w asp net core api co w sumie mam db code first. lokalnie klepałem sobie database-update itp. ale jak to z produkcją wygląda? Aktualnie na jenkinsie buduje sobie projekcik i pakuje to w kontener, powinienem tam też jakoś wywołać database-update, czy podczas pierwszego uzycia db context utworzy się cały schemat w db?
#dotnet
Voltage

@Dapred możesz sobie zawsze dodać step w jenkinsie na zrobienie migracji, ale ja tam wolę migracje przeprowadzać ręcznie żeby czasem coś z automatu nie zepsuło mi bazy. Wbudowanego sposobu na automatyczne migracje w EF Core poza context.Database.Migrate() raczej nie ma, niech mnie ktoś poprawi jeśli się mylę.

dext3

Jeśli chodzi o zarządzanie i wersjonowanie baz danych to polecam zaznajomić się z narzędziami typu Liquibase czy Flyway. To taki "git dla baz danych".

Dapred

@dext3 pierwszy raz słyszę o tym więc tym bardziej musze się zaznajomić. Wielkie dzięki

Zaloguj się aby komentować

Mam kurde problem z unit testem Napisałem sobie API i piszę teraz testy dla endpointów. Moq itp pięknie działa, testy się dobrze robią. ALE mam problem z jednym endpointem który teoretycznie zwraca listę DTO. No i tutaj mam problem bo serwis zwraca tę listę jako listę DTO z wartościami albo new List<DTO> z mappera. Kod serwisu to ten o:
var list = _context.MoviesList.Include(x => x.Movies).Where(x => x.UserId == userId).ToList();
      return _mapper.Map<List<MoviesListDto>>(list);
A w kontrolerze mam takie cudo:
var list = _userMoviesService.GetLists(GetUserId());
      if (list == null)
      {
        return NoContent();
      }
      return Ok(list);
I tutaj mam problem bo niestety lista nie jest nullem, więc zamiast oczekiwanego NoContent w teście dostaje Ok wraz z listą która jest pusta xD I po prostu teraz nie wiem, serwis powinien zwracać nulle? Czy returna opakować w jakiś obiekt w stylu ResponseDto gdzie bedzie StatusCode wraz z responsem czy jak to zrobić aby było legitnie + dało się jakoś testować?
#dotnet #xunit #programowanie
Meverth

@Dapred warunek:


if (list == null)


Zamień na sprawdzenie, czy nie jest pusta. Dziękuję, FV wyślę na priv.

Zaloguj się aby komentować

Używa ktoś Strykera? Idea testów mutacyjnych wydaje się spoko, ale utknąłem na próbie odpalenia testów tylko dla modyfikowanej metody (By dodać to do CI i nie wydłużyć za bardzo czasu trwania builda). Nijak nie bangla mi to i zawsze odpala testy dla całego pliku mimo iż dodaje --since 😔 Da się w ogóle coś takiego zrobić bez większych fikołków?
#programowanie #dotnet #testy
HannibalLecter

I jak poszło? Rozwiązałeś ten problem? Pytam bo może się przydać innym na przyszłość jeśli znalazłeś jakieś rozwiązanie

MrFab

Ograniczyłem ilość uruchamianych testów do modyfikowanego pliku. Nadal uruchamia ich więcej niż powinien, ale to i tak lepsze niż testowanie wszystkich testów 😀

HannibalLecter

@MrFab Tak tez mozna Jak z checia bym pomogl ale nigdy nie uzywalem Strykera.

Zaloguj się aby komentować

Mam web API stworzone z template dla .net core 2.1 z targetem na net framework (taki tam pokemon).
Używam tutaj dodatkowo biblioteki/zestawu bibliotek, co działa tylko pod .net framework.
W kontrolerze wywołuję jedną metodę z tej biblioteki. Po każdym wywołaniu widać, jak zapycha się pamięć, która nie chce się zwalniać. Po kilkunastu razach wywala się wyjątek OutOfMemoryException.
Użyłem DotMemory i wychodzi na to, że coś się chrzani w tej bibliotece.
Natomiast jak użyję tej biblioteki w apce konsolowej, to mogę nawet wywołać tę metodę setki razy i nic się nie stanie, pamięć ładnie się zwalnia.
Co do biblioteki, to robi duużo rzeczy na bazie danych.
Na swój chłopski rozum tego nie ogarnę -,-
#programowanie #csharp #dotnet
Besteer

@Dissociated nie ma za co. Temat niestety za głęboki na ogólne porady.

NullReferenceException

@Dissociated @Besteer spróbuj zrobić bibliotekę/wrapper jako class library w dotnet standard na tę bibliotekę subiekta i dopiero tę swoją podepnij do dotnet core. Może to coś pomoże.

Spróbuj też owinąć to jakimś interfejsem i rejestrować w DI jako scoped. Może to rozwiązać wycieki pamięci bo będzie go regularnie GC sprzątał i DI Ci będzie tworzył nową instancje dla każdego requesta. Trzeba sprawdzić jaki impact na bazę w takim rozwiązaniu bo możesz zamienić jeden problem na drugi.

Jeśli coś w bibliotece jest zjebane z zarządzaniem obiektami to może któryś z tych patentów pomóc.

Besteer

@NullReferenceException @Dissociated jak już idziemy w .NET Standard, to przy okazji może podbij to do .NET 6/7? Może być stary bug dawno rozwiązany w nowszej wersji. Spróbuj też zrobić kompletnie nowy, osobny projekt ASP .NET Core, podpiąć tylko tę problematyczną bibliotekę i w takiej absolutnie minimalnej konfiguracji sprawdź, czy też jest to samo. Może u siebie w kodzie masz coś źle i koliduje?

Zaloguj się aby komentować

Update Hejto w Windows Forms
Już jakoś to zaczyna wyglądać...
#programowanie #csharp #dotnet #windows #windowsforms #winforms #hejto
b7bb06b5-2293-4184-b30f-cb57da9fd402
veranoo

kotlin desktop miałbyś na wszystkie platformy

veranoo

@kiko Swoją drogą jak otrzymałeś dostęp do api, ja próbuje zarejstrować aplikacje ale każe się zalogować mimo że jestem zalogowany xd

kiko

@veranoo u mnie tak samo się dzieje, więc na razie wyświetlam posty jako osoba nie zalogowana. Aktualnie działa to tak że jest strzał do API po posty i to wyświetlam.

Chyba dobrze wytłumaczyłem xd

Zaloguj się aby komentować