Ticari Bir SaaS Projesinde Elixir Phoenix Kullanımı
Linkly, Elixir ile yazılmıştır.
Her zaman Erlang ekosistemine maruz kalmak istedim ve Elixir buna kolay bir yoldur.
BEAM veya Erlang'ın faydalarını burada ele almayacağım, çünkü bu başka yerlerde yazılmıştır. Bunun yerine, gerçek bir proje için Elixir Phoenix kullanmanın pratik yönlerine odaklanacağım.
Ruby on Rails'i bildiğinizi varsayacağım, çünkü Elixir'in web framework'ü olan Phoenix, Rails'ten büyük ölçüde ilham almıştır.
Elixir Phoenix'te Gerçekten Programlama Yapmak
Elixir'de yazı yazmak keyifli bir deneyimdir.
Rails'e benzer paradigmaları izler, MVC de dahil olmak üzere, ve benzer şekilde görünür.
Rails'den farklı olarak, kod çalıştırılmadan önce derlenir. Bu, aksi takdirde karşılaşabileceğiniz hataları yakalamanıza izin verdiği için yararlı bir adımdır.
Phoenix'teki Modeller 'Contexts' halinde gruplandırılır. Bu, uygulamaların bölümleri arasında net bir ayrım oluşturmak için tasarlanmış ekstra bir soyutlama düzeyidir, örneğin Kullanıcılar ve Ürünler. Her context, herhangi bir sayıda modeli içerebilir.
Performans
Diğer bloglarda performans hakkında çok şey yazılmıştır, bu yüzden burada pratik yönünü ele alacağım.
Tam özellikli bir web framework için performans açıkça Rails'ten çok daha hızlıdır ve çalıştırmak için önemli ölçüde daha az donanım gerektirir.
mix phx.server vs rails server çalıştırmanın 'başlama' süresi daha hızlıdır. Bir dizüstü bilgisayarda geliştirme yaparken bile, sayfalar Phoenix ile fark edilir şekilde daha hızlı yüklenir.
Elixir Phoenix vs Rails için Paketlerin Kullanılabilirliği
Yüzeysel olarak, burada bir fark varmış gibi görünmektedir. Rails, Elixir'in Hex deposuna karşı binlerce gem'e sahiptir.
Fakat gerçekte, gerçekten kullanacağınız neredeyse her şey Elixir Hex paket sisteminde mevcuttur - JSON ayrıştırıcılar, HTTP istemcileri, Markdown biçimlendirme ve ayrıştırma araçları - hepsi orada ve modül kalitesi üstündür.
Rails'te çok daha fazla gem vardır, ancak bakımsız durumları veya uygulamanıza çok fazla harici bağımlılık yapılandırmanın riski nedeniyle bunları gerçek bir projede asla dahil etmezsiniz.
Stripe ve Recurly gibi platformlar, API'leriyle etkileşim kurmak için kendi Rails gem'lerini sürdürürler. Bu yararlı olabilir ve genellikle Elixir desteğinden yoksundurlar.
Ancak, Elixir'in Tesla paketini hizmetlerin HTTP uç noktalarıyla etkileşim için kullanmanın çok kolay olduğunu buldum ve sonunda bu şekilde çalışmayı tercih ettim, önceden paketlenmiş gem'leri kullanmaya karşılık, çünkü daha hafiftir ve neler olduğunu anlamanıza izin verir.
Veritabanı Soyutlaması - Ecto ve ActiveRecord
Ecto, ActiveRecord kadar tam özellikli değildir.
Bu amaçla değildir.
Ecto, veritabanı sorgularını Elixir nesnelerine eşleyen basit bir veritabanı sarıcısıdır.
Başlangıçta, ActiveRecord gibi çalışmadığı için sinirlenmiş hissettim.
Ancak Ecto, veritabanıyla çok doğru bir şekilde etkileşim kurmanıza izin verir ve aslında web uygulamaları programlamayı çok daha kolay hale getirir.
ActiveRecord ile, karmaşık sorgular oluşturmaya başladığınızda, ActiveRecord'u anlamak çıkmaz bir sorguyu SQL olarak yazmaktan daha uzun sürer.
Her ikisini de kullandıktan sonra, Ecto gibi hafif bir veritabanı sarıcısı kullanmanın ActiveRecord gibi ağır bir soyutlamadan daha kolay olduğu sonucuna vardım.
Bir veritabanı sarıcısı kullanmanın güvenliğini sunar, çünkü bir 'çok zekice' soyutlamanın başa ağrısı ve ağırlığı olmadan.
Her ikisi de göç ve geri alma işlevselliğini içerir.
Phoenix projeleri için varsayılan veritabanı Postgres'tir.
NoSQL veritabanlarını kullananlar için Ecto, Mongo ile çalışır.
Daha da iyisi, Ecto, Postgres'in NoSQL özellikleriyle çalışır, Mongo'ya ihtiyaç duymadan JSON'u kaydetmenize ve sorgulamanıza izin verir.
Kullanıcı Kimlik Doğrulaması
Bu, Elixir Phoenix'in eksik olduğu bir yerdir.
Rails, Devise modülüne sahiptir. Phoenix, Coherence'a sahiptir, ancak şu anda bakımsızdır.
Temel bir kullanıcı adı ve şifre girişi kullanmak istiyorsanız, bunun her adımını oluşturmak zorunda kalacaksınız. Bu şifreler karması, şifre sıfırlama mantığını, 'beni hatırla' ayarlarını vb. içerir.
Bu yorucu ve önemli güvenlik riskini taşır.
Ben Auth0 kullanmayı seçtim ve Phoenix ile iyi çalıştı. Belki bu zaten daha iyi bir çözümdür, ama seçim olması güzel olurdu.
Dağıtım ve Hosting
Phoenix uygulamalarının ana ev sahibi Gigalixir, Elixir meraklıları tarafından yönetilen küçük bir Amerikan şirketidir.
Gigalixir, Google Cloud'da barındırılıyor, bu yüzden temel altyapı sağlamdır.
Gigalixir'in buildpack dağıtımı kolaylaştırır ve Elixir'in tüm akıllı dağıtım stratejilerini destekler (distillery, mix).
'Kendin yap' yapımından daha pahalı, ancak maliyetin çoğu Postgres veritabanı barındırmasında sarılı.
Elixir Phoenix o kadar hafiftir ki, küçük docker podlarında çalıştırılabilir ve yine de çok sağlıklı bir istek sayısını işleyebilir.
Maraja rağmen, başa ağrısını almak kesinlikle buna değer.
Ekleyeceklerim, müşteri destek hizmetleri olağanüstüdür.
Programcıların Kullanılabilirliği
Orada çok daha az Elixir programcı var.
Elixir, "programcının dili" - başka bir şey öğrendikten sonra insanların geldiği bir dildir.
Bununla birlikte, Elixir yapanlar tipik olarak daha iyi programcılardır. Belki de daha iyi bir dil seçmenin bilinçli seçimidir.
Bana Rails'in erken günlerini hatırlatsıyor, sadece "rockstar'ların" bunu kullanacağı gibi görünüyordu (PHP'ye karşılık).
İyi bir Rails programcısının Elixir Phoenix'i öğrenmede hiçbir sorunu olmayacak ve birkaç gün içinde hazır olacak.
Elixir Phoenix'i Tekrar Kullanır mıydım?
Kesinlikle.
Birçok dille çalıştım ve Elixir, çalıştığım en kolay ve en güçlüsüdür.
Elixir yazacağım için sabırsızlanıyorum.
100 kısa bağlantı edinin ve aylık 500 tıklamayı ücretsiz olarak takip edin.