• 5
@blowfish: pieprzysz że tak powiem. Akurat czysty kod jest godną uwagi pozycją i jest naprawdę sporo książek które warto mieć w swojej biblioteczce. Był nawet swego czasu tutaj na mirko dobry wpis na ten temat.
  • Odpowiedz
Potrzebuję porady. Staram się w każdym moim projekcie wdrażać jakieś wzorce i działać zgodnie ze sztuką. Ale co rusz trafiam na z pozoru trywialny problem i mam blokadę. Taki sam problem mam ze wzorcem repozytorium. Niby prosty i łatwy w implementacji. Jednak z tego co rozumiem, każde repozytorium obsługuje jeden typ obiektów. Co zrobić w przypadku kiedy chcę wyciągnąć z bazy dwa typy obiektów za jednym zapytaniem z join? Przykładowo, mam ConsumptionRepository
@siemanko: No, czyli wspiera raczej JPA, więc jak chcesz, żeby wszystko było zgodnie z korpostandardami powinieneś wszystkie wiązania utworzyć w klasach @Entity i wtedy pobierając jeden typ obiektu możesz pobierać (najlepiej LAZY) połączone z nim listy obiektów/obiekty.
  • Odpowiedz
@siemanko: Wykonuje zapytanie, ale innego sposobu nie ma, bo gdzieś tego joina przecież musisz zrobić - co więcej przy lazy fetch w JPA pobranie wiązanych obiektów może być wykonane np. dopiero w obiekcie serwisowym (tylko w tej samej transakcji...) dzięki czemu repo pozostaje czyste od innych obiektów tak naprawdę.
A w repo (czyli lepiej zaprojektowanym DAO a niekoniecznie tylko CRUD) oczywiście mogą znajdować się funkcje filtrujące wyniki po składowej encji (też
  • Odpowiedz
@Algeroth: np. strategy: rejestracja usera który wybiera opcje aktywacji konta - email, sms, telefon - potem uzywasz dependency-injection(spring) aby wywołać odpowiedni algorytm na podstawie wybranej opcji.
  • Odpowiedz
Miałbym do Was kilka pytań o architekturę bardziej zaawansowanej aplikacji w Laravel.

Obecnie mój projekt obfituje dziesiątki antywzorców, takich jak trzymanie logiki i walidacji danych w kontrolerze, brak obiektowości itd. itp.

Chciałbym to wszystko jak najszybciej zrefaktoryzować do wzorca "Repository Pattern".

Co prawda, w internecie jest mnóstwo artykułów na temat Repository Pattern w Laravelu, ale każdy różni się nieco od pozostałych, brakuje też jakichś bardziej zaawansowanych przykładów.

Stworzyłem 3 repozytoria, pobierające dane
@kot1401: Zamiast pytać jak pisać klasy – zacznij pisać testy (jednostkowe).

Dlaczego? Bo wiele rzeczy TDD wymusza, które są pozytywne z architektonicznego punktu widzenia.

Np:

* W środku metody

buy()
robisz odwołanie do

Config::get()
– miałbyś bardzo ciężkie życie, żeby to przetestować i natychmiast zacząłbyś konfigurację wstrzykiwać (np w konstruktorze) – tym samym spełniłbyś http://en.wikipedia.org/wiki/Inversion_of_control

* Zastanawiasz się czy zrobić jedną czy trzy klasy? Testując zobaczyłbyś jak realnie dużo robi już
  • Odpowiedz
@Crypton3: z Helionu bardziej polecam książkę dwóch Martinów

@kuhar: idąc tokiem rozumowania autora bloga, MVC również zostało wymyślone przez klub teoretyków i jest stosowane przez bezmyślne masy, w tym twórców większości frameworków webowych. Jeśli post nie jest prowokacją, współczuje osobom które mają styczność z jego kodem, na pewno był kiedyś dumny z nieświadomie stworzonego singletona.
  • Odpowiedz
  • 1
@mathix: aplikacja okienkowa na WinFormsach z użyciem MVP i własnych do tego interfejsów. W tej bazie chcę składować poszczególne algorytmy sortowania. W drugim pojemniku chcę składować algorytmy wypełniania tablicy. No i właśnie siebie się pytam, czy zrobić to w formie singletona, czy wrzucić te kontenery odpowiednio do prezenterów okien wyboru, czy jak... :P
  • Odpowiedz
@Sejm: zaprojektuj sobie maszynkę stanów która pozwoli na zorganizowane zarządzanie scenami. Oprócz tego niech każda scena posiada swój graf w którym przetrzyma wszystkie jednostki przeznaczone do rysowania na ekranie. Potem sobie deleguj z pętli gry update i render do maszynki stanów a stamtąd do grafów w każdej ze scen. I już masz fajny prosty szkielet którym łatwo zarządzać.
  • Odpowiedz
@Sejm: W poprzednich projektach #libgdx stosowałem standardowe obiektowe drzewko

Dla przykładu tu masz źródła gry, którą zrobiłem w 48h i opierała się właśnie na tym (mocno zasyfiony/zahackowany schemat ze względu na czas, ale koncepcje można zobaczyć) http://www.ludumdare.com/compo/ludum-dare-30/?action=preview&uid=28690

Obecnie próbuję coś zdziałać z systemami encji (kompozycja zamiast dziedziczenia), a konkretnie z Ashley. Relacjonuję przebieg na mirko pod #lukzdev. W skrócie każda encja składa się z różnych komponentów, a konkretne systemy przetwarzają
jasiek13 - @Sejm: W poprzednich projektach #libgdx stosowałem standardowe obiektowe d...

źródło: comment_qrhZB9esmzIS2oW76KciIZl0X61i8UzT.jpg

Pobierz
  • Odpowiedz
Mam sobie encję. Chcę na niej i jej plikach wykonać „niebezpieczne” operacje, więc wypadałoby się zabezpieczyć backupem.

Mam dwa pomysły jak to zrealizować. Opinie?

Encja i jej backup:

https://gist.github.com/MacDada/c9a7480c5ba613a43e98

Pomysł1:

BackupFactory
:

https://gist.github.com/MacDada/9459c182ac40cd35bd22

+ zwięzłe użycie i implementacja

-

Task
musi znać dwie klasy (

Backup
i

BackupFactory
)

- magia (backup sam znika wraz z obiektem)

Pomysł2:

BackupManager
:

https://gist.github.com/MacDada/f60b59c12ee7bcc5c1b9

+ backup jest wyraźne usuwany

+

Task
musi znać jedną klasę
  • 1
Ja głosuje na 2. Kod jest bardziej wyrazisty i łatwiej w przyszłości się go będzie czytać. Konstruktory i destruktory nie służą do tego do czego chcesz je użyć, wiec może to budzić niezrozumienie.
  • Odpowiedz
@MacDada: Jaki backup factory? To zadne faktory nie jest... Jesli juz chcesz kombinowac to zrob sobie serwis do backupowania, wstrzyknij go do commanda i na nim operuj. Destruktor jest wywolywany w momencie unsetowania obiektu, nie sluzy do usuwania go. Tak samo constructor, w konstruktorze tylko ladujesz propertiesy, backupo powinien odbywac sie w innej metodzie. Faktory to wzorzec projektowy, poczytaj o nim.
  • Odpowiedz
Ktoś wie jak wygląda implementacja (w Javie) Singletona, tylko takiego, żeby dało radę stworzyć np. 3 obiekty? Hmm takie zadanie dał nam gościu na egzaminie i do teraz się zastanawiam jak je rozwiązać. W spojlerze implementacja Singletona pozwalającego stworzyć jeden obiekt


private static Singleton unikalnaInstancja;


private Singleton(){}


public static synchronized Singleton tworzenieInstancji(){


if(unikalnaInstancja=null){


unikalnaInstancja = new Singleton;


}


return unikalnaInstancja;


}


#programowanie #java #wzorceprojektowe #singleton
Singletona, tylko takiego, żeby dało radę stworzyć np. 3 obiekty?


@plusiarz: no to singleton czy 3 obiekty, zdecyduj sie cumplu bo zakreciles mi w glowie ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@plusiarz: To ja tylko dodam, że taki twór nazywa się multiton i rzeczywiście jest wykorzystywany, ale rzadko. Np. na anglojęzycznej wikipedii masz opis z przykładem implementacji.

W podanej tam Javowej implementacji oczywiści można sprawdzać, czy rozmiar mapy > 3. W dodatku lepiej zamiast typu Map użyć typ Hashtable, który ma wbudowane mechanizmy "thread-safe".
  • Odpowiedz
Hej.

Mam klasę która obsługuje polecenia podawane przez użytkownika w konsoli. Tzn jest pęta while(true) która czeka na polecenie i dopasowywuje to co podał użytkownik do odpowiedniej metody, wyciąga argumenty iip.

np:

add node 1
remove node 2
itp

I teraz pytanie. Jak to zrobić mądrze i elegancko ? IFy ?Jeśli będę obsługiwał wiele poleceń z różnymi parametrami, zakopię się z ifami i nic nie będzie czytelne oraz łatwe do rozbudowy. Jest
@marooned: Jaki to język?

W języku wysokiego poziomu rozwiązanie jest proste, np.

var actions = {

'add': function(arg1, arg2) {

//magia

},

'remove': function(arg1, arg2) {

}

}

itd. (można zamiast definiować w konkretnym miejscu użyć tylko identyfikatorów funkcji)

A potem tylko wywołać ładnie

if (command in actions) {

actions[command](argumenty);

}

switch
też jest okej.
  • Odpowiedz
@sylwke3100: Takie większe obiekty lepiej referencją przekazywać. Jak jeszcze referencja będzie const to kompilator będzie mógł sobie temporary zrobić jakbyś chciał konstruować coś z innego typu (np podając "blac" jako std::string).
  • Odpowiedz
  • 2
#programowanie #wzorceprojektowe #cpp

W trakcie pisania menedżera zadań...

Mój menedżer opiera się na wzorcu Odwiedzającego, ale potrzebuje coś do transakcyjności dla wizytatora instalacji.

Jak to zrealizować? Można użyć wzorca Polecenie, ale w jaki sposób, aby wykonać tą transakcyjność? Stworzyć stos poleceń?

Macie jakieś protipy?
@japer: No, więc tak to można zrobić :) commit() po prostu czyści twoją historię i żadnego rollbacka na tych obiektach nie woła (no i tego commita wołasz sobie jak już wszystko odwiedzisz i wiesz, że wszystko jest ok). Destruktor natomiast robi rollback - zawła się on jak przyleci wyjątek.
  • Odpowiedz