Ana içeriğe atla

Scripting Desteği ile Uyarlanabilir Yazılımlar

Bir yazılım firmasının müşterileri için yapabileceği en kayda değer işlerden bir tanesi uygulamalarına scripting desteği eklemesi ve onlara sabit bir uygulamadan öte, uyarlanabilir bir altyapı sunmasıdır. Scripting desteği, müşterinin uygulamanın sınırlarını zorlamasını ve uygulamaya değer katmasını sağlar. Hatta yazılımsal buglarda ufak script kodları tampon görevi görür. Gerçek çözüm ve bu çözümle derlenen yeni versiyon çıkıncaya kadar müşterinin hayatına devam etmesini sağlar.
.NET uygulamalarında scripting desteği sağlayabilmek amacıyla çeşitli yöntemlere başvurmak mümkündür. Kullanılabilecek bu yöntemler aşağıdaki gibidir;
  • “On the fly code compilation” yöntemi(Reflection.Emit); CodeCompiler kullanılarak çalışma-zamanında .NET kodu yaratılır, derlenir ve çalıştırılır. En yaygın yöntem olarak gösterilse de kullanımı, değiştirilmesi ve debug edilmesi en zor olan yöntemdir.
  • “Micsosoft.VisualBasic.Vsa” ad alanı içerisindeki sınıfların ve kütüphanelerin kullanılması; Kolaylığı itibari ile tercih edilebilecek bir yöntemdir. Fakat Vsa ad alanı içerisindeki kütüphanenin kendine ait bir nesne tasarım modeli ve kullanım kuralı olduğu için anlaşılması zor olabilir.
  • “Microsoft ScriptControl” COM sınıfının kullanılması; En basit yöntemdir. Yazımızda bu yöntem üzerinde odaklanacağız. Yapısı basit fakat işlevselliği yüksek olan Microsoft Scripting COM sınıfının kullanımını temel alır. COM teknolojisi ile yazılan bu sınıfın kullanılabilmesi için ilk olarak .NET IDE’si “Add Reference” kısmından “COM” tabına gelinmeli ve bileşen seçilmelidir.
MSScriptControl COM Sınıfının Kullanımı

Uygulamaya COM referansı eklendikten sonra, ilk olarak MSScriptControl.ScriptControlClass sınıfı kullanılarak yeni bir scripting nesnesi yaratılır. Sonrasında script dili seçilir. Tercihe göre vbscript veya javascript dili seçilebilir. Dinamik script bloğu içerisinde eğer bir sınıf kullanılmak isteniyorsa ilgili sınıf yaratılır ve yaratılan nesne değişkeni script kontekstine eklenir. Daha sonra çalıştırılacak sciprt kod bloğu eklenir ve son olarak kod bloğu çalıştırılır.
Dim objScript As New MSScriptControl.ScriptControlClass
objScript.Language = "vbscript"
objScript.AddObject("objCls", objCls)
objScript.AddCode(txtCode.Text)
objScript.Run("DoJob", "Param" )
Örnek Uygulama

Uygulama ASP.NET 2.0 ile geliştirilmiştir. Uygualamada server-side yaratılan 2 tane nesnenin DoJob isimli basit bir vbscipt fonksiyonun kontekstine operation ve msg isimleri ile geçirilip, propertylerinin ve methodlarının kullanım şekli gösterilmiştir. Buradaki uygulamanın ASP.NET tabanlı olması önemli değildir, aynı şekilde windows uygulaması da olabilir.
Public Class OperationReturnMessage
    Public Type As String
    Public Desc
As String
End Class

Public Class Operation
    Public Sub New()
    End Sub

    Public Prop1 As Integer
    Public Prop2 As Integer
    Protected Friend PropRes As Integer

    Public Sub DoOp()
        If Prop1 = 0 Or Prop2 = 0 Then
            Throw New Exception
        Else
            PropRes = Prop1 + Prop2
       
End If
    End Sub
End Class
Tablo1. Operation ve OperationReturnMessage sınıfları
Tablo 1’de uygulamada kullanılan Operation ve OperationReturnMessage sınıfları ve onlara ait sınıf üyeleri gösterilmiştir. Operation sınıfındaki DoOp fonksiyonu, bir nevi toplama işlevi görür. Prop1 ve Prop2’nin değerlerini kontrol ederek, toplar ve bu değeri PropRes’e atar.
Function DoJob(param) 
  if operation.Prop1=0 then
    operation.Prop1 = 1
  end if

  operation.DoOp()
  msg.Type = "S"
  msg.Desc = "Operation Success" 
  DoJob = msg.Type
End Function
Tablo2. vbscript ile yazılan DoJob fonksiyonu
Tablo 2’de DoJob vbscript fonksiyonu gösterilmiştir. operation ve msg nesneleri bu scripte Tablo 3’de görülen kod bloğu ile aktarılmıştır.
    ….
    Dim objMsg As New OperationReturnMessage
    Dim objOp As Operation = OperationOnTheForm()
    Dim result As Object
    objScript.AddObject("operation", objOp)
    objScript.AddObject("msg", objMsg)
    objScript.AddCode(txtCode.Text)
    result = objScript.Run("DoJob", "param")

    ….
Tablo3. operation ve msg nesnelerinin script kontekstine geçirilmesi
Kaynak kod indir
Deniz KILINÇ

Yorumlar

Bu blogdaki popüler yayınlar

UML ve Modelleme – Bölüm 4 (Class (Sınıf) Diyagramları)

Bir önceki makalemizde UML modellemede kullanılan ilk diyagram olan Use Case diyagramını incelemiştik. Bu makalemizde nesne tabanlı programlamada kullanılan sınıflar ve sınıfların arasındaki ilişkileri modelleyebileceğimiz diyagramlar olan Class(Sınıf) diyagramlarını inceleyeceğiz. UML’de sınıflar, nesne tabanlı programlama mantığı ile tasarlanmıştır. Sınıf diyagramının amacı bir model içerisinde sınıfların tasvir edilmesidir. Nesne tabanlı uygulamada, sınıfların kendi özellikleri (üye değişkenler), işlevleri (üye fonksiyonlar) ve diğer sınıflarla ilişkileri bulunmaktadır. UML’de sınıf diyagramlarının genel gösterimi aşağıdaki gibidir. Şekil 1. Class Diyagram Şekil1’de görüldüğü üzere bir dikdörtgeni 3 parçaya bölüyoruz. En üst bölüm sınıf adını, orta kısım özellik listesini (üye değişkenler) ve en son kısım, işlev listesini (üye fonksiyonlar) göstermektedir. Çoğu diyagramlarda alt iki bölüm çıkarılır. Genelde tüm özellik ve işlevler gösterilmemektedir. Ama

Yazılım Maliyet Tahmineleme Tecrübeleri

Yazılım mühendisliğinde maliyet hesabı her zaman problem olmuştur. "Bu iş kaç Adam/Gün tutar?" sorusuyla sıkça karşılaşıyoruz. Adam/gün veya Adam/ay ölçütleri bir kaynağın/kişinin belirtilen zaman dilimindeki iş gücü anlamına gelir. Tabi bu noktada yine kafa karışıklıkları başlar. 6 A/G'lik bir işi hızlandıralım diye 2 kişi ile yapmaya çalışsak ve kaynak/kod, modül, altyapı, insan vb. her bir şeyi bir kenara bıraksak, matematiksel basit formülle 6/2=3 A/G'de biter? Gerçek hayat böyle değil, öncelikle bunu anlamamız lazım. Hep şu örnek verilir; "Aynı bebeği 2 kadın birlikte daha kısa sürede doğurur mu?" Eğer bunun cevabı "Evet" ise (veya bir gün böyle bir durum ortaya çıkarsa), yazımı değiştirmem gerekecek:) Mevzu gerçekten derin...Maliyet hesabı; bulunduğunuz firmanın yazılım süreçlerini hangi methodlarla uyguladığına, ilgili işin o dönemdeki aciliyetine, (şirket yönetiminin baskısına:)) vb. bir çok duruma bağlı olabilir. Örneğin; bizim firmada e

UML ve Modelleme – Bölüm 3 (Use Case Diyagramlar)

Önceki iki makalemizde ( 1 , 2 ) UML’e genel olarak değinip ve modellemede kullanacağımız dokuz diyagram hakkında bilgiler vermiştik. Bu makalemizde Use Case diyagramından detaylı bahsedeceğiz. Öncelikle, genel Use case diyagramının tanımını hatırlayalım. “Bir kullanıcı ve bir sistem arasındaki etkileşimi anlatan senaryo topluluğudur.” Ivar Jacobson Senaryo tanımı için der ki: “Aktörle sistem arasında gerçekleştirilen, sonucunda aktöre farkedilir getirisi/ faydası oluşan etkileşimli diyalogdur. ” UML Use Case Diyagramları  sistemin işlevselliğini açıklamak amacıyla kullanılır. Sistemin birbirinden ayrı özelliklerinin detaylarını göstermekten ziyade, Use Case Diyagramlar, tüm mevcut işlevselliği göstermek için kullanılabilir. Buradaki en önemli noktalardan biri,   Use Case Diyagramlar temelde sequence diyagram ve akış diyagramlarından farklıdır. Use Case diyagramlar dört ana elemandan oluşmaktadır. Aktörler , Sistem (Proje kapsamını belirtir) , Use Caseler ve bunlar ara