Ana içeriğe atla

Ruby on Rails: DRY ILKESI ve MVC YAPISI

 

Rails, Ruby programlama dilinde yazılmış bir web uygulaması geliştirme ortamıdır. Başlamak için her geliştiricinin neye ihtiyacı olduğu konusunda varsayımlar yaparak web uygulamalarını programlamayı kolaylaştırmak için tasarlanmıştır. Diğer birçok dil ve ortamdan daha fazlasını gerçekleştirirken daha az kod yazmanıza olanak tanır.

Rails felsefesi iki ana yol gösterici ilkeyi içerir:

Don't Repeat Yourself(Kendinizi Tekrar Etmeyin): DRY, "Her bilgi parçasının bir sistem içinde tek, açık ve yetkili bir temsile sahip olması gerektiğini" belirten bir yazılım geliştirme ilkesidir. Aynı bilgileri defalarca yazmayarak, kodumuz daha sürdürülebilir, daha genişletilebilir ve daha az hatalıdır.

Convention Over Configuration(Konfigürasyon Üzerinden Konvansiyon): Rails, bir web uygulamasında pek çok şeyi yapmanın en iyi yolu hakkında fikirlere sahiptir ve sonsuz konfigürasyon dosyalarıyla önemsiz ayrıntılar belirtmenizi gerektirmek yerine varsayılan olarak bu kurallar kümesini kullanır.

Rails Yapısı

MVC yapısını oluşturan genel modüller şöyledir:

  • ActiveRecord (Model) : Aktif Kayıt, iş verilerini ve mantığını temsil etmekten sorumlu sistem katmanı olan MVC'deki M modelidir. Active Record, verileri bir veritabanında kalıcı olarak saklanmasını gerektiren iş nesnelerinin oluşturulmasını ve kullanılmasını kolaylaştırır. Bu, kendisi bir Nesne İlişkisel Haritalama sisteminin bir açıklaması olan Aktif Kayıt modelinin bir uygulamasıdır.
  • ActionView (View) : Rails'de, web istekleri Action Controller ve Action View tarafından ele alınır Tipik olarak, Action Controller, veritabanı ile iletişim kurmak ve gerektiğinde CRUD eylemlerini gerçekleştirmekle ilgilenir. Action View yanıtın derlenmesinden sorumludur. HTML ile karıştırılmış etiketlerde gömülü Ruby kullanılarak yazılır. Şablonların ortak kodla karıştırılmasını önlemek için, bir dizi yardımcı sınıf formlar, tarihler ve dizeler için ortak davranış sağlar. Uygulamanız geliştikçe yeni yardımcılar eklemek de kolaydır.
  • ActionController (Controller) : Action Controller, MVC'deki C'dir Yönlendirici, bir talep için hangi denetleyicinin kullanılacağını belirledikten sonra, isteği anlamaktan ve uygun çıktıyı üretmekten denetleyici sorumludur. Neyse ki Action Controller, temel işlerin çoğunu sizin için yapıyor ve bunu olabildiğince basit hale getirmek için akıllı kuralları kullanıyor. Dolayısıyla bir controller, model ve view arasında bir aracı olarak düşünülebilir. Model verilerini görünüm için kullanılabilir hale getirir, böylece bu verileri kullanıcıya gösterebilir ve kullanıcı verilerini modele kaydeder veya günceller.

Aktif Kayıt Modeli Oluşturma

Aktif Kayıt modelleri oluşturmak çok kolaydır. Tek yapmanız gereken, ApplicationRecordsınıfı alt sınıflara ayırmak ve gitmekte fayda var:

class Product < ApplicationRecord
end
Bu , veritabanındaki Productbir productstabloya eşlenen bir model oluşturacaktır Bunu yaparak, bu tablodaki her satırın sütunlarını modelinizin örneklerinin nitelikleriyle eşleştirme olanağına da sahip olacaksınız. productsTablonun aşağıdaki gibi bir SQL (veya uzantılarından biri) kullanılarak oluşturulduğunu varsayalım :
CREATE TABLE products (
   id int(11) NOT NULL auto_increment,
   name varchar(255),
   PRIMARY KEY  (id)
);

Yukarıdaki şema, iki sütunlu bir tablo bildirir: idve nameBu tablonun her satırı, bu iki parametreye sahip belirli bir ürünü temsil eder. Böylece aşağıdaki gibi kod yazabilirsiniz:

p = Product.new
p.name = "Some SmartPhone"
puts p.name # "Some SmartPhone"

CRUD Veri Okuma ve Yazma
CRUD veriler üzerinde çalıştırmak için kullanan dört fiiller için bir kısaltmadır CREATE, READ, Update ve Delete. Active Record, bir uygulamanın tablolarında depolanan verileri okumasına ve değiştirmesine izin veren yöntemleri otomatik olarak oluşturur.
Create : Aktif Kayıt nesneleri bir karma, bir bloktan oluşturulabilir veya öznitelikleri oluşturulduktan sonra manuel olarak ayarlanabilir. new yöntemiyle yeni bir nesne döndürür createnesneyi döndürür ve veritabanına kaydeder.

Örneğin, bir model verilmiş Usernitelikleri ile nameve occupationcreateyöntem çağrısı oluşturur ve veritabanına yeni bir kayıt ekler:

user = User.create(name: "S.Burak", occupation: "Jr. Developer")
newYöntemi kullanarak , bir nesne kaydedilmeden somutlaştırılabilir:
user = User.new
user.name = "S.Burak"
user.occupation = "Jr. Developer"

user.save, kaydı veritabanına kaydeder.

Son olarak, eğer her ikisi de createve newbaşlatma için bu blok için yeni bir nesne verecektir:

user = User.new do |u|
  u.name = "S.Burak"
  u.occupation = "Jr. Developer"
end
Read : Active Record, bir veritabanı içindeki verilere erişmek için zengin bir API sağlar. Aşağıda, Active Record tarafından sağlanan birkaç farklı veri erişim yöntemi örneği verilmiştir.

users = User.all
user = User.first
S_Burak = User.find_by(name: 'S.Burak')
users = User.where(name: 'S.Burak', occupation: 'Jr. Developer').order(created_at: :desc)
Update :Bir Aktif Kayıt nesnesi alındığında, öznitelikleri değiştirilebilir ve veritabanına kaydedilebilir.

user = User.find_by(name: 'S.Burak')
user.name = 'Burak'
user.save
Bunun kısaltması, istenen değere hash eşleme öznitelik adları kullanmaktır, örneğin:
user = User.find_by(name: 'S.Burak')
user.update(name: 'Burak')

Bu, en çok birkaç özniteliği aynı anda güncellerken kullanışlıdır. Öte yandan, birkaç kaydı toplu olarak güncellemek isterseniz, update_allsınıf yöntemini kullanabilirsiniz :
User.update_all "max_login_attempts = 3, must_change_password = 'true'"
Delete : Aynı şekilde, bir Aktif Kayıt nesnesi bir kez alındığında yok edilebilir ve bu da onu veritabanından kaldırır.
user = User.find_by(name: 'S.Burak')
user.destroy
Birkaç kaydı toplu olarak silmek isterseniz, şu yöntemi kullanabilir destroy_by veya destroy_allyöntemini kullanabilirsiniz :
User.destroy_by(name: 'S.Burak')
User.destroy_all
Rails'te Action View Kullanma
Her denetleyici için, app/viewsdizinde, denetleyiciyle ilişkili görünümleri oluşturan şablon dosyalarını tutan ilişkili bir dizin vardır Bu dosyalar, her bir denetleyici eyleminden kaynaklanan görünümü görüntülemek için kullanılır.
Şablonlar:

Eylem Görünümü şablonları birkaç şekilde yazılabilir. Şablon dosyasının bir .erbuzantısı varsa, ERB (Gömülü Ruby) ve HTML'nin bir karışımını kullanır. Şablon dosyasının bir .builderuzantısı varsa, Builder::XmlMarkupkitaplık kullanılır.

Rails, birden çok şablon sistemini destekler ve aralarında ayrım yapmak için bir dosya uzantısı kullanır. Örneğin, ERB şablon sistemini kullanan bir HTML dosyası .html.erbbir dosya uzantısına sahip olacaktır .

ERB : Bir ERB şablonuna Ruby kodu hem <% %>ve <%= %>etiketleri kullanılarak dahil edilebilir <% %>Etiketler bu şartlar, döngüler, ya da bloklar halinde, hiçbir şey dönmez Ruby kodu çalıştırmak için kullanılır ve <%= %>çıktıyı istediğinizde etiketleri kullanılır.

<h1>Tüm Isimler</h1>
<% @people.each do |person| %>
  Name: <%= person.name %><br>
<% end %>
Action Controller Kullanımı
Controller, ApplicationControllerdiğer sınıflardan miras alan ve diğer sınıflar gibi yöntemlere sahip bir Ruby sınıfıdır. Uygulamanız bir istek aldığında, yönlendirme hangi denetleyicinin ve eylemin çalıştırılacağını belirler, ardından Rails bu denetleyicinin bir örneğini oluşturur ve yöntemi eylemle aynı adla çalıştırır.

class ClientsController < ApplicationController
  def new
  end
end
Örnek olarak, bir kullanıcı /clients/newuygulamanıza yeni bir istemci eklemek için girerse , Rails bir örnek oluşturacak ClientsControllerve newyöntemini çağıracaktır Yukarıdaki örnekteki boş yöntemin gayet iyi çalışacağını unutmayın çünkü new.html.erbeylem aksini söylemediği sürece Rails varsayılan olarak görünümü oluşturacaktır Yeni bir yöntem oluşturarak Clientnewyöntem bir @clientörnek değişkenini görünümde erişilebilir hale getirebilir :
def new
  @client = Client.new
end
ApplicationControllermiras alır ActionController::Base, bu da bir dizi yararlı yöntemi tanımlar.
Yalnızca genel yöntemler eylem olarak çağrılabilir. Yardımcı yöntemler veya filtreler gibi eylem olması amaçlanmayan yöntemlerin ( privateveya ile protectedgörünürlüğünü azaltmak en iyi uygulamadır .
Parametreler
Kullanıcı tarafından gönderilen verilere veya denetleyici eylemlerinizde diğer parametrelere erişmek gerekebilir. Bir web uygulamasında olası iki tür parametre vardır. İlki, sorgu dizesi parametreleri adı verilen URL'nin bir parçası olarak gönderilen parametrelerdir. Sorgu dizesi "?" URL'de. İkinci parametre türü genellikle POST verileri olarak adlandırılır. Bu bilgiler genellikle kullanıcı tarafından doldurulmuş bir HTML formundan gelir. POST verisi olarak adlandırılır çünkü yalnızca bir HTTP POST isteğinin parçası olarak gönderilebilir. Rails, sorgu dizisi parametreleri ile POST parametreleri arasında herhangi bir ayrım yapmaz ve her ikisi de paramscontroller'inde bulunur:

class ClientsController < ApplicationController
  def index
    if params[:status] == "activated"
      @clients = Client.activated
    else
      @clients = Client.inactivated
    end
  end
  def create
    @client = Client.new(params[:client])
    if @client.save
      redirect_to @client
    else
      render "new"
    end
  end
end
Karma Ve Dizi Parametreleri
paramsKarma tek boyutlu anahtarlara ve değerlere sınırlı değildir. İç içe diziler ve karmalar içerebilir. Bir değer dizisi göndermek için, anahtar adına boş bir çift köşeli parantez "[]" ekleyin:

GET /clients?ids[]=1&ids[]=2&ids[]=3

params[:ids]Şimdi değeri olacak ["1", "2", "3"]Parametre değerlerinin her zaman dizeler olduğunu unutmayın; Rails, türü tahmin etmeye veya atmaya çalışmaz.
Karma göndermek için parantez içine anahtar adını ekleyin:

<form accept-charset="UTF-8" action="/clients" method="post">
  <input type="text" name="client[name]" value="Burak" />
  <input type="text" name="client[phone]" value="12345" />
  <input type="text" name="client[address][postcode]" value="34000" />
  <input type="text" name="client[address][city]" value="Istanbul" />
</form>

Bu form gönderildiğinde değeri params[:client]olacaktır { "name" => "Burak", "phone" => "12345", "address" => { "postcode" => "34000", "city" => "Istanbul" } }İç içe geçmiş hash'i not edin params[:client][:address].

paramsNesne bir Hash gibi davranır, ancak tuşları olarak birbirlerinin yerine semboller ve dizeleri kullanmanızı sağlar.

Yararlandığım Kaynaklar:

https://api.rubyonrails.org/

https://tr.wikipedia.org/wiki/Ruby_on_Rails

Yorumlar

Bu blogdaki popüler yayınlar

İNSAN SİNİR SİSTEMİNİN TAKLİDİ: YAPAY SİNİR AĞLARI

Yapay sinir ağları; beynin bir işlevi yerine getirme yönteminin matematiksel olarak modellenmesi ile tasarlanan sistemlerdir. Yapay sinir ağları, paralel dağıtılmış ağlar, bağlantılı ağlar, nuromorfik ağlar gibi adlarla da tanımlanmaktadır. Yapay sinir ağlarının ortaya çıkışından kısaca bahsetmem gerekirse; ilk yapay sinir ağı modeli 1943 yılında bir sinir hekimi olan Warren McCulloch ve bir matematikçi olan Walter Pitts tarafından “ Sinir Aktivitesinde Düşüncelere Ait Bir Mantıksal Hesap ( A Logical Calculus of Ideas Immanent in Nervous Activity )” başlıklı makale ile ortaya çıkarılmıştır. Öncelikle insanlarda bulunan sinir hücresinin yapısını ele alalım. Dentrites (Dendritler): Dendritler dışarıdan uyartıları alan ve hücre gövdesine ileten yapılardır. Dendritlerin çok sayıda olması, hücrelerin pek çok nörondan sinyal alma kapasitesini arttırır. Nucleus (Çekirdek): Akson boyunca işaretlerin periyodik olarak yeniden üretilmesini sağlayan yapılardır. Axon (Akson): Ak...

Mobil Uygulama Geliştirme: FLUTTER

Son zamanlarda merak sardığım konulardan biri de mobil uygulama geliştirme oldu. Küçücük bir uygulamanın bile verdiği çıktı ile mutlu olduğumu görünce mobil uygulama geliştirmekten zevk aldığımı hissettim. Araştırıp öğrenmeye başladım ve kısa sürede uygulama geliştirip ve bu uygulamayı kullanmak gerçekten güzel bir duyguydu. Şimdi sizlere geliştirdiğim basit bir Todo uygulamasından bahsedeyim. Flutter SDK ve Dart programlama dilini kullanarak çapraz platform çalışan yapılacaklar listesi uygulamasıdır. Bu uygulamada, verileri devamlılığını sağlamak için SQLite3 kullandım. Uygulama hem iOS hem de Android işletim sisteminde çalışmaktadır. Neden Flutter’ı Seçtim? ·  Flutter ile uygulamanızda yaptığınız bir değişikliği hot reload özelliği ile hızlı bir şekilde görebilirsiniz. Yani compile etmek(derlemek) için artık uzun süreler beklemeye gerek yok. Örnek vermek gerekirse Flutter ile varsayılan olarak gelen increment uygulamasını android sdk ile çalıştırmak ortalama 3 dak...

TARIM 4.0

  Tarım 4.0 nedir, nasıl ortaya çıkmıştır? Yüzyıllar boyunca, ülkeleri ve genel olarak dünyayı şekillendiren birçok sanayi devrimi olmuştur. Endüstri 4.0, çalışma biçimlerini değiştiren en son sanayi devrimidir. Otomasyon, yapay zeka (AI) ve robotiğin yükselişinin yanı sıra İnternet ve giderek daha iyi teknoloji ile bağlantılı diğer ilerlemeleri ifade eder. Tarım endüstrisi de teknoloji ve çalışma alanındaki bu önemli değişimi yaşadı ve deneyimlemeye devam ediyor. ‘Tarım 4.0’ olarak anılıyor ve çiftçiliği yenilikçi ve kendine güvenen hale getirmeyi vaat ediyor. İşte son teknolojik gelişmelerin tarımı değiştirmesinin beklendiği üç temel yol şunlardır: Yapay zeka Yapay zeka, süreçleri çok daha verimli hale getirmek için tarım endüstrisi tarafından kullanıldı. AI, çeşitli makinelere ve ekipman parçalarına uygulanarak, sprinkler ve gübre gibi farklı cihazların işlerini daha etkin bir şekilde gerçekleştirmelerine olanak tanır. Bunun iyi bir örneği, karada büyük nesneleri taşımak, çekmek...