Skocz do zawartości

[Sfera] Galeria zdjęć, kilka sugestii

Polecane posty

W związku z zmianą metod dla obsługi Galerii asortymentu, musiałem zrobić odpowiednie dostosowania w kodzie, i mam kilka pytań, a może sugestii.

 

Czy dało by się zmienić, aby metoda DodajZdjecie, zwracała obiekt, który utworzyła? Niby popierdułka, można Sobie go pobrać przez Last z kolekcji, ale jakbym od razu mógł mieć go w zmiennej, to łatwiej było by mi np. ustawić go jako zdjęcie podstawowe. Ewentualnie może rozszerzyć tą metodę, aby przyjmowała też parametr ustawienia jako podstawowy?

 

W jaki sposób można, prawidłowo i szybko usunąć wszystkie zdjęcia z Galerii? Kiedyś po prostu kasowało się po kolei elementy kolekcji, za pomocą Remove. Teraz po użyciu metody Usun, robiąc foreach na PobierzZdjecia(), kończy się błędem na kolejnym zdjęciu, że nastąpiła modyfikacja kolekcji. Tutaj, mogą być moje braki w programowaniu, ostatecznie poradziłem Sobie whilem, ale średnio mi się podoba to rozwiązanie, no chyba że to jest "zgodne z sztuką". A może metoda na szybkie usunięcie wszystkich zdjęć? ;)

while (galeria.PobierzZdjecia().LastOrDefault() != null) galeria.Usun(galeria.PobierzZdjecia().LastOrDefault());

 

Czy była by możliwość wprowadzeni sum kontrolnych dla tych zdjęć? Tabela Zalaczniki, taki MD5 posiada. A czemu? Popularnym jest porównywanie produktów między dwoma podmiotami i ewentualna ich aktualizacja z podmiotu głównego. Aby nie mordować serwera, robię odpowiednio analizę, co trzeba przerzucić. W przypadku zdjęć, opieranie się o sam rozmiar, wymiary, czy nazwa pliku, powiedzmy, że jest rozwiązaniem dobrym na 99%. Posiadanie sumy kontrolnej, pozwoliło by chyba lepiej i szybciej zweryfikować, czy zdjęcia w obu porównywanych bazach są zgodne. I tak, wiem, mogę ją Sobie policzyć, tylko znowu, po co wielokrotnie do tego samego pliku, co parę czasem godzin, u szalonych klientów, katować tym serwer.

Link to postu

Dziękuje za zgłoszone sugestie. Postaramy się je uwzględnić w kolejnych wersjach nexo. Przy czym zamiast wystawiania sum kontrolnych raczej pójdziemy w kierunku stworzenia metody pozwalającej sprawdzić, czy dane zdjęcie istnieje w galerii.

16 godzin temu, Radomił Ząbik napisał:

Teraz po użyciu metody Usun, robiąc foreach na PobierzZdjecia(), kończy się błędem na kolejnym zdjęciu, że nastąpiła modyfikacja kolekcji.

Rzeczywiście taki błąd może wystąpić, gdyż w trakcie iterowania po kolekcji nie można do niej dodawać, ani z niej usuwać elementów. Można to rozwiązać tak jak Pan napisał lub w pętli foreach po metodzie PobierzZdjecia wywołać ToList lub ToArray, co spowoduje przepisanie elementów do nowej kolekcji.

Link to postu
  • 1 miesiąc temu...

Potrzebuje jeszcze jednego wyjaśnienia. Jak to jest z metodą Usun, w Galerii? Jeśli dobrze rozumiem, powinna ona usunąć całkowicie zdjęcie z bazy danych. W wersji 47, jest komunikat, że ta metoda jest przestarzała i należy skorzystać z metody OdlaczZdjecie. Czy ta metoda przypadkiem, nie odłącza jedynie zdjęcia od obiektu? Ja bym chciał je jednak permanentnie usunąć.

 

EDIT:

No oczywiście, że tylko odłącza. To trochę nie nazwał bym zastąpieniem. Czemu Usun wylatuje?

Edytowane przez Radomił Ząbik
Link to postu

Zrezygnowaliśmy z usuwania zdjęć z poziomu galerii zdjęć obiektu bo zdjęcie może być używane gdzieś indziej (np. w innym towarze). 

Tworzy to pewne ryzyko, że można "niechcący" usunąć sobie zdjęcie powiązane z innymi towarami.

 

Obecnie jeżeli chcemy usunąć wszystkie zdjęcia towaru "na zawsze" należy:

  • Pobrać galerię zdjęć tego towaru (IAsortyment.PobierzGalerieZdjec())
  • Z galerii towaru pobrać zdjęcia IGaleriaZdjecObiektu.PobierzZdjecia();
  • Pobrać globalną galerią Uchwyt.PodajObiektTypu<IGaleriaZdjec>()
  • dla każdego zdjęcia do usunięcia wykonać: IGaleriaZdjec.UsunZdjecie(..) 

A pisząc po ludzku :) np. jakoś tak:

				IGaleriaZdjec galeriaZdjec = uchwyt.PodajObiektTypu<IGaleriaZdjec>();

				IAsortyment towar = PodajTowarZeZdjeciamiDoWywalenia();
				var galeriaZdjecTowaru = towar.PobierzGalerieZdjec();

				foreach (var zdjecieDoUsuniecia in galeriaZdjecTowaru.PobierzZdjecia())
				{
					galeriaZdjec.UsunZdjecie(zdjecieDoUsuniecia);
				}

 

Edytowane przez Jerzy Dudra
wyjaśnienie czegoś
Link to postu

No, czyli trochę na około, ale rozumiem obawy o usunięcia zdjęcia z wielu obiektów.

 

Na Galerii, ostatnimi czasy, najczęściej działam w programach uzupełniających dane towarowe lub synchronizujących dwa podmioty, i w przypadku pierwszego, te zdjęcia się najczęściej podmienia w 100%, a w drugim przypadku, obecnie też, bo brakuje mi sum kontrolnych, aby porównanie robić na poziomie zapytania do SQL, bez pobierania zdjęć z obu podmiotów - wydajność.

 

Generalnie to trochę jeszcze jest braków w tej Galerii na moje. Funkcji usuń nie ma też od strony zdjęć produktów, gdzie w sumie rozumiem obawy, ale można by przecież dać komunikat, że zdjęcie które próbujesz usunąć, jest połączone z X produktami - wtedy jakiś przycisk "Pokaż w galerii" i tam, no właśnie, tam mamy tylko informacje, ile obiektów jest podłączonych, ale nie wiem, jak wejść w ten obiekt. Tutaj jest spory brak w Galerii, że nie wiem, skąd to zdjęcie jest.

Link to postu
21 godzin temu, Radomił Ząbik napisał:

obecnie też, bo brakuje mi sum kontrolnych, aby porównanie robić na poziomie zapytania do SQL, bez pobierania zdjęć z obu podmiotów - wydajność.

Planujemy ten problem jakoś zaadresować w przyszłości.

21 godzin temu, Radomił Ząbik napisał:

Generalnie to trochę jeszcze jest braków w tej Galerii na moje. Funkcji usuń nie ma też od strony zdjęć produktów, gdzie w sumie rozumiem obawy, ale można by przecież dać komunikat, że zdjęcie które próbujesz usunąć, jest połączone z X produktami - wtedy jakiś przycisk "Pokaż w galerii" i tam, no właśnie, tam mamy tylko informacje, ile obiektów jest podłączonych, ale nie wiem, jak wejść w ten obiekt. Tutaj jest spory brak w Galerii, że nie wiem, skąd to zdjęcie jest.

Wiemy, że galeria wymaga jeszcze kilku szlifów. Z pewnością będzie jeszcze ulepszana w przyszłości.

Link to postu

Niestety, po testach, z tym usuwaniem zdjęć nie jest tak kolorowo. Działanie na ogólnej bibliotece jest ok, jeśli w tym czasie nie edytujemy asortymentu, a taki jest najczęstszy scenariusz. Jeśli go edytujemy, to od razu blokujemy także obiekty galerii, i metoda odłącz, do czasu wywołania zapisz, nic tutaj nie daje niestety. w efekcie, trzeba pierw przeprowadzić iterację, celem odłączenia zdjęć od obiektu, i zapisać Sobie na boku te odłączane zdjęcia, a po zapisaniu obiektu, wykonać analizę, czy było coś usunięte, i dopiero usunąć z galerii. Było by jednak miło, aby te wszystkie metody, nie wymagały, aż takich kombinacji, względem tego co było.

 

  • Lubię to 1
Link to postu
×
×
  • Dodaj nową pozycję...