Nasıl eski PHP kodu refactor mı?

7 Cevap php

Geçenlerde bir web-tabanlı oyun PHP ile yazılmış bir motoru kullanan bir projede yer aldık. Oyun çalışıyor ama daha sağlam ve biraz daha fazla özelliklere sahip olabilir - ve kod eski ve oldukça çirkin hem de.

Bu kod ile sorunu (ve sanıyorum genel olarak çok PHP kodu) o ve çok güzel yapılandırılmış değil, kod neredeyse özdeş kesilmiş / yapıştırılan parçalar bir sürü sahip olduğu için gelişmiştir olduğunu ve ağır kullanımı yapar fonksiyonlar yer bile globalsin. Değil elbette her yerde, tek bir birim test, ve kod sabit belirli bir DB kullanmak için kodlanmış ve kod çağıran web sayfasından $ _REQUEST dizeleri dayanır edilir.

Yapılacak doğru şey, alt fonksiyonları gibi kod parçalarını çekip onları düzenli ve emin çalışmaya devam etmesi için bazı birimi sınamaları eklemek, yol boyunca birkaç sahte nesneler ekleyerek olacaktır. Örneğin, yardımcı olabilecek bir IDE veya alet yoktur - Ancak, tamamen elle yapıyor sıkıcı ve hata eğilimli ve ben bunu nasıl acaba? Ben otomatik olarak $ this-> referanslar, vb eklemek, değer veya referans, kod tanımlanmış bir parça bir işlev üretmek değişkenleri parametreleri olmalıdır hangi önermek yardımcı olabilecek bir araç istiyorum

Bunu sormak için çok fazla, ya da iyi bir çözüm var mı?

Teşekkürler!

7 Cevap

Allan, ben güçlü bir üstlenmeden bir araç görmedim. Java için bile Eclipse refactorisation tam bu özelliği değildir. Ancak, üstlenmeden bazı ortak ipuçları vardır. Genellikle, iki aşamada uygulama refactor.

1. Get things separated. Ben db ve model ile ilgili şeyler çıkarmak ve uzak ana kod onları ayıklamak. Bazı nesne temsili yardımcı olacaktır. Active Record ya da ORM iş için DAO desen edin. HTML kodu uzakta ana kod alınan ve dosyaları şablon taşınmış olabilir. Görünüm mantığı işleme için güçlü desteği ile güzel bir şablon motoru Çıkış - Smarty.

2. Put things into MVC framework. MVC derece iyi web uygulamaları uygun sağlam bir mimaridir. Denetleyicisi yöntemleri içine gevşek PHP dosyalarını bağlamak için PHP çerçeveler birini kullanın. Altyapıları kolay yönetmek URL'leri, HTTP isteklerini, geçen parametreleri, yönetmek giriş bilgileri ve genellikle bazı erişim kontrol mekanizmalarını sağlamak olun.

Ama en önemli olan: tamir ötesinde şeyler bozmazlar. Bu üstlenmeden var, yeniden yapıma değil ;-)

Bu yazı gerçekten üstlenmeden / redeveloping eski çirkin kod tehlikeleri vurgulamaktadır:

http://www.1729.com/blog/EconomicsOfTestingUglyCode.html

Benim yaklaşım ", daha sonra" yeni kodu etkilemeden ele alınabilir bir arayüz arkasında eski fazla kod gizleme ile başlayan bir zamanda, küçük bir sorunu çözmek için genellikle. Ben yazmak bu şekilde bir şey, iyi tasarlanmış ve sağlam bir yapıya sahip olabilir, ama ben kötü kod testi hafta / ay / yıl değerinde sonra refactor çalışırken çok fazla zaman harcamak zorunda ve değilsiniz.

Hiçbir aracı fugly kodunu almak ve bir şekilde tekrar güzel yapacak. Ibaresi "back-to-formül" olgun bir proje için oldukça korkutucu bir umudu, ama benimle çıplak ...

Ben öneririm iyi bir MVC çerçeve sen port bitti ki. Bunu yaparken, bir yapısal yeniden yazmak böylece tüm sınıflar (nadiren kod gelişen ile doğal bir şey olur) optimize edilmiş yapmak için kötü bir zaman olmayabilir. Uzun bir zaman alacak ve işler beklendiği gibi çalışmıyor zaman acı olacaktır.

Bu büyük bir adım ama bu kod çürümeye bırakılmıştır ne olur.

Sizin diğer seçenekler:

  1. Tüm yeni kod, bir dizi rejimi ve eski kodu aşağıdaki kısmi yeniden yapılandırılması, yavaş yavaş Redeveloped edilir etmeyin.
  2. Sadece hataları düzeltmek ve yeniden yapılanma hiç yok.

Acını hissediyorum. Ancak, en azından PHP için, böyle bir araç duymadım.

Ben dil hatta yarı-otomatik üstlenmeden her türlü izin için yeterli yapılandırılmıştır sanmıyorum. Neyse ben bu yapabileceğini herhangi bir uygulama bilmiyorum, ama parlak tarafta - elle tüm yapmanın kaynağı ile yakından aşina yapacak, senden daha iyi bir sürü yolunuzu biliyorum, daha sonra size yardımcı olabilir Otomatik araçlar ile olur.

Ben bu çok şeyi googling ve Accurev bir müşteri tarafından ilginç bir blog bulundu.

http://blog.accurev.com/2008/09/17/dr-strangecode-or-how-i-learned-to-stop-worrying-and-love-old-code/

Araç kutusunda doğru sürüm kontrolü aracı olması zarar veremezler.

Benim durumumda tam bir yeniden çok daha ekonomik bu durumda olduğunu.