Fluent Design Pattern

Çağlar GÜL
Mar 15, 2020 · 2 min read

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();

Çağlar GÜL | Blog

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

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

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