Coder Social home page Coder Social logo

buraksenyurt / business-detective Goto Github PK

View Code? Open in Web Editor NEW
6.0 2.0 0.0 257 KB

Modernize edilmek istenen bir uygulamadaki business nesnelerin tamamının birer sözleşmesini çıkarmak istediğimizi düşünelim. Her business nesne için birer interface oluşturacağız. Hatta uygulamanın .Net Framework tabanlı olduğunu ve bu sözleşmeler için birer WCF servis noktası üretmek istediğimizi farz edelim. Biraz rosyln'den yararlanarak işi otomatize edebilir miyiz, edebiliyorsak ne kadar ileri gidebiliriz sorularına cevap bulmaya çalışıyoruz.

C# 100.00%
dotnet dotnetfram wcf roslyn roslyn-codefix dependency-analysis csharp

business-detective's Introduction

Business Detective

Modernize edilmek istenen bir uygulamadaki business nesnelerin tamamının birer sözleşmesini çıkarmak istediğimizi düşünelim. Her business nesne için birer interface oluşturacağız. Hatta uygulamanın .Net Framework tabanlı olduğunu ve bu sözleşmeler için birer WCF servis noktası üretmek istediğimizi farz edelim. Biraz rosyln'den yararlanarak işi otomatize edebilir miyiz, edebiliyorsak ne kadar ileri gidebiliriz sorularına cevap bulmaya çalışıyoruz.

Örnek Solution'ın ilk versiyonunda aşağıdaki klasör yapısının söz konusu olduğunu düşünelim (Bu oldukça ufaltılmış bir solution)

  • BusinessLibrary
  • BusinessContracts
  • Entity

Sınıfları elle interface haline getirmek veya dönüştürme işini üstlenen BusinessConverter'dan diğer projeleri referans ederek çalışmak yasak!

İstenenler şunlar:

  • BusinessLibrary içerisinde olup BCCommon'dan türeyen sınıflar için birer Interface nesnesi oluşturulsun ve BusinessContract altına aynı klasör hiyerarşisine göre eklensinler.
  • Interface'i çıkarılan sınıflara interface implementasyon bildirimleri eklensin.
  • Interface'ler ServiceContract ve OperationContract nitelikleri ile donatılsın.
  • Her bir servis sözleşmesi için standart bir config dosyasında kullanılabilmesi için otomatik endPoint tanımları üretilsin.

Çözüm Teorisi

Solution kod tarafında açılı ve BusinessLibrary içerisindeki BCCommon türevli sınıflar keşfedilerek çeşitli kurallara göre interface tiplerinin oluşturulması sağlanır. Ayrıca o anki sınıfın bu interface tipini kullanması için gerekli ilaveler yapılır. İşlemler sırasında bir listede toplanan interface tipleri BusinessContracts içerisinde de eklenir. Interface tipleri oluşturulurken WCF için gerekli niteliklerle donatılır ve uygun config endPoint'lerinin çıkarılması sağlanır. Tabii çözüm sırasında kodun ağaç yapısından (syntax tree) yararlanmak iyi bir fikir olabilir.

./assets/screenshot_2.png

Denemeler

Denemek için BusinessConverter console uygulamasının çalıştırılması yeterlidir. Aşağıdakine benzer bir çıktı oluşması gerekir. Ben sonuçları process isimli branch'te topluyorum.

./assets/screenshot_1.png

Daha Neler Yapılabilir?

  • BusinessHost isimli bir uygulama yazılıp WCF servis endpoint'lerinin işler olması sağlanabilir.
  • Araç komut satırından parametre alarak herhangi bir çözüme uygulanabilir hale getirilebilir.
  • Çözüm belli bir uygulamanın desenine özgü oldu. Generic yapılabilir.

business-detective's People

Contributors

buraksenyurt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.