2012-06-19 12 views
10

Ben hangi ile böyle birimine sahip çalışıyorum büyük bir kod temeli vardır: KısacaDelphi için Nesne Yönelimli olmayan refactor koduna yardımcı olmak için kullanabileceğim herhangi bir araç veya eklenti var mı?

unit myformunit; 

interface 
type 
    TMyForm = class(Form) 
    end; 

    procedure not_a_method1; 

    procedure not_a_method2; 

    var 
    global1,global2,global3:Integer; 
    ... 

kod yazarları küresel prosedürleri yazdı yöntemleri yazmadım. Onlardan binlerce var. Bu prosedürlerin içinde, tek bir MyForm:TMyForm örneğine başvururlar.

Bu kodu "en az nesne tabanlı kod" haline getirecek bir çözümleyici/yeniden yazma programı yazmayı düşünüyorum. Strateji, arayüz ve uygulama bölümü globals'ını bir başlangıç ​​olarak forma taşımaktır. Fark ettim ki, bu hiç de şık olmayan bir OOP. Ama bu globals'tan ileriye doğru bir adım.

Bunu bir kerede bir birim üzerinde yapabilseydim, projenin geri kalanında, yalnızca bir seferde tek bir formda yapsaydım, kırmayı onarabilirim. Ama el ile yapmak yerine, birimleri yeniden yazmak için gereken süreyi azaltmak istiyorum. Bazı formlar, gerçekte, aynı birim içinde bulundukları formun tek bir örneğinin durumuna özel 500 + yordamları ve 500+ arabirim ve uygulama genel değişkenlerine sahiptir.

Temel olarak, bunun gibi bir şey yoksa ne yapacağım, Castalia Delphi ayrıştırıcısını temel alan bir ayrıştırıcı yazar. Belki ModelMakerCodeExplorer, ya da castalia, ya da başka bir benzer araç en azından benim için gereken şeylerin bir parçası olacak bir şey var umuyoruz, bu yüzden bu programı kendim yapmak zorunda değilim. Kendim inşa etmem gerekse bile, binden fazla iki bin saat süren homurdanma işini otomatik hale getirebileceğini tahmin ediyorum. En azından onu çalıştırabilirim ve daha sonra ne kadar kırıldığını görebilirim, sonra da bu kodu yeniden düzenlemek için bir çabaya karar verdikten sonra geri dönüp iadesi ya da taahhüt ederim.

Aynı hedefi gerçekleştiren alternatif stratejiler (sıfır kapsülleme ve sıfır OOP'dan, daha fazla kapsülleme ve sıfır OOP'tan biraz daha fazla), yalnızca nesneler kullanıldığında büyük, yapılandırılmamış bir delphi kod tabanı üzerinde kaçınılmaz ve gerçek OOP hakkında hiç bir fikrim yoktu) karşılandı.

+5

Benzer bir şey yaşadım, söyleyebileceğim tek şey, iyi şanslar, buna ihtiyacınız olacak. :( –

+0

Harika bir soru ve senaryo, sadece sanırım 1-2K saat (yaklaşık 40 gün kesintisiz) muhtemelen muhtemelen alabileceğinden biraz daha fazla. Yaptım * bazı * pascal/dfm önce ve sağda ayrıştırma araçlar, aslında o kadar da zor değil, şu anda bunun için ne kullandığımı bulmaya çalışıyorum, ama Pascal için açıkça bir eklenti olabilecek "Altın Ayrıştırıcı" nın çizgileri boyunca olduğuna inanıyorum. //www.goldparser.org/engine/1/delphi/index.htm –

+0

Aslında "Gramerler", özellikle Delphi 7 için bir tane içerir. –

cevap

1

Globals'ı alan oluşturmak için değiştirmek sadece kesmek ve yapıştırmak gibi görünüyor. Onları kukla bir prosedürde taşımayı düşünebilir ve ilk olarak beyanları normalleştirmek için MMX'i kullanabilirsiniz. Daha sonra yalnızca Üye Görünümünde kesilip yapıştırılan forma prosedürler ve işlevler taşımak için ModelMaker Code Explorer'ı kullanın.

Gerekli değil, sonraki adım olarak, yöntem gövdesinden form örneğine yapılan başvuruları kaldırın. Bu bulmak ve yerini alarak elde edilebilir.

Yoksa bir şey mi özledim?

+0

Kesmek ve yapıştırmak, düzeltmek zorunda kalacağım kadar çok yardıma ihtiyacım var. 10.000 globals'ın unitnamespace.globalname'den unitnamespace.GlobalInstance.globalname'ye taşındığını hayal edin. Şimdi tüm proje boyunca bir senkronizasyon düzenleme yapın ve sadece iyi bir şekilde derlemek için kullanılan tüm referansları güncelleyin. Modelmaker MMX, küresel referanslar üzerinde global bir düzeltme yapacaktır, o zaman benim kurtarıcım. –

0

Delphi Sonar plugin (açık kaynak) kodu düzeltmek yok ama kullanılan ve 'kötü kod' aramak için yapılandırılabilir:

Delphi Sonar eklentisi Delphi veya Pascal kullanılarak yazılmıştır projelerin analiz edilmesini sağlar. Delphi 6, 7, 2006 ve XE'de yazılmış projelerle test edilmiştir. Bu eklenti, Sabre Havayolu Çözümlerinin bir bağışıdır. testleri şunlardır: Kod, deyim, dosya sayısı, sınıfları, paketler, yöntemler, erişimciler, genel API (yöntemler, sınıflar ve alanlar), yorum oranı, CPD (kod çoğaltma, kaç satır, blok ve kaç dosya içinde), Kod Karmaşıklığı (yöntem başına, sınıf, dosya; yöntemler, sınıflar ve dosyalar üzerinde karmaşıklık dağılımı), LCOM4 ve RFC, Birim test raporları, Kurallar, Kod kapsamı raporları, Kaynak kodu birim için vurgulayın testler, “Ölü” kod tanıma, Kullanılmayan dosyalar tanıma.

+2

Bu dosyanın uzunluğunu basitçe rapor edebilirim ve ".pas dosyasında 175.000 satır, 175.000 satırlık hatalı kod" yazabilirim. :-) –

İlgili konular