9 Eylül 2018 Pazar

Mühendisler Dünyası

MVC'de CONTROLLER Kavramı

Bir web uygulamasının en önemli görevi kullanıcıdan gelen istekleri karşılayıp uygun sonucu döndürmek veya kullanıcının yapmak istediği değişiklikleri sonuçlandırmaktır. Asp.Net MVC tasarım kalıbında da kullanıcılardan gelen HTTP isteklerini karşılayan CONTROLLER dediğimiz mekanizmadır. Controller routing mekanizması ile gelen isteğin hangi controller ve actiona yönlendirileceğine karar verir ve bu süreçten sonra asıl görevi olan modelle view arasında köprü olarak kullanıcı etkileşimini sağlar.


Action'lar ise bir anlamda asıl işi yapan metotlardır. Yani Actionların görevi model ve view arasında köprü kurarak ve iş akışlarını oluşturarak kullanıcıya view sonucunu döndürmektir. 

MVC kalıbında actionlar Action Result türünde bir nesneyi sonuç olarak döndürür.(Action Result türünde sonuç döndürmek aslında zorunlu değil. Asp.Net MVC bu konuda esneklik sağlar. Sonuç her hangi bir nesne türü de olabilir. Ama MVC kalıbının doğru uygulanması için Action Result türünde bir nesne döndürmek tercih edilen yöntemdir ve kabul görmüş en iyi yöntemdir) Tüm Action Result türlerine göre sonuçlar değişebilir. Örneğin sonucu bir json data, veya bir http hatası da olabilir. Action Result mantığının amacı ise kullanıcıya bir arayüz gösterebilmektir. Action Result konusu temel konular seviyesinde detaylı olarak incelenecektir. Bu konuların çok iyi anlaşılması için ilerleyen konularda bu konuyu çok iyi anlamanız ve projelerinizde de etkin olarak kullanmanız önem arz eden konulardan bir tanesidir.
Okumaya Başla

30 Ağustos 2018 Perşembe

Mühendisler Dünyası

MVC'de VIEW Kavramı

Bir web uygulaması sadece kullanıcılara sunulduğu zaman bir anlamı olur. Siz bir uygulamada arka tarafta çok büyük işler yapsanız bile kullanıcıya bunu yansıtamıyorsanız yaptığınız işin de bir anlamı yoktur. MVC tasarım kalıbı da kullanıcı etkileşimini VIEW katmanı üstlenir. MVC bu katmanda scaffolding özelliği ile kullanıcıların listeleme, detay görüntüleme, yeni eleman ekleme, düzenleme ve silme işlemleri de otomotik oluşturur ve böylece geliştiricilerin işlerini çok kolaylaştırır.

MVC modelinde VIEW katmanını çok iyi anlamak, belirlenmiş kurallara uymak, aynı zamanda "best ptactice" olarak kabul edilen sınırlar içerisinde projeyi geliştirebilmek önemlidir. Özellikle arayüz geliştirme olduğu için çoğunun aklı standar HTML kodlarına gitse de Asp.Net MVC teknolojisi Razor dilinin entegresi ile birlikte klasik HTML'den de uzaklaşmadan C# veya Visual Basic kullanarak kullanıcı arayüzleri geliştirmenizi sağlar. View çeşitlerinin anlatıldığı ve örnek uygulaların da yapıldığı makalelerde bunları daha net anlayacaksınız. Ama bu konuda da önemli bir kaç nokta var. Örneğin view içerisinde programlama dilini kullanarak her şeyi yapabiliyor olduğunuz bu süreçlerin hepsini view içerisinde yapabilirsiniz anlamına gelmez. MVC ile proje geliştirirken özellikle view konusunda kurallar çerçevesinde proje geliştirmek ve proje geliştirme sürecindeki "Separation Of Concern" kurallarını uygulamak projenin okunabilirliğini ve genişleyebilirliğini etkileyecektir.

MVC'de "VIEW" Kavramı

View konusunda diğer önemli noktalardan biri de verilerin arayüze iletilmesidir. Microsoft tarafından geliştirilen viewbag, viewdata, tempdata yapıları ve controller içinden model iletimi aracılığıyla view içerisine veri göndermek mümkündür. Bu yapılardan MVC tasarım kalıbında tercih edilen yöntem modellerin gönderilmesidir. MVC konusunda yeni başlayanların zorlanacağı noktalardan bir tanesi de nesne modeli dışındaki verilerin view'a gönderilmesi olacaktır. Bu konuda da ilerleyen bölümlerde viewmodels kullanımları anlatılırken değinilecektir.

View çeşitleri olan partial view, view, layoutlar ve Action Result türleri örnekleriyle temel seviye konularında anlatılacaktır. Bu makaledeki temel amacım view konusunun temellerini anlamanız ve konuyla ilgili giriş seviyesinde bilgiye sahip olmanızdır. Bu anlamda controller view ve model bağlantısının doğru anlaşılması önemlidir. Bundan sonraki makalede controller kavramı anlatılacak ve bu bağlantının kafanızda daha iyi oturmasına yardımcı olacaktır. Bu yüzden bu makaleden sonra devam eden "MVC'de "CONTROLLER" Kavramı" makalesiyle konuya devam etmenizi öneriyorum. Bu makaleye geçmeden önce "MVC Nedir?" makalesini okumadıysanız mutlaka okumanızı tavsiye ederim.
Okumaya Başla

29 Ağustos 2018 Çarşamba

Mühendisler Dünyası

MVC'de Model Kavramı

Makaleye başlarken günümüz web uygulamalarının temelinin ilişkisel veritabanları esasında geliştiğini vurgulamam gerekiyor. İlişkisel veritabanları esasında gelişen ORM teknolojileri de uygulamalarla veritabanlarının haberleşmesine ve uygulama geliştirme süreçlerinin hızlanmasına çok büyük katkı yapmıştır. Bu anlamda MVC teknolojisini ORM olmadan hayal etmek imkansızdır. Asp.net MVC de Entity Framework olmadan kaptanı olmayan uçağa benzer.

Buradaki benzetmeler önemli. Proje geliştirme süreci için Asp.Net otomobilse, Asp.Net MVC bir uçaktır. (Uçaktaki hız ve kaliteli yolculuk) Entity Framework olmadan da bu uçağın kaptanı yoktur diyebiliriz. Tabi ki Asp.net MVC ile diğer ORM teknolojileri de kullanılabilir. Ama Microsoft'un da direkt olarak Entity Framework desteği sağlamasının belirli nedenleri vardır değil mi?

İsterseniz küçük bir girişten sonra "Model" kavramını biraz daha detaylandıralım. MVC teknolojisindeki model kavramı bir anlamda tablonun nesneye dönüştürülmüş halidir. Web uygulamalarının da bu nesneleri oluşturma, güncelleme, silme, listeleme veya kompleks işlemleri üzerine kurulduğunu göz önünde bulundurursak MODEL kavramının MVC teknolojisinin en önemli parçası, nesne yapısı olduğunu söyleyebiliriz. Üstlendiği görev ise nesne yapısının kalıplar halinde arayüz ve controller arasında akmasını sağlamaktır.
MVC Model katmanı ile ilgili bilinmesi gereken en önemli nokta tabloları temsil ettiğidir. Bu cümle ilk başta garip gelebilir. Ama MVC projelerinin kullanıldığı projeleri de göz önünde bulundurursak ve genelde veritabanı CRUD işlemlerinin yoğun olarak yapıldığı projelerde kullanıldığını da kabul edersek bu tanımın ne kadar geçerli olduğuna siz de ikna olacaksınız. Özellikle ORM teknolojileri ve Code-First mantığının da proje kalıplarına oturmasıyla tasarladığımız modellerin ilişkisel veritabanlarında tablo olarak oluşturulması, nesne yönelimli programlamanın inheritence özelliği ile tüm tablolarda olan OID, Olusturma Tarihi ve başka özelliklerin Base Object olarak belirlenip kalıtım yapılması MVC Model kullanımının "best practice" yöntemi olarak kabul edilir. Bu hangi ORM teknolojisi kullanıldığından bağımsız olarak Veritabanı tasarımındaki normalizasyon kurallarının uygulanması için de önemli bir noktadır.

Model kavramı ile ilgili başlangıç bilgisi olarak anlatılan konuların yeterli olduğunu düşünüyorum. Teorik bilgilerin de belirli seviyeden sonra tecrübeyle kalıcılaşdırılması gerekiyor. Bu konuların de Temel seviye ve Entity Framework konularında detaylı anlatıldığını belirtmek istiyorum. Bu konuda uzmanlaşmak istiyorsanız menüde yer alan konu başlıklarını detaylıca incelemenizi tavsiye ederim. Önemli bir nokta ise bu konuda uzmanlaşmak sizin diğer proje türlerine de adapte olmanızı kolaylaştıracak.
Okumaya Başla

28 Ağustos 2018 Salı

Mühendisler Dünyası

MVC Nedir?

MVC bir proje tasarım kalıbıdır ve projelerinizin daha düzenli ve belirli bir mantık doğrultusunda geliştirmenize yardımcı olur. Blog temel olarak Asp.Net MVC konusunda odaklansa da bu makale genel olarak MVC kalıbının anlatılması üzerine yoğunlaşmıştır ve hangi dili kullanmanızdan bağımsız olarak bu makalede anlatılanları tüm programlama dillerinde uygulayabilirsiniz.

MVC, günümüz web uygulamaları geliştirme sürecinde önemli yere sahip mimari desendir. MVC'ye alternatif proje tasarım kalıpları da var. Bunlardan MVP, MVVM en çok tercih edilenlerdir. Bu konuları merak ediyorsanız "MVC Alternatifleri" isimli makaleye de göz atmanızı tavsiye ederim.

MVC, Model, View, Controller kelimelerinin baş harflerinden birleşmesinden oluşmuş kelimedir. MVC (Model-View-Controller); Yazılım geliştirme teknolojilerinde kullanılan, Seperation Of Concern(Yazılımda işlev ve özelliklerin soyutlanarak birbirinden ayırılması) prensibini vurgulayan yazılım tasarım desenidir. İlk kez 1979 yılında “Trygve Reenskaug” tarafından tanımlanmıştır.Bir web uygulamasının yapması beklenen üç özellik olan görünüm yani kullanıcı arayüzünü View ifade ederken, kullanıcıların HTTP isteklerini karşılayan ve bu istekleri kullanıyıcı arayüzü ile ilişkilendiren katman ise Controller katmanıdır. Model katmanı ise verilerimiz veya tabloların nesne olarak tutulduğu katmandır ve bu katmanda View katmanı ve Controller katmanı ile ilişkilidir. MVC modelinin temelinde bu üç katman olsa da bir çok profesyonel projeyi incelediğinizde bir çok farklı katmanın da projeye eklendiğini göreceksiniz. Özellikle web uygulaması olarak geliştirilen projenin farklı platformlara taşınma ihtiyacı doğduğunda MVC kalıbı dışına çıkamamak bir çok problemi beraberinde getiri. Bu kısa özetten sonra aşağıdaki MVC model resmini detaylı incelemenizi istiyorum. Tüm katmanların daha iyi anlaşılması için ayrı makaleler halinde de konu anlatılsa da buradaki anlatım konunun temelini teşkil etmektedir.
MVC Nedir?
Resim MVC kalıbını basit bir şekilde anlatabilmek için çizilmiştir. Resmi kısaca maddeler halinde yorumlarsak:
Kullanıcı serverden istekte bulunduğunda bu isteği controller katmanı karşılar.
Controller katmanı View ve Model katmanı ile ilişkilidir ve modele göre düzenlenmiş arayüzü kullanıcıya iletir.
Kullanıcı HTTP metot tipine göre bu view üzerinde değişiklik yapabilir.

ASP.Net MVC’de kullanıcı isteği ilk önce Controller katmanına giderek burada işlenir ve Model kısmına gönderilerek verinin hangi tabloda ya da sınıfta ta işleneceğine karar verilir, ardından model kısmına işlenen veri Controller’a geri gelir ve hangi View ‘da gösterileceği karar verilir ve yanıt olarak kullanıcıya geri döndürülür.

Model, View ve Controller mekanizmalarının her birinin kısa açıklaması aşağıda verilmiştir.

Model: Veritabanına erişim, sınıflar(class),veritabanı ilişkileri gibi data ile ilgili işlemlerin yanısıra, Entity Framework, Linq tol Sql, NHibernate, Ado.Net, XPO gibi frameworkleri içerisinde bulunduran katmandır. Kısacası data(veri) işlemleri bu katmanda gerçekleşir. Asp.Net MVC varsayılan olarak Entity Framework ile birlikte kullanılır ve scaffolding yapısı da Entity Framework'ü destekler. Örneğin veri katmanında XPO kullanacaksanız Devexpress Asp.Net MVC projesi oluşturmak tercih edilen yöntemdir.

View: Bu katman kullanıcının ekranda gördüğü ve kullanıcıların etkileşimde bulunduğu katman olarak tanımlanır. Bu kısımda Html, Css, Javascript arayüz teknolojileri kullanılır. Asp.Net MVC için HTML yerine cshtml ve ya vbhtml yapısı vardır. Bu dosyası uzantısı içinde C# veya Visual Basic kodlarını yazmanızı sağlayan Razor dilini de destekler. Best Practice yöntemlerinde çok da tercig edilmeyen bir yöntem olsa da view içerisinde de kod yazmanıza imkan sağlar.

Controller: Dışarıdan gelen kullanıcı isteklerinin karşılayan, kullanıcıların View vasıtasıyla verdiği komutların, Model işlenmesini sağlayan katmandır. Kısacası Model ile View arasındaki katmandır. Metotlar, değişkenler, fonksiyonlar buradan çağrılarak kullanılır.

Makalenin tamamını okuduysanız "MVC Nedir?" sorusunun yanıtını bulabilmişsinizdir diye düşünüyorum. Makale içinde Model, View ve Controller tanımlamaları kısaca yapılmıştır. Ama tabi ki bu konuların detaylı işlenmesi gerekiyor. Konuya daha iyi başlangıç yapabilmek için ve bu konuların ayrıntılarının da anlaşılmasısının ASP.Net MVC eğitimi için de hayati öneme sahip olmasından dolayı devam eden 3 makale bu konulara ayrılmıştır.

Bu makaleden sonra Model kavramının detaylıca açıklandığı ve Entity Framework konusuna da giriş yapacağınız makaleden konuya devam edebilirsiniz.

Okumaya Başla

23 Ağustos 2018 Perşembe

Mühendisler Dünyası

Asp.Net MVC Proje Yapısını Tanıyalım

Bir önceki yazıda Visual Studio ile yeni Asp.Net MVC projesinin nasıl oluşturulduğunu resimlerle desteklenmiş bir şekilde açıklayarak anlatmıştım. Bu bölümde ise artık MVC konusunda giriş yapabilmek açısından proje altyapısını inceleyeceğiz. Bir önceki makalede de bahsettiğim gibi Asp.Net MVC konusuna yeni başladıysanız öncelikle projede yer alan klasörleri ve sınıfları tek tek açarak görsel bir fikir olması için incelemenizi tavsiye etmiştim. Eğer bunu yapmadıysanız bir proje oluşturun ve Solution Explorer kısmını açarak makaleyi okumaya başlayın.


Bu makale tamamen proje yapısının incelenmesine odaklandığı için ykarıdaki proje yapısı resmini öncelikle çok iyi inceleyin. Bu makalede proje ilk oluşturulduğu zaman oluşan tüm klasör de dosyaların ne işe yaradığını açıklamaya çalışacağım. İleri seviye konularda  katmanlı mimari ile proje geliştirme sürecinde Asp.Net MVC proje yapısının nasıl tasarlanması gerektiği ile "best practice" yöntemlerin de anlatıldığı makaleye yer verilecektir.

Genel olarak Asp.Net web projeleri için başlangıç noktası Global.asax içinde yer alan Application_Start metodudur. Bu metotla birlikte projede kullanılacak özellikler ve ayarlanarak proje ayağa kaldırılır. Bu metot proje oluşturma sürecinde otomatik olarak oluşturulduğu ve gerekli eklemeler yapıldığı için başlangıç sürecede buraya müdahale etmeyeceğiz. İleri seviye konularda buraya bir çok eklemeler yapacağız. Şimdilik konuyla alakalı bu sınıfın ve metodun projenin başlatılması sırasında ilk çalışan metot olduğunu bilmeniz yeterlidir.

Projenin oluşturulma süreci ile projeye otomatik olarak eklenen diğer bir sınıf ise Startup sınıfıdır. Bu sınıf Authentication işlemleri için eklenmiş ve ileri seviye konularda inceleyeceğimiz konudur. Başlangıç için bu sınıfın partial bir sınıf olduğunu ve login işlemlerinden sonra cookie işlemlerinin ayarlandığı bir sınıf olduğunu bilmeniz yeterli. Authentication konusu incelendiğinde bu konuya detaylarıyla ele alınacaktır.

Scripts klasörü projeye eklenen ve eklenecek olan JavaScript dosyalarının bulunduğu kütüphanedir. Nuget ile projeye eklenen kütüphaneler otomatik olarak bu klasör altına eklenecektir. Genelde Asp.Net MVC ile proje geliştirme sürecinde JavaScript ile aktif kod yazılmasa da projelerinize her zaman custom.js diye bir JavaScript dosyası eklemekte ve yazacağınız kodları buraya eklemek kodlarınızın daha düzenli olmasına yardımcı olacaktır.




Okumaya Başla

17 Ağustos 2018 Cuma

Mühendisler Dünyası

Asp.NET MVC - Yeni Proje Oluşturma (Visual Studio 2015)

Bir önceki makale olan ASP.NET MVC Proje Geliştirme Ortamları konusunda da anlatıldığı gibi bu blogda Asp.NET MVC ile proje geliştirme sürecini Visual Studio üzerinden anlatılacaktır. Bu makale de Visual Studio ile sıfırdan bir proje oluşturmayı anlatacağım. Bu makaleye başlamadan önce Visual Studio ortamında hiç proje geliştirmediyseniz en azından menülere, ekranlara, yardımcı araçlara hakim olabilmek için uygulamayı açıp biraz gezinmenizdir. Bu size uygulama geliştirme sürecinde de yardımcı olacaktır. Bu makalenin diğer bir hedefi de bir sonraki bölümde Asp.NET MVC projelerinin genel yapısını anlatabilmektir. Konunun daha iyi anlaşılması için her sürecin ekran görüntüleri ile birlikte paylaşacağım. 
Hiç zaman kaybetmeden yeni proje oluşturma sürecine geçelim.

1. Adım: Yeni Proje
File menüsünde New ve Project sekmesine tıklayın.


2. Adım: Proje Türü Seçimi ve Proje isminin belirlenmesi
Karşınıza aşağıdaki gibi bir ekran gelecektir. Soldaki menüden web seçip merkezi ekranda ASP.NET Web Application (.NET Framework) seçiyoruz. Bundan sonra ise belirlediğimiz proje ismini yazdıktan sonra tamam butonuna tıklayabiliriz.


3. Adım: Proje içinde yer alacak teknolojilerin seçilmesi.
Bu süreçte ise yukarıdaki MVC seçeneğine tıklıyoruz. Bu işlem otomatik olarak aşağıda yer alan MVC sekmesinin de seçilmesine neden olacaktır. Biz yukarıdaki MVC butonuna tıklayıp tamam diyoruz ve projenin oluşmasını bekliyoruz. Projeye kütüphanelerin eklenmesi bilgisayarınız performansına göre biraz sürecektir. Burada Host in Cloud seçili ise devre dışı bırakıyoruz. Change Authentication konusunu daha sonra işleyeceğimiz için şuanda bu kısma değinemeyeceğiz. Olduğu gibi bırakabilirsiniz. Add unit tests kısmı ise daha sonra işleyeceğimiz bir konu olduğu için seçili ise bunu da devre dışı bırakıyoruz.


Evet bu kadar basit Visual Studio ile yeni MVC projesi oluşturmak. Bu süreçte amacım sadece yeni projenin nasıl oluşturulduğunu anlatmak. Bu süreçten sonra Asp.NET MVC Proje Yapısını anlatıldığı makaleye geçiş yapacağız. Bundan önce oluşan projedeki sekmeleri önceden inceleyin. Zamanınınız varsa en azından on dakikanızı bu iş için ayırın. Küçük incelemeden sonra projeyi çalıştırın ve deneyin. (Visual Studio konusunda eksikleriniz varsa takıldığınız noktaları hemen internetten bulabilirsiniz) Uygulaman başlangıçta nasıl çalıştığını ve size ne gibi bir ekran vereceğini görmüş olursunuz.


Proje incelediyseniz ve projeyi çalıştırıp ekrana nasıl bir çıktı ürettiğini gördüyseniz artık Asp.NET MVC Proje Yapısının anlatıldığı makaleye geçebilirsiniz.
Okumaya Başla
Mühendisler Dünyası

ASP.NET MVC Proje Geliştirme Ortamları

Genel olarak Microsoft tabanlı yazılım geliştirmek için en iyi platform Visual Studio olarak kabul edilir. Hatta Visual Studio ile proje geliştirmiş ve farklı dillerde programlamaya geçen çoğu yazılımcının ilk özlem duyduğu Visual Studio gibi bir IDE'dir.

Visual Studio MVC
Visual Studio
Tabi ki, bu kalitenin de bir bedeli var ve bu yüzden çoğu yazılımcı açık kaynak kodlu ve ücretsiz yazılım geliştirme platformu arayışındadır. ASP.NET MVC ile küçük projeler geliştirmek isterseniz de ücretsiz olan Community Edition işinizi görecektir. Ama bunların dışında da alternatiflerin olduğunu bilmekte fayda var.

SharpDevelop
SharpDevelop
Bunlardan en yaygın olanı ise SharpDevelop uygulamasıdır. Bu IDE küçük projeler için hemen hemen tüm ihtiyaçlarınızı karşılayacaktır. Ama yazılımın kompleks bir sistem olduğunu kavradığınız an Visual Studio ile geliştirme yöntemini seçeceksiniz. (Bunu ASP.NET MVC için söylüyorum)

Diğer ücretli alternatiflerden bir tanesi de Jet Brains firması tarafından geliştirilen Rider uygulamasıdır. Jet Brains firması aynı zamanda Java platformu için bir numara kabul edilen IntelliJ Idea uygulamasının da geliştiricisidir. Lisanlama yöntemi de lisans sunucusu üzerinden yapıldığı için çalıştığınız firmanın Jet Brains lisansı varsa bu geliştirme ortamını da tercih edebilirsiniz.

Jet Brains Rider MVC
Jet Brains Rider
Bunlarda dışında notepad++ bile tercih edebilirsiniz. Tabi ki bu editörü kullanarak bir debug süresinde Visual Studio ile projenizi bitirirsiniz....

Son olarak konuyu özetleyecek olursak:
ASP.NET MVC ile proje geliştirmek için farklı alternatifler olsa da bir uzman yorumu olarak ASP.NET MVC ile proje geliştirmek için en iyi seçeneğin Visual Studio olduğunu söylemem gerekiyor. Özellikle eğitim sürecinde eğitimin odak noktasını ASP.NET MVC üzerine yoğunlaşması açısından da bu önemli. Bunun temel nedenleri ise her iki teknolojinin de Microsoft temelli olmasıdır. 


Bu blogdaki tüm makaleler ve yazılarda Visual Studio kullanılarak anlatım yapılmıştır. Burada anlatılanları farklı platformlarda da uygulayabilirsiniz. Sonuç olarak yazılan kod aynı, ama bunun yorumlama yapısını doğru tasarlamak önemlidir. Diğer platformlar da bu anlamda sizi biraz uğraştırabilir.

Konuyla ilgili sizin farklı önerileriniz, kullandığınız ve memnun kaldığınız alternatifler varsa bunları da bizimle paylaşabilirsiniz. 
Okumaya Başla