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: 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ż
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ż
@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.
@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
@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ć.
@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ą
Pobierz jasiek13 - @Sejm: W poprzednich projektach #libgdx stosowałem standardowe obiektowe d...
źródło: comment_qrhZB9esmzIS2oW76KciIZl0X61i8UzT.jpg
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ę
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.
@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.
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
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.
#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.