<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Athlan • Piotr Pelczar • blog programisty &#187; mvc</title>
	<atom:link href="http://athlan.pl/tag/mvc/feed/" rel="self" type="application/rss+xml" />
	<link>http://athlan.pl</link>
	<description>Napisać kod zrozumiały dla komputera potrafi byle głupek. Dobrzy programiści tworzą kod zrozumiały dla człowieka...</description>
	<lastBuildDate>Sun, 12 Jun 2011 16:43:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>MVC &#8211; Model</title>
		<link>http://athlan.pl/mvc-model/</link>
		<comments>http://athlan.pl/mvc-model/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 15:21:19 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planeta]]></category>
		<category><![CDATA[Publikacje]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[batabae]]></category>
		<category><![CDATA[baza danych]]></category>
		<category><![CDATA[dane]]></category>
		<category><![CDATA[last.fm]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[wzorce projektowe]]></category>

		<guid isPermaLink="false">http://athlan.pl/?p=258</guid>
		<description><![CDATA[Powstało masę artykułów na temat MVC, temat staje się naprawdę oklepany. Postanowiłem zebrać wszystkie informacje w jedno miejsce i streścić je w jednym artykule uzupełniając go o informacje, które nabyłem z własnego doświadczenia oraz zwracając uwagę na najistotniejsze informacje. Czym jest model Model to jedna z warstw wzorca projektowego MVC, który odpowiada logikę biznesową, czyli [...]]]></description>
			<content:encoded><![CDATA[<p>Powstało <a href="http://phpedia.pl/wiki/MVC">masę artykułów</a> na temat <strong>MVC</strong>, temat staje się naprawdę <em>oklepany</em>. Postanowiłem zebrać wszystkie informacje w jedno miejsce i streścić je w jednym artykule uzupełniając go o informacje, które nabyłem z własnego doświadczenia oraz zwracając uwagę na najistotniejsze informacje.</p>
<p><strong>Czym jest model</strong></p>
<p><strong>Model </strong>to jedna z warstw wzorca projektowego <strong>MVC</strong>, który odpowiada logikę biznesową, czyli pozyskiwanie oraz modelowanie danych pozyskanych ze źródła danych. Na samym wstępie brzmi to bardzo abstrakcyjnie. W myśl architektury MVC, <span style="text-decoration: underline;">dostęp</span> do modelu <span style="text-decoration: underline;">powinien mieć tylko kontroler</span>, a w żadnym wypadku widok. Dodatkowo model musi pobrać i modelować dane w taki sposób, <span style="text-decoration: underline;">aby można było go ewentualnie wymienić bez jakiejkolwiek ingerencji w kontroler</span>, a co za tym idzie – widok. Niezależnie od tego, z jakiego źródła informacji korzysta (pliki tekstowe, bazy danych, pliki XML)  kontroler powinien otrzymać maksymalnie zbliżone dane podczas wymiany źródła informacji.</p>
<p style="text-align: center;"><a href="http://athlan.pl/wp-content/uploads/mvc-model.png"><img class="aligncenter size-medium wp-image-259" style="border: 0pt none;" title="mvc-model" src="http://athlan.pl/wp-content/uploads/mvc-model-265x300.png" alt="mvc-model" width="265" height="300" /></a></p>
<p><strong>Model != baza danych</strong></p>
<p>Często spotykam się z definicją modelu jako źródłem połączenia i wykonywania zapytań do serwera bazy danych. Otóż nie jest to prawdą. Według ideologii MVC model powinien być jedynie pośrednikiem między warstwą aplikacji przeznaczoną do połączenia do bazy danych, wykonywania zapytań itp., a kontrolerem. Dodatkowo powinien pomóc kontrolerowi w zbudowaniu zapytania do źródła informacji (pobranie danych na podstawie kryteriów), zmodelować je i zwrócić. Dlaczego model nie jest połączeniem do bazy danych? Jeżeli model potraktujemy jako pośrednika między kontrolerem a źródłem danych, ma on prawo wybrać dowolny sposób uzyskania żądanych informacji. Wcale nie oznacza to, że model musi używać baz danych, ale może użyć plików XML lub API udostępniane przez konkretny serwis (np. YouTube)</p>
<p><strong>Wymienialność modeli i modelowanie danych</strong></p>
<p>Modelowanie informacji jest to dostosowanie ich do użytku przez kontroler. Zazwyczaj jest to przekazywanie informacji w postaci tablic, wartości logicznych, liczb i ciągów znaków. Przykładem może być pobieranie informacji z bazy danych. Kontroler de facto nie wie skąd są pobierane dane, wie to tylko model, otrzymuje suche informacje. Jak rozumieć modelowanie danych przy projektowaniu aplikacji? Wyobraźmy sobie sytuację, że zmieniamy źródło informacji z bazy danych na pliki XML. W tym przypadku kontroler <span style="text-decoration: underline;">powinien otrzymać rekordy danych jako tablica o tych samych kluczach i tych samych typach danych</span>, jak miało to miejsce przy używaniu bazy danych. <span style="text-decoration: underline;">Wymiana modelu odbywa się bez ingerowania w kontroler</span>.</p>
<p><strong>Przykłady modeli</strong></p>
<p>Najpopularniejszym sposobem pozyskania informacji jest połączenie do bazy danych i pobieranie (reprezentowanie) ich na różnoraki sposób. Doskonale wyjaśnia to tekst znajdujący się w wikipedii:</p>
<p style="padding-left: 30px;">Frameworki MVC do operacji na bazach danych używają modeli i mapowania relacyjno-obiektowego, <a class="mw-redirect" title="ORM" href="http://pl.wikipedia.org/wiki/ORM">ORM</a> (ang. <em>object-relationship mapping</em>) &#8211; w Railsach jest to ActiveRecord, w Catalyscie np. DBIx::Class, a framework <a title="Spring Framework" href="http://pl.wikipedia.org/wiki/Spring_Framework">Spring</a> w Javie używa Hibernate. Zwykle jest też możliwe użycie baz danych przez bezpośrednie zapytania <a title="SQL" href="http://pl.wikipedia.org/wiki/SQL">SQL</a>. Użycie modeli upraszcza typowe operacje &#8211; wyświetlanie ze stronicowaniem, edycję danych, a także uniezależnia od konkretnego typu bazy danych.</p>
<p>Posiadam przykład od siebie. Źródłem danych jest API serwisu Last.fm:</p>
<ul>
<li><a href="http://athlan.pl/code/ModelLastfmApi">Model</a> informacji o utworze.</li>
<li><a href="http://athlan.pl/code/ModelLastfmApiAbstract">Klasa abstrakcyjna modelu</a> opartego o API Last.fm (oparty na klasie bazowej modelu frameworka).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/mvc-model/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
