możesz mi wyjaśnic co to jest?
@down
Musisz rozdać trochę punktów reputacji innym forumowiczom zanim będziesz mógł przyznać je użytkownikowi Rollercoster ponownie.
Wersja do druku
Kontroler ma za zadanie kontrolować workflow ( w ujęciu MVC , that is ) . Dodajesz mu dodatkową odpowiedzialność poprzez wstawianie do niego kodu odpowiedzialnego za widok. ;p
@edit
I mylisz pojęcia. View to widok, który zawiera w sobie LOGIKĘ wyświetlania widoku. To o czym mówisz to szablon.
Ja generalnie w swoich projektach stosuje architekturę cebulową + DDD i sprawdza się swietnie. Przykładowy request dla pobrania listy blogów:
( W nawiasie piszę co konkretnie klasa robi ):
index.php ->
DI::createRouter() ( tworzę router z kontenera DI ) ->
Router::createRouteFor(IRequest $request) ( produkuję instancję interfejsu IRoute ) ->
DI::createController(IRoute $route) ( zwracam kontroler do obsługi żądania, wraz z zależnościami IListApplicationService $service który jest serwisem aplikacji oraz IRequest $request, czyli instancja requestu ) ->
ShowListController::run() ( mapuje request, czyli parametry GET/POST/COOKIE i tak dalej na konkretne zapytanie do API aplikacji ) ->
GetBlogListApplicationService::getList($offset,$li mit) ( API dla zwracania listy blogów ) ->
BlogRepository::getRange($offset,$limit) ( Tworzy ogólny request do repozytorium danych ) ->
DataRepository::find($constraints) ( Na podstawie zadanych warunków z API repozytorium ustala czy dane są może w keszu aplikacji bądź w 3rd party keszu [ memcache np ] , jeśli nie - tworzy konkretne zapytanie, a z wyników tworzy obiekty domenowe ) ->
DatabaseManager::runQuery($query) ( Ustala odpowiednią instancję do której zapytanie powinno być skierowane, przydatne, kiedy masz wiele milionów rekordów i na podstawie metadanych zapytania ( typ zapytania, jakiś konkretny warunek potrzebujesz wywołać je z góry na określonym serwerze/grupie serwerów ) ->
IDatabaseAccessLayer::query($query) ( Zapytanie do bazy i zwrot wyników ) ->
ShowListController::run() ( Wracamy spowrotem do kontrolera z zdobytymi danymi z service API , to ogółem jest to samo wywołanie co wyżej tylko napisałem je aby było wiadomo, że wróciliśmy do tego punktu :D ) ->
BlogListView::render($data) ( renderuje dane )
index.php ( z kontrolera mamy wyrenderowane dane o blogach ) ->
robimy co chcemy ( dekorujemy layoutem statycznym, dekorujemy innymi wywołaniami kontrolerów, w/e )
@edit2
i żeby nei było, to są calle dynamiczne a nie statyczne, żeby jakis geniusz nie wyleciał mi zaraz xDD
to teraz pytanie ode mnie:
jakie są najpopularniejsze/najczęściej uzywane wzorce projektowe w C#?
o to to !
Razem z @zakius ; 'em zajebaliśmy się na początku naszej rozmowy.
Szablon a widok to jednak dwie różne rzeczy, w sumie teraz się nad tym zastanowiłem :D
Ja np mam trzy interfejsy w systemie: IView ( widok ), IRenderer ( renderer ) i szablon, który jest zwykłym pathem :D
Wygląda to mniejwięcej tak ( jakiś przykładowy interfejs ):
Kod:class CompomentView implements IView {
private $renderer;
public function __construct(IRenderer $r){
$this->renderer = $r;
}
public function render(ISomeDependencyData $data) {
[...]
$this->renderer->render($data_simple);
}
}
Kod:$modelData = $someService->getMeData();
$c = new ComponentView($dependency, new PHPRenderer('includes/szablon.php'));
$c->render($modelData);
$c = new ComponentView($dependency, new LatteRenderer('includes/szablon.latte'));
$c->render($modelData);
[.. lub dowolna inna implementacja .. ]
Macie pomysły na jakieś projekty, które powinienem zrobić żeby się rozwijać dalej w kierunku programowania? (C++)
Jestem po dwóch kursach uczelnianych (podstawy programowania i programowanie obiektowe, jeśli Wam coś to mówi) i przerobiłem większość książki Grębosza (Symfonia C++)
Tak ps. to jestem na teleinformatyce, nie na infie, nie mam praktycznie żadnych programistycznych przedmiotów, więc nie wiem czego nie wiem :/
Ja w C++ nie mam duzego doświadczenia, ale częściej słyszę o Allegro przy takich projektach :) więc Ci to polecę
od siebie polecam SFML
[C++] Mógłby ktoś podać jakieś w miarę proste praktyczne zastosowanie wskaźnika this? Ale nie jakieś z dupy, tylko takie gdzie rzeczywiście warto go używać.
Może jest podobnie jak w C#.
Masz sobie klasę z polami:
teraz jak tworzysz konstruktor z parametrami i jako parametry podajesz zmienne o takich samych nazwach, to this oznacza, że odwołujesz się do pola tej klasy a nie parametru, kod:Kod:int cyfra1;
int cyfra2;
Kod:public mojaKlasa(int cyfra 1, int cyfra2){
this.cyfra1 = cyfra1;
this.cyfra2 = cyfra2;
}
## chociaz chyba pierdole bullshit i tak jest C# i Javie a tu nie ma.
ale już na pewno w C++, wskaźnik this zwraca referencje danego obiektu z metody. Jak tutaj w przypadku gdy przeciażamy operator przypisania =
Kod:class Wektor {
public:
Wektor& operator = ( const Wektor& wzorzec ) {
x = wzorzec.x;
y = wzorzec.y;
return *this; // zwrócenie referencji
}
private:
double x;
double y;
/* ... */
};
Nie obraź się, ale nie trzeba dużej wyobraźni by pomyśleć jakie daje możliwości. Przykład:
Kod:class Dziecko {
private int age;
public Dziecko(int obecnyWiek) {
this.age = obecnyWiek;
}
public void krzycz(){
Console.WriteLine("Mam " + Convert.ToString(this.age) + " lat! :) ");
}
}
Dziecko julia = new Dziecko(17);
Dziecko romek = new Dziecko(14);
julia.krzycz();
romek.krzycz();
@Alex Fortune ;
aKod:Convert.ToString(this.age);
ma jakąś zasadniczą różnicę przy wypisywaniu?Kod:this.age.ToString();
@up
byłoby dobrze, dlatego ja Ci podalem przykład z takimi samymi nazwami ;)
i nie przejmuj sie :P Havaran (alex) przeważnie mnie zjeżdżał jak o coś pytałem :D
Nie, do czasu aż byś wprowadził lokalną zmienną age, wtedy zapis byłby niejednoznaczny co kompilator by Ci zasygnalizował błędem. Dlatego, dobrą praktyką jest odwoływanie się przez this aby pokazać że chodzi o pole
To jest C#, w C# masz this.zmienna, this.metoda(); w C++ jeśli masz wskaźnik na obiekt , to używasz -> , np:
A jak sam obiekt, to też kropką ( o ile dobrze pamiętam xD ):Kod:Dziecko* dziecko = new Dziecko(13);
dziecko->krzycz();
@upKod:Dziecko dziecko = Dziecko(13);
dziecko.krzycz();
O cholera xD nie miałem zamiaru nikogo zjeżdżać czy obrażać panowie ;)
To ja teraz mam takie pytanie, nawet nie wiem, czy ktokolwiek tutaj mógł mieć taki problem ale do rzeczy
znacie może jakiś sensowny sposób, żeby uruchomić zewnętrzną aplikację konsolową i zbierać jej wyjście do wnętrza programu? Nawet przez cin by chyba mogło być...
Nie jestem pewien, jak taki pomysł się sprawdzi nawet jeśli uda się uruchomić, ale miałem taki głupi pomysł dzisiaj
Hmm ciekawe, na pewno są takie rozwiązania w necie. Taka praktyka jest powszechna w linuxie w bash, tam się to nazywa po prostu strumieniami.
Poszukaj coś na temat zmiany celu standardowego wyjścia, tak żeby jakby nadpisać cout.
@edit
Tak zapewne chodzi o to, że za pomocą programu A, chce wyświetlić to co normalnie wyświetla program B. Albo zamiast wyświetlić komunikaty z programu B, zapisać je do pliku tekstowego.
No to ja bym walnął funkcje asynchroniczną z await ustawionym na bufor. Jakiś plik txt, xml, cokolwiek ;d nie wydaje się jakieś hard
Ja bym spróbował system('asdf>cin'); i modlitwy xD
Ale nie wydaje mi się, żeby to działało, nawet jeśli znajdę nazwę strumienia używaną przez system. Chociaż CHYBA kiedyś zrobiłem coś w stylu tego używając odpowiedniej linii poleceń bezpośrednio z systemu, tyle że linuksa. I nie jestem tego pewien...
Coś takiego?
z http://stackoverflow.com/questions/4...mmand-within-cKod:#include <string>
#include <iostream>
#include <stdio.h>
std::string exec(char* cmd) {
FILE* pipe = popen(cmd, "r");
if (!pipe) return "ERROR";
char buffer[128];
std::string result = "";
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}
Wydaje się mieć jakiś sens, w tej chwili nie jestem w stanie sprawdzić.
Ale jest jeszcze jedna kwestia: chciałbym żeby mój program działał w trakcie, reagując na każda wyplutą linię najlepiej, ale niekoniecznie dokładnie tak. Byle nie musiał czekać na zakończenie tamtego. I niestety, nie mam źródeł tego drugiego programu także bezpośrednia komunikacja tego typu odpada. Kurcze, złożony problem chyba, zaraz się okaże, że najłatwiej będzie czytać pamięć, a tego to mi się nie chce
No cóż robię ten projekt ale jak narazie nie wychodzi mi zbytnio. To znaczy, nie wiem w jaki sposób zrobić tą pętle aby wyświetlała mi informacje na temat broni. Czy mógłby ktoś mi pomóc ?:)
a mnie nurtuje jedna sprawa w PHP, czy ilość 'echo' wpływa na szybkość działania strony?
w sensie czy jest różnica szybkości między:
a tym:Kod:echo '<table>';
echo '<tr>';
echo '<td>';
echo '</td>';
itd.
Kod:echo '<table><tr><td></td> idt...';
Jakąś dobrą książkę potrzebuje do ogarnięcia PHP. W j. p oczywiście. Macie coś takiego?:)
Może pierw http://pl.wikibooks.org/wiki/Programowanie:PHP
A potem książka/dokumentacja?
Czytanie kodu jest najlepszą książką. Serio.
tymi podstawami jest znajomość języka angielskiego i podstaw składni c i pascala i ogarniasz 99% kodów bez większego wysiłku
Czytajac czyjs kod nie nauczysz sie rzeczy specyficznych dla jezyka, aczkolwiek, nauczysz sie "programowac". Dla osoby ktora programowala w Javie przez 3 lata, pojecie "wskaznik" z C/C++ moze byc nie znane.
Przykladowo, dla ww osoby, taki kod moze byc kompletnie nie zrozumialy:
Z drugiej strony, jesli przypatrzy sie ona niektorym wzorcom, interfejsom klas, bedzie w stanie to "przeniesc" do Javy, tudziez innego znanego jezyka.Kod:template <class T>
T * foo(T & v)
{
return reinterpret_cast<T *>(& const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
}
Wszystko rozbija się o doświadczenie. Gdybym miał tyle styczności z C++ co Ty, to prawdopodobnie byłbym w stanie rozczytać ( inna sprawa, że prawdopodobnie jak zerknę na to co robi dokładnie reinterpret_cast i volatile, to sobie poradzę ;p ) , chyba że pwoiesz mi, że ten przykład wziąłeś z książki i jest tak strasznie przydatny ( w co bardzo wątpie ) ?: D
Akurat to mega rare przypadek, bo z reguly nikt nie pisze overloada to operatora &. Aczkolwiek, pokaz ten kod osobie, ktora nigdy nie pisala w C/C++.
Większość rzeczy się rozumie, a w wypadku problemów jest google. Nie wiem co za spina...
Prawdziwy problem się robi, gdy patrzysz na kod, a większość wywoływanych tym metod jest własna, i do tego mają abstrakcyjne nazwy. Ale na to też nic nie poradzi znajomość 50 książek