Orchard Core: Modern ve Modüler Uygulama Geliştirme Çatısı

İki yılı aşkın süredir tam zamanlı olarak üzerinde çalıştığım ve geliştirdiğim uygulamaların çekirdeğinde yer alan Orchard Core’u biraz tanıtmak istiyorum. Orchard aslında 2010’lı yıllarda .Net ile geliştirilmiş bir CMS olarak ortaya çıkmış ve uzunca zaman CMS üzerinde derinleşmiş bir uygulama idi. O zamanlarda kullanıp, bir kaç web sitesi yayına almışlığım vardı. .Net ekossiteminin gelişmesi, platform bağımsız ve açık kaynak olması ile beraber, Orchard –> Orchard Core olarak geliştirilmeye ve evrilmeye başlandı. İlk beta versiyonu 2018 yılında yayınlandı ve şuan en güncel sürüm olarak 1.8.3 bulunuyor.

Orchard Core’un gelişimini takip ettiğim ve geçmiş versiyonlarıylada geliştirmeler yaptığım için, yeni geliştireceğimiz web uygulamaları konusunda ciddi bir adaydı. Modern, çoklu kiracılı, modüler bir uygulama geliştirmek meşakkatli, çokça altyapıya emek isteyen bir iş. Çok özel ihtiyaçlarınız yada kısıtlanırız yoksa, bir uygulama geliştirme çatısı kullanmak çok avantajlı. Özellikle küçük ve orta büyüklükteki geliştirim yapan şirketlerin bu tarz araçlar kullanmasını çok faydalı buluyor ve Orchard Core gibi uygulamaların üzerine eğilmeleri gerketiğini düşünüyorum.

Web tabanlı bir uygulama geliştirmek isteyen ve ASP.NET Core ile geliştirim yapabilecekler için Orchard Core bir çok özelliği kendi bünyesinde barındırıyor. CMS özelliği isteyin yada istemeyin, Orchard Core modüler olduğu için, sadece uygulama geliştirme altyapısı olarakta kullanabilirsiniz, CMS modülü vasıtasıyla içerik girip, bu içerikleri çok esnek bir yapıda yönetebileceğiniz yetenek setinede sahip olabilirsiniz. Çoklu kiracılı yapıyı desteklediği için, tek bir kurulumda N tane uygulamayı izole olarak yönetebilir, her birinin gerekiyorsa yönetim ekranları birbirinden izole olarak çalışabilmektedir.

“Document database” yaklaşımı sayesinde, veriler json formatında tutulmakla birlikte, SQL ile veri çekebilmeye destek vermesi için, her bir veri tipi için index tablolarını otomatik oturularak veri tutulmakta ve hibrit bir yaklaşık benimsenmiştir.

Orchard Core’un bir çok temel özelliğine https://docs.orchardcore.net/en/latest/ sayfasındaki dokümantasyonlardan erişebilirsiniz.

Orchard Core kullanan bir geliştirici, biraz fullstack takılarak, zengin bir web uygulamasını tek başına geliştirebilir. Sağladığı tema ve modül destekleri, liquid desteği, graphql, rest api desteği, yönetim panelinden sql ve dinamik veri yapıları desteği bir çok önemli bir çok özelliği bünyesinde bir harmoni ile bulundurması sayesinde, geliştiricilerin sadece ihtiyaç ile ilgilenmesine olanak sağlamaktadır.

Bir ihtiyaç için geliştirim yapacakken, bunun logu nasıl yazılacak, veriyi girip, yönetebileceğin ekranlardan, yetkilendirmeye, api desteği sunmaya, cache ve performans gibi noktalara takılmadan geliştirebilmeye olanak sağlaması ciddi katalizör oluyor.

Özellike C# ile web uygulaması geliştiren kişilerin, C# ile haşır neşir olmuş arayüz gelişticilerin kullanmasını faydalı buluyorum.

Orchard Core ile ilgileniyor veya bir destek ihtiyacınız varsa, eposta ile iletişime lütfen çekinmeden geçin.

Faydalı linkler:

https://github.com/OrchardCMS/OrchardCore

https://www.youtube.com/@Lombiq

.Net Core 2.0 & .Net Standart 2.0 – DailyBuilds

.Net Core, 1.1 versiyonuyla barındırdığı kütüphaneler ile birlikte benim için gayet stabil hale gelmişti ki, ufukta görünen 2.0 (veya 1.2) ve netstandart 2.0 süürmleri, full framework’ten uyarlanacak yüzlerce api’leri ile çok cazip hale gelmeye başladı.

Benim gibi .Net Core üzerinde uygulama geliştiriyorsanız ve size aşağıda ki grafikte bulunan kütüphaneler gerekiyorsa, şimdiden dailybuild versiyonunu indirip denemeye başlayabilir, nisan 2017 gibi release olması beklenen versiyona önceden göz atabilirsiniz.

Öncelikle; https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/dogfooding.md adresinde linki bulunan size uygun son build’i indirin, sonrasında “dotnet –version” ve “dotnet –info” komutlarıyla sdk’nın doğru kurulduğuna “2.0.0-*” versiyon numarasını görüp emin olun.

Hangi versiyonda çalışacağınıza tam emin olmak istiyorsanız, “dotnet new” komutuyla oluşturacağınız mini projenin csproj dosyasında ki versiyonu dikkate almalısınız.

Mevcut projenizde MSBUILD kullandığınızı varsayarsak, csproj dosyasını aşağıda ki gibi düzenleyin;


<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<RuntimeFrameworkVersion>2.0.0-beta-001507-00</RuntimeFrameworkVersion>
</PropertyGroup>

Gerekli olacak dev nuget paketleri için, Nuget kaynağı olarak https://dotnet.myget.org/F/dotnet-core/api/v3/index.json adresini ekleyin.

Sonrasında daha önceden Full Framework’te kullandığınız bir çok kütüphanenin artık tamamen uyarlandığını göreceksiniz.

Happy Hacking!

 

EF 7 – Reverse Engineering

Entity Framework 7 ile birlikte, Database-First olarak adlandırılan, mevcut veritabanından edmx üretme ile kullanılan yöntem son bulmuş oldu. Fakat benim gibi, database first kullanmasanızda, direk code first olarak modelleri ve context’i kendiniz oluşturmak istemeye bilirsiniz. Aslında sizin bir reverse engineer’a ihtiyacınız bulunmakta. EF 6 ile kullanıla bilen bir visual studio eklentisi ile bu işi yapabiliyorduk, yani mevcut veritabanından ilgili model, mapping ve context’i üretebiliyorduk. (https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d)

EF 7 ve .Net Core 1.0 ile birlikte hayatımıza girmeye başlayan yeni yaklaşımlardan biri command tool’lar oldu. Artık diğer bazı dillerde olduğu gibi komut ekranından bir çok işlemi yapabilmemiz mümkün hale geliyor. Bu command line tool özelliklerinden bizim kullanacağımız ise “EntityFramework.Commands” özelliği. Adım adım ilerleyecek olursak;

  • Sisteminizde .Net Core 1.0 ile birlikte RC1 kurulu olmalı (https://go.microsoft.com/fwlink/?LinkId=627627)
  • Projeniz project.json dosyasında aşağıda ki command ve paketler olmalı;
  • "dependencies": {"EntityFramework.Core": "7.0.0-rc1-final", // core EF7
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", // MSSQL provider for EF7
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final", // MSSQL design tools required for database rev eng
    "EntityFramework.Relational": "7.0.0-rc1-final", // shared between relational stored in EF7
    "EntityFramework.Relational.Design": "7.0.0-rc1-final",
    "EntityFramework.Commands": "7.0.0-rc1-final" // EF7 dnx command line interface commands
    },"commands": {
    "ef": "EntityFramework.Commands"
    }

dnvm

  • Bir command promt açın (cmd.exe) ve “dnvm” komutunu yazın.
  • solda ki ekran görüntüsünde  de göreceğiniz üzere dnvm’i göreceksiniz.
  • bu adımda “dnvm upgrade” komutu vererek, dnvm’ i güncellemeniz ve command-line araçlarının aktifleştirmesini sağlamanız gerekiyor.

 

dnx

  • dnvm’i upgrade ettikten sonra, Dnx (.Net Execution Environment)’ ı çalıştırmanız gerekiyor. Eğer başarılı bir dnvm upgrade işlemi yaptıysanız, dnx komutu sonucu yanda ekranı göreceksiniz.
  • dnx komutunu başarıyla gördüyseniz, “dnx ef” komutu için projenizin içerisine gitmelisiniz, project.json dosyasının olduğu dizine.
  • dnxef
  • İlgili dizine girince “dnx ef” komutuyla entity framework commant tool’u görmüş oluyoruz.
  • göreceğiniz üzere, database, dbcontext ve migrations komutları mevcut, biz dbcontext üreteceğimiz için aşağıda ki komutu çalıştırıyoruz;
  • dnx ef dbcontext scaffold "server=ServeName;database=DBNAME;user id=sa;password=PassWord" EntityFramework.MicrosoftSqlServer -a -c "DbContextName" -o Model

Komutu verdikten sonra ilgili model ve context’in projenizde üretildiğini göreceksiniz. EF 6 kullanıcıları için mapping’ler baya değişmiş gelicektir, artık Fluent Api’ye geçiş yapıyoruz, buyrun (https://ef.readthedocs.org/en/latest/modeling/index.html#fluent-api)

RC2 güncellemesiyle birlikte, “dnx” komutunun “dotnet” ile değişiceğinizde dipnıt olarak belirteyim.

Emrah.

java2net / Jar dosyayı c# projede kullanmak / IKVM

Farklı sebeplerden dolayı jar projeyi, c# projenizde yahut tam tersi olan c# projenizi java projeniz içerisinde kullanmak isteyebilirsiniz. En basit yöntemiyle jar projeyi c#’ta yeni process başlatarak kullanabilirsiniz. Fakat eğer kullanmak istediğiniz java projesi uygunsa, projeyi dll yada exe haline getirip kullanmak daha kolay ve yönetilebilir olacaktır.

IKVM  – java2net yada net2java için harika bir dönüştürücü.

Örnek olarak bir java projemiz olduğunu varsayalım, projenin çıktısı projemiz.jar olsun. ve projemizinde kütüphane bağımlılıkları olduğunu varsayalım, bunlarda “lib” klasörünün içerisinde abc.jar, cde.jar olsunlar. Varsaydığımız projemiz.jar dosyasını ikvm’nin binary versiyonu indirip (http://weblog.ikvm.net/),  java jdk yüklü makinanızda herhangi bir yere çıkartın, ikvm

 

ardından, jdk yüklü cihazınızda command promt açıp; “cd  ikvm-8.0.5449.1\bin” komutuyla ikvm path’ine geçiniz ve mecvut komut satırı artık ikvm çalıştırmaya hazır, bunu denemek için sadece ikvm yazıp, ikvm versiyonunu öğrenebilirsiniz.

Jar dosyasımızı dll yapmak için, projemiz.jar dosyasını ve bağımlılığı olan lib klasörünü ikvm bin klasörünün içerisine kopyalıyoruz. sonra dönüştürmek için gerekli komutları veriyoruz.

ikvmc -out:projemiz.dll -recurse:lib\*.jar projemiz.jar

-out : çıktımızın ismi,
-resource : bağımlılıklar, örnekte lib klasörünün altında ki tüm .jar dosyalarını eklemesini belirttim.

örnekte oluşturulacak .dll dosyasını release modda çıkaracaktır, eğer debug yapabilmek istersek;

ikvmc -debug -out:projemiz.dll -recurse:lib\*.jar projemiz.jar

şeklinde belirtmemiz yeterli olacaktır.

Oluşturduğumuz .dll yada exe çıktısını ise projemize referans olarak ekleyebilir ve ilgili nuget paketini yükleyerek kolayca kullanabiliriz. Nuget paketi şart değil, gerekli olan ikvm dll dosyalarını sizde ekleyebilirsiniz fakat nuget daha kolay olacaktır.

Ikvm nuget paketleri : http://www.nuget.org/packages/IKVM/

Yararlı olması dileğiyle.