Fluent Design Pattern

Fluent design pattern’nin temel amacı, bir nesneye her seferinde nesne adını yeniden belirtmek zorunda kalmadan nokta (.) İle bağlayarak bir nesneye birden çok özellik (veya yöntem) uygulayabilmemizdir.

Örnek olarak aşağıdaki gibi Employee sınıfımız olsun.

Yukarıdaki employee sınıfını kullanmak istediğimizde, genellikle employee sınıfının bir örneğini oluştururuz ve ilgili özellikleri aşağıda gösterildiği gibi ayarlarız.

Fluent design pattern kodunuzu daha basit, okunabilir ve bulunabilir hale getirerek nesne kullanım kodunuzu basitleştirir.

Buraya kadar bu design patternin ne işimize yaradığını ve bize nasıl kolaylıklar sağladığı ile ilgili bilgiler verdik.

Gelelim işin ön önemli tarafına bu patterni nasıl uygulayacağız? Aşağıdaki örnek kod bloğunda detaylı olarak anlatılmaktadır.

Yukarıdaki örnekte (.) diyerek her methoda erişebilir durumdayız. Bazen bu durum yaptığınız tasarıma bağlı olarak istenmeyebilir. Örneğin; Connect() methodunun sadece ilk başta gelmesini isteyebilir veya Send() methodunun enson da gelmesini isteyebilirsiniz. Özetle methodların sırasını siz belirlemek isteyebilirisiniz. Bu durum da aşağıdaki örnekte olduğu gibi bir tasarım yapabilirsiniz.

Yukardaki örnekte Class ilk çağırılırken Connect methodu gelecektir. Connect metodu IAzureBlob dönüş değerine sahip olduğundan bir sonraki çağırmada sadece OnBlob methodunun gelmesini sağlayacaktır. Bu şekilde zincirleme devam edecektir.

Fluent API’ların en güzel örnekleri Microsoft.Azure.*.Fluent kütüphaneleridir.

Bu kütüphanelerin en güzel özelliği komutları ve parametreleri (PowerShell betiklerinden farklı olarak) ezberleme ihtiyacını ortadan kaldırmasıdır.

Aşağıdaki kod yeni bir Kaynak Grubu üzerinde veritabanı ve güvenlik duvarı kurallarıyla yeni bir SQL Server oluşturur.

await Azure
.Configure()
.WithLogLevel(Level.Basic)
.Authenticate(credentials)
.WithSubscription("subscriptionId")
.SqlServers
.Define("sqlServerName")
.WithRegion(Region.EuropeWest)
.WithNewResourceGroup()
.WithAdministratorLogin("sqlAdmin")
.WithAdministratorPassword("pass")
.WithNewDatabase("databaseOne")
.WithNewDatabase("databaseTwo")
.WithNewFirewallRule("0.0.0.0")
.WithNewFirewallRule("1.1.1.1")
.WithNewFirewallRule("2.2.2.2")
.CreateAsync();

--

--

--

Tecrübelerimi not aldığım bloğum 📄📌

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Çağlar GÜL

Çağlar GÜL

elektrik-elektonik mühendisi | yazılıma ve tasarıma meraklı | araştırmayı ve paylaşmayı seven | blogger ve oyun sevdalısı

More from Medium

What is Linting?

Years of experience in testing != Seniority level

How to Close the Gender Gap and Move Beyond Rhetoric and Into Action

Review: Whimsical Year 8 Play Worth Missing Literature Class For