Terimler Sözlüğü
****************
AJAX
----
Asynchronous JavaScript and XML - istemci ile sunucu arasında, her istekte sayfanın tamamını yeniden yüklemeye gerek kalmadan HTTP protokolü üzerinden bilgi alışverişi sağlayan teknoloji. Adı, verinin yalnızca XML biçiminde gönderildiğini düşündürse de, yaygın olarak [#JSON] biçimi de kullanılır.
Presenter Eylemi
----------------
Presenter'ın, tek bir eylemi gerçekleştiren mantıksal parçası. Örneğin bir ürün sayfasını göstermek, kullanıcının oturumunu kapatmak vb. Tek bir presenter birden çok eyleme sahip olabilir.
BOM
---
*byte order mark*, bir dosyadaki, kodlamada bayt sırasının göstergesi olarak kullanılan özel ilk karakterdir. Bazı düzenleyiciler onu dosyalara ekler. Pratikte görünmezdir, ama PHP'den çıktı ve başlık gönderilmesinde sorunlara yol açar. Toplu kaldırma için [Code Checker|tools:code-checker] kullanabilirsiniz.
Controller
----------
Kullanıcı isteklerini işleyen ve bunlara dayanarak uygun uygulama mantığını (yani [#Model]) çağıran, ardından veriyi render etmesi için [#View] katmanından istekte bulunan denetleyici. Nette Framework'te controller'ların karşılığı [presenter'lardır |#Presenter].
Cross-Site Scripting (XSS)
--------------------------
Cross-Site Scripting, kaçırılmamış çıktılardan yararlanarak web sitelerini bozma yöntemidir. Saldırgan böylece sayfaya kendi kodunu enjekte edebilir, sayfayı değiştirebilir, hatta ziyaretçiler hakkında hassas veri elde edebilir. XSS'e karşı koruma, tüm çıktı dizelerinin tutarlı ve doğru biçimde kaçırılmasından geçer.
Nette Framework, Cross-Site Scripting riskini kalıcı olarak ortadan kaldıran devrim niteliğindeki [Bağlama Duyarlı Kaçış |latte:safety-first#Bağlama duyarlı kaçış] teknolojisini sunar. Tüm çıktıları otomatik kaçırır, dolayısıyla geliştirici hiçbir şeyi unutamaz.
Cross-Site Request Forgery (CSRF)
---------------------------------
Cross-Site Request Forgery saldırısında saldırgan, kurbanı; kurbanın tarayıcısında, kurbanın giriş yapmış olduğu bir sunucuya sinsice istek çalıştıran bir sayfaya çeker. Sunucu, isteğin kurban tarafından isteyerek yapıldığına inanır. Böylece kurbanın kimliği altında, onun haberi olmadan bir eylem gerçekleştirir. Bu; veri değiştirmek ya da silmek, mesaj göndermek vb. olabilir.
Nette Framework, **presenter'lardaki formları ve sinyalleri** bu tür saldırılara karşı, başka bir alan adından gönderilmelerini ya da tetiklenmelerini engelleyerek **otomatik korur**.
Cross-Origin Resource Sharing (CORS)
------------------------------------
CORS, bir web sayfasının JavaScript isteklerini, sayfanın yüklendiği alan adından farklı bir alan adına yapmasına izin veren bir güvenlik mekanizmasıdır. CORS olmadan tarayıcılar, güvenlik nedeniyle böyle istekleri engeller.
Örneğin web siteniz `https://myapp.com` adresinde çalışıyor ve JavaScript ile (AJAX, Fetch API) `https://api.example.com` adresinden veri almaya çalışıyorsa, tarayıcı API sunucusunun bu çapraz kaynak isteğine izin verip vermediğini denetler. API sunucusu izin vermek için `Access-Control-Allow-Origin: https://myapp.com` gibi özel HTTP başlıklarıyla yanıt vermelidir.
Dependency Injection
--------------------
Dependency Injection (DI), nesnelerin oluşturulmasını bağımlılıklarından nasıl ayıracağınızı belirleyen bir tasarım desenidir. Yani bir sınıf, bağımlılıklarını oluşturmaktan ya da başlatmaktan sorumlu değildir; bu bağımlılıklar ona dışarıdaki kod tarafından sağlanır (bu bir [DI container |#Dependency Injection Container] da olabilir). Avantajı; bağımlılıklar kolayca değiştirilebilir ve kodun diğer parçalarından yalıtılmış olduğundan, kodun daha esnek, daha anlaşılır ve uygulamanın daha kolay sınanabilir olmasıdır. Daha fazlası [Dependency Injection nedir? |dependency-injection:introduction] bölümünde.
Dependency Injection Container
------------------------------
Dependency Injection container (DI container ya da IoC container olarak da bilinir), bir uygulama içindeki bağımlılıkların (yani [servislerin |#Servis]) oluşturulmasını ve yönetimini üstlenen bir araçtır. Container genellikle, hangi sınıfların hangilerine bağımlı olduğunu, hangi somut bağımlılık gerçekleştirimlerinin kullanılacağını ve bu bağımlılıkların nasıl oluşturulacağını tanımlayan bir yapılandırmaya sahiptir. Sonra container bu nesneleri oluşturur ve onlara gereksinim duyan sınıflara sağlar. Daha fazlası [DI container nedir? |dependency-injection:container] bölümünde.
Kaçış
-----
Kaçış (escaping), belirli bir bağlamda özel anlamı olan karakterlerin, karşılık gelen başka dizilere dönüştürülmesidir. Örnek: Tırnak işaretleriyle sınırlanmış bir dizenin içine tırnak işareti yazmak isteriz. Tırnak işaretinin dize bağlamında özel bir anlamı olduğundan ve onu öylece yazmak dizenin sonu olarak yorumlanacağından, karşılık gelen başka bir diziyle yazılması gerekir. Hangi dizi olacağını bağlamın kuralları belirler.
Filtre
------
Şablonlarda [filtre |latte:syntax#Filtreler], genellikle veriyi son biçimine dönüştürmeye ya da yeniden biçimlendirmeye yardımcı olan bir fonksiyonu anlatır. Şablonlar birkaç [standart filtre |latte:filters] sunar.
Geçersiz Kılma
--------------
Bir [snippet'e |#Snippet] yeniden çizilmesi gerektiğinin bildirilmesi. Başka bir bağlamda, önbellek içeriğinin silinmesi anlamına da gelir.
JSON
----
JavaScript sözdizimine dayanan (onun bir alt kümesidir) veri alışverişi biçimi. Kesin belirtimini www.json.org adresinde bulabilirsiniz.
Bileşen
-------
Uygulamanın yeniden kullanılabilir bir parçası. [Bileşen yazma |application:components] bölümünde anlatıldığı gibi sayfanın görsel bir parçası olabilir; ya da bileşen terimiyle [Component |component-model:] sınıfı da kastedilebilir (böyle bir bileşenin görsel olması gerekmez).
Denetim Karakterleri
--------------------
Denetim karakterleri, metinde bulunabilen ve sorunlara yol açabilen görünmez karakterlerdir. Onları dosyalardan toplu kaldırmak için [Code Checker|tools:code-checker], bir değişkenden kaldırmak için ise [Strings::normalize() |utils:strings#normalize()] fonksiyonunu kullanabilirsiniz.
Olaylar
-------
Olay, bir nesne içinde beklenen bir durumdur. Gerçekleştiğinde, olaya tepki veren callback'ler olan işleyiciler çağrılır ("örnek":https://gist.github.com/dg/332cdd51bdf7d66a6d8003b134508a38). Olay örneğin bir formun gönderilmesi, kullanıcının giriş yapması vb. olabilir. Olaylar bu yüzden bir *Inversion of Control* biçimidir.
Örneğin kullanıcı girişi `Nette\Security\User::login()` metodunda gerçekleşir. `User` nesnesinin, herkesin callback ekleyebileceği bir dizi olan genel `$onLoggedIn` değişkeni vardır. Kullanıcı giriş yaptığında `login()` metodu dizideki tüm callback'leri çağırır. `onXyz` biçimindeki değişken adı, Nette'in tamamında kullanılan bir kuraldır.
Latte
-----
En gelişmiş [şablon sistemlerinden |latte:] biri.
Model
-----
Model, uygulamanın tamamının verisi ve özellikle işlevsel çekirdeğidir. Tüm uygulama mantığını içerir (iş mantığı terimi de kullanılır). **M**VC ya da MVP'deki **M**'dir. Herhangi bir kullanıcı eylemi (giriş yapmak, sepete ürün eklemek, veritabanındaki bir değeri değiştirmek) bir model eylemini temsil eder.
Model kendi iç durumunu yönetir ve dışarıya sabit bir arayüz sunar. Bu arayüzün fonksiyonlarını çağırarak durumunu sorgulayabilir ya da değiştirebiliriz. Model, [#View] ya da [#Controller] katmanının varlığından habersizdir.
Model-View-Controller
---------------------
Grafik arayüzlü uygulamalarda, işleme kodunu ([#Controller]) uygulama mantığı kodundan ([#Model]) ve veri gösterme kodundan ([#View]) ayırma gereksiniminden doğan yazılım mimarisi. Bu, uygulamayı daha anlaşılır kılar, ileriki geliştirmeyi kolaylaştırır ve tek tek parçaların ayrı ayrı sınanmasına olanak tanır.
Model-View-Presenter
--------------------
[#Model-View-Controller] üzerine kurulu mimari.
Modül
-----
Modül, uygulamanın mantıksal bir parçasını temsil eder. Tipik bir düzende, belirli bir işlevsellik alanını ele alan bir presenter ve şablon grubudur. Modüller `Front/`, `Admin/` ya da `Shop/` gibi [ayrı dizinlere |application:directory-structure#Presenter'lar ve şablonlar] yerleştirilir.
Örneğin bir e-mağaza şunlara bölünebilir:
- Ürünlere göz atmak ve satın almak için Frontend (`Shop/`)
- Sipariş yönetimi için Müşteri bölümü (`Customer/`)
- Operatörler için Yönetim (`Admin/`)
Teknik olarak bunlar sıradan dizinlerdir, ama net yapılandırma sayesinde uygulamanın ölçeklenmesine yardım ederler. `Admin:Product:List` presenter'ı böylece fiziksel olarak örneğin `app/Presentation/Admin/Product/List/` dizininde bulunur (bkz. [presenter eşlemesi |application:directory-structure#Presenter mapping]).
Namespace
---------
PHP diline 5.3 sürümünden beri ve başka bazı programlama dillerine de dahil olan ad alanı (namespace), farklı kütüphanelerde aynı adı taşıyan sınıfların ad çakışması olmadan kullanılmasını sağlar. Bkz. [PHP belgeleri |https://www.php.net/manual/en/language.namespaces.rationale.php].
Presenter
---------
Presenter, router tarafından HTTP isteğinden çevrilen [isteği |api:Nette\Application\Request] alıp bir [yanıt |api:Nette\Application\Response] üreten nesnedir. Yanıt; bir HTML sayfası, bir görsel, bir XML belgesi, diskteki bir dosya, JSON, bir yönlendirme ya da aklınıza gelen herhangi bir şey olabilir.
Genellikle presenter terimiyle [api:Nette\Application\UI\Presenter] sınıfının bir alt sınıfı kastedilir. Gelen isteklere göre karşılık gelen [eylemleri |application:presenters#Presenter'ın yaşam döngüsü] çalıştırır ve şablonları render eder.
Router
------
HTTP isteği / URL ile presenter eylemi arasında çift yönlü bir çevirmen. Çift yönlü olması, bir HTTP isteğinden [presenter eyleminin |#Presenter Eylemi] türetilebilmesi ve tersine, bir eylem için karşılık gelen URL'nin üretilebilmesi anlamına gelir. Daha fazlası [URL yönlendirme |application:routing] bölümünde.
SameSite çerezi
---------------
SameSite çerezleri, sayfanın yüklenmesine neyin yol açtığını anlamak için bir mekanizma sağlar. Üç değer alabilir: `Lax`, `Strict` ve `None` (sonuncusu HTTPS gerektirir). Sayfa isteği doğrudan web sitesinden geliyorsa ya da kullanıcı sayfayı adres çubuğuna doğrudan yazarak veya bir yer imine tıklayarak açıyorsa, tarayıcı sunucuya tüm çerezleri gönderir (yani `Lax`, `Strict` ve `None` bayraklı olanları). Kullanıcı web sitesine başka bir sitedeki bağlantı üzerinden tıklayarak gelirse, sunucuya `Lax` ve `None` bayraklı çerezler iletilir. İstek başka bir yolla ortaya çıkarsa, örneğin başka bir siteden POST formu gönderme, bir iframe içinde yükleme, JavaScript kullanma vb., yalnızca `None` bayraklı çerezler gönderilir.
Servis
------
Dependency Injection bağlamında servis, DI container tarafından oluşturulup yönetilen bir nesneyi anlatır. Bir servis, örneğin sınama amacıyla ya da uygulamanın davranışını değiştirmek için, onu kullanan kodu değiştirmeye gerek kalmadan kolayca başka bir gerçekleştirimle değiştirilebilir.
Snippet
-------
Snippet, sayfanın bir AJAX isteği sırasında bağımsız olarak yeniden çizilebilen parçası.
View
----
View, isteğin sonucunu göstermekten sorumlu uygulama katmanıdır. Genellikle bir şablon sistemi kullanır ve belirli bileşenleri ya da modelden elde edilen sonuçları nasıl göstereceğini bilir.
{{priority: -2}}
Terimler Sözlüğü
AJAX
Asynchronous JavaScript and XML – istemci ile sunucu arasında, her istekte sayfanın tamamını yeniden yüklemeye gerek
kalmadan HTTP protokolü üzerinden bilgi alışverişi sağlayan teknoloji. Adı, verinin yalnızca XML biçiminde
gönderildiğini düşündürse de, yaygın olarak JSON biçimi de kullanılır.
Presenter Eylemi
Presenter'ın, tek bir eylemi gerçekleştiren mantıksal parçası. Örneğin bir ürün sayfasını göstermek,
kullanıcının oturumunu kapatmak vb. Tek bir presenter birden çok eyleme sahip olabilir.
BOM
byte order mark, bir dosyadaki, kodlamada bayt sırasının göstergesi olarak kullanılan özel ilk karakterdir.
Bazı düzenleyiciler onu dosyalara ekler. Pratikte görünmezdir, ama PHP'den çıktı ve başlık gönderilmesinde sorunlara yol
açar. Toplu kaldırma için Code Checker kullanabilirsiniz.
Controller
Kullanıcı isteklerini işleyen ve bunlara dayanarak uygun uygulama mantığını (yani Model)
çağıran, ardından veriyi render etmesi için View katmanından istekte bulunan denetleyici. Nette
Framework'te controller'ların karşılığı presenter'lardır.
Cross-Site Scripting (XSS)
Cross-Site Scripting, kaçırılmamış çıktılardan yararlanarak web sitelerini bozma yöntemidir. Saldırgan böylece
sayfaya kendi kodunu enjekte edebilir, sayfayı değiştirebilir, hatta ziyaretçiler hakkında hassas veri elde edebilir. XSS'e
karşı koruma, tüm çıktı dizelerinin tutarlı ve doğru biçimde kaçırılmasından geçer.
Nette Framework, Cross-Site Scripting riskini kalıcı olarak ortadan kaldıran devrim niteliğindeki Bağlama Duyarlı Kaçış teknolojisini sunar. Tüm
çıktıları otomatik kaçırır, dolayısıyla geliştirici hiçbir şeyi unutamaz.
Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery saldırısında saldırgan, kurbanı; kurbanın tarayıcısında, kurbanın giriş yapmış olduğu
bir sunucuya sinsice istek çalıştıran bir sayfaya çeker. Sunucu, isteğin kurban tarafından isteyerek yapıldığına
inanır. Böylece kurbanın kimliği altında, onun haberi olmadan bir eylem gerçekleştirir. Bu; veri değiştirmek ya da
silmek, mesaj göndermek vb. olabilir.
Nette Framework, presenter'lardaki formları ve sinyalleri bu tür saldırılara karşı, başka bir alan adından
gönderilmelerini ya da tetiklenmelerini engelleyerek otomatik korur.
Cross-Origin Resource Sharing (CORS)
CORS, bir web sayfasının JavaScript isteklerini, sayfanın yüklendiği alan adından farklı bir alan adına yapmasına izin
veren bir güvenlik mekanizmasıdır. CORS olmadan tarayıcılar, güvenlik nedeniyle böyle istekleri engeller.
Örneğin web siteniz https://myapp.com adresinde çalışıyor ve JavaScript ile (AJAX, Fetch API)
https://api.example.com adresinden veri almaya çalışıyorsa, tarayıcı API sunucusunun bu çapraz kaynak
isteğine izin verip vermediğini denetler. API sunucusu izin vermek için
Access-Control-Allow-Origin: https://myapp.com gibi özel HTTP başlıklarıyla yanıt vermelidir.
Dependency Injection
Dependency Injection (DI), nesnelerin oluşturulmasını bağımlılıklarından nasıl ayıracağınızı belirleyen bir
tasarım desenidir. Yani bir sınıf, bağımlılıklarını oluşturmaktan ya da başlatmaktan sorumlu değildir; bu
bağımlılıklar ona dışarıdaki kod tarafından sağlanır (bu bir DI
container da olabilir). Avantajı; bağımlılıklar kolayca değiştirilebilir ve kodun diğer parçalarından yalıtılmış
olduğundan, kodun daha esnek, daha anlaşılır ve uygulamanın daha kolay sınanabilir olmasıdır. Daha fazlası Dependency Injection nedir? bölümünde.
Dependency Injection Container
Dependency Injection container (DI container ya da IoC container olarak da bilinir), bir uygulama içindeki
bağımlılıkların (yani servislerin) oluşturulmasını ve yönetimini üstlenen bir araçtır.
Container genellikle, hangi sınıfların hangilerine bağımlı olduğunu, hangi somut bağımlılık gerçekleştirimlerinin
kullanılacağını ve bu bağımlılıkların nasıl oluşturulacağını tanımlayan bir yapılandırmaya sahiptir. Sonra
container bu nesneleri oluşturur ve onlara gereksinim duyan sınıflara sağlar. Daha fazlası DI container nedir? bölümünde.
Kaçış
Kaçış (escaping), belirli bir bağlamda özel anlamı olan karakterlerin, karşılık gelen başka dizilere
dönüştürülmesidir. Örnek: Tırnak işaretleriyle sınırlanmış bir dizenin içine tırnak işareti yazmak isteriz. Tırnak
işaretinin dize bağlamında özel bir anlamı olduğundan ve onu öylece yazmak dizenin sonu olarak yorumlanacağından,
karşılık gelen başka bir diziyle yazılması gerekir. Hangi dizi olacağını bağlamın kuralları belirler.
Filtre
Şablonlarda filtre, genellikle veriyi son biçimine
dönüştürmeye ya da yeniden biçimlendirmeye yardımcı olan bir fonksiyonu anlatır. Şablonlar birkaç standart filtre sunar.
Geçersiz Kılma
Bir snippet'e yeniden çizilmesi gerektiğinin bildirilmesi. Başka bir bağlamda, önbellek
içeriğinin silinmesi anlamına da gelir.
JSON
JavaScript sözdizimine dayanan (onun bir alt kümesidir) veri alışverişi biçimi. Kesin belirtimini www.json.org adresinde bulabilirsiniz.
Bileşen
Uygulamanın yeniden kullanılabilir bir parçası. Bileşen
yazma bölümünde anlatıldığı gibi sayfanın görsel bir parçası olabilir; ya da bileşen terimiyle Component sınıfı da kastedilebilir (böyle bir bileşenin görsel olması
gerekmez).
Denetim Karakterleri
Denetim karakterleri, metinde bulunabilen ve sorunlara yol açabilen görünmez karakterlerdir. Onları dosyalardan toplu
kaldırmak için Code Checker, bir değişkenden kaldırmak için ise Strings::normalize() fonksiyonunu kullanabilirsiniz.
Olaylar
Olay, bir nesne içinde beklenen bir durumdur. Gerçekleştiğinde, olaya tepki veren callback'ler olan işleyiciler
çağrılır (örnek). Olay örneğin bir formun
gönderilmesi, kullanıcının giriş yapması vb. olabilir. Olaylar bu yüzden bir Inversion of Control biçimidir.
Örneğin kullanıcı girişi Nette\Security\User::login() metodunda gerçekleşir. User nesnesinin,
herkesin callback ekleyebileceği bir dizi olan genel $onLoggedIn değişkeni vardır. Kullanıcı giriş
yaptığında login() metodu dizideki tüm callback'leri çağırır. onXyz biçimindeki değişken
adı, Nette'in tamamında kullanılan bir kuraldır.
Latte
En gelişmiş şablon sistemlerinden biri.
Model
Model, uygulamanın tamamının verisi ve özellikle işlevsel çekirdeğidir. Tüm uygulama mantığını içerir (iş
mantığı terimi de kullanılır). MVC ya da MVP'deki M'dir. Herhangi bir kullanıcı eylemi (giriş yapmak, sepete
ürün eklemek, veritabanındaki bir değeri değiştirmek) bir model eylemini temsil eder.
Model kendi iç durumunu yönetir ve dışarıya sabit bir arayüz sunar. Bu arayüzün fonksiyonlarını çağırarak durumunu
sorgulayabilir ya da değiştirebiliriz. Model, View ya da Controller
katmanının varlığından habersizdir.
Model-View-Controller
Grafik arayüzlü uygulamalarda, işleme kodunu (Controller) uygulama mantığı kodundan (Model) ve veri gösterme kodundan (View) ayırma gereksiniminden doğan yazılım
mimarisi. Bu, uygulamayı daha anlaşılır kılar, ileriki geliştirmeyi kolaylaştırır ve tek tek parçaların ayrı ayrı
sınanmasına olanak tanır.
Model-View-Presenter
Model-View-Controller üzerine kurulu mimari.
Modül
Modül, uygulamanın mantıksal bir parçasını temsil eder. Tipik bir düzende, belirli bir işlevsellik alanını ele alan
bir presenter ve şablon grubudur. Modüller Front/, Admin/ ya da Shop/ gibi ayrı dizinlere
yerleştirilir.
Örneğin bir e-mağaza şunlara bölünebilir:
- Ürünlere göz atmak ve satın almak için Frontend (
Shop/)
- Sipariş yönetimi için Müşteri bölümü (
Customer/)
- Operatörler için Yönetim (
Admin/)
Teknik olarak bunlar sıradan dizinlerdir, ama net yapılandırma sayesinde uygulamanın ölçeklenmesine yardım ederler.
Admin:Product:List presenter'ı böylece fiziksel olarak örneğin app/Presentation/Admin/Product/List/
dizininde bulunur (bkz. presenter
eşlemesi).
Namespace
PHP diline 5.3 sürümünden beri ve başka bazı programlama dillerine de dahil olan ad alanı (namespace), farklı
kütüphanelerde aynı adı taşıyan sınıfların ad çakışması olmadan kullanılmasını sağlar. Bkz. PHP belgeleri.
Presenter
Presenter, router tarafından HTTP isteğinden çevrilen isteği alıp bir yanıt üreten nesnedir. Yanıt; bir HTML
sayfası, bir görsel, bir XML belgesi, diskteki bir dosya, JSON, bir yönlendirme ya da aklınıza gelen herhangi bir şey
olabilir.
Genellikle presenter terimiyle Nette\Application\UI\Presenter
sınıfının bir alt sınıfı kastedilir. Gelen isteklere göre karşılık gelen eylemleri çalıştırır ve
şablonları render eder.
Router
HTTP isteği / URL ile presenter eylemi arasında çift yönlü bir çevirmen. Çift yönlü olması, bir HTTP isteğinden presenter eyleminin türetilebilmesi ve tersine, bir eylem için karşılık gelen URL'nin
üretilebilmesi anlamına gelir. Daha fazlası URL yönlendirme
bölümünde.
SameSite çerezi
SameSite çerezleri, sayfanın yüklenmesine neyin yol açtığını anlamak için bir mekanizma sağlar. Üç değer alabilir:
Lax, Strict ve None (sonuncusu HTTPS gerektirir). Sayfa isteği doğrudan web sitesinden
geliyorsa ya da kullanıcı sayfayı adres çubuğuna doğrudan yazarak veya bir yer imine tıklayarak açıyorsa, tarayıcı
sunucuya tüm çerezleri gönderir (yani Lax, Strict ve None bayraklı olanları).
Kullanıcı web sitesine başka bir sitedeki bağlantı üzerinden tıklayarak gelirse, sunucuya Lax ve
None bayraklı çerezler iletilir. İstek başka bir yolla ortaya çıkarsa, örneğin başka bir siteden POST formu
gönderme, bir iframe içinde yükleme, JavaScript kullanma vb., yalnızca None bayraklı çerezler gönderilir.
Servis
Dependency Injection bağlamında servis, DI container tarafından oluşturulup yönetilen bir nesneyi anlatır. Bir servis,
örneğin sınama amacıyla ya da uygulamanın davranışını değiştirmek için, onu kullanan kodu değiştirmeye gerek
kalmadan kolayca başka bir gerçekleştirimle değiştirilebilir.
Snippet
Snippet, sayfanın bir AJAX isteği sırasında bağımsız olarak yeniden çizilebilen parçası.
View
View, isteğin sonucunu göstermekten sorumlu uygulama katmanıdır. Genellikle bir şablon sistemi kullanır ve belirli
bileşenleri ya da modelden elde edilen sonuçları nasıl göstereceğini bilir.