Büyük bir PHP projesinin yeniden yazılmasını planlamak için ipuçları?


13

Tamamen yıllardır üzerinde çalıştığım, açtığım ve kapadığım bir PHP çerçevesini (MVC Kullanarak) yeniden yazmaya karar verdim. Şimdiye kadarki sorunum, sadece fikirlerin ortaya çıkması, onları Trac'a bilet olarak atması ve çerçevenin tasarımından endişe etmeden daha sonra eklememdi. Zamanla bu bazı sorunlara neden oldu ve bir yeniden yazma yararlı olacağını düşünüyorum, ancak bunun planlamasına nereden başlayacağımdan emin değilim - Trac'i kullanmak istemediğimi biliyorum ve sadece daha fazlasına ihtiyacım olduğunu biliyorum biletleri ve kilometre taşları - ama başka neye ihtiyacım var?

Bu yeniden yazmayı ayrıntılı olarak planlamak istiyorum, istediğim her özelliği, nereye gideceğini ve diğer tüm bölümlere nasıl bağlanacağını detaylandırmak istiyorum - ancak bu planlama seviyesiyle ilgili hiçbir deneyimim yok. Herhangi bir tavsiye? Yardımcı olacak herhangi bir program var mı? Trac'tan sıkılıyorum, hiç hoşuma gitmedi.

Bir tasarım belgesine ihtiyacım olacağını biliyorum, ancak izlemem gereken belirli bir düzen var mı? Ayrıca hata takibine, bilete, kilometre taşlarına vb. İhtiyacım olacak, ancak Trac'ın ötesinde de bunun için neyin iyi olduğunu bilmiyorum. Eminim daha fazla ihtiyacım olacak ama ne olduğu hakkında hiçbir fikrim yok, bu yüzden herhangi bir yardım takdir edilecektir.


neden yeniden yazmak istiyorsun? Neden iyileştirilmesi gereken yerlerde yeniden düşünmüyorsunuz? Bir şeyi sıfırdan yeniden yazdığınızda, eski sorunları yenileri için ortadan kaldırırsınız.

@ Gordon belki o kadar aşırı yazılmıştır ki yeniden yazım yeniden düzenlemekten daha iyidir.
sağa sola

Yeniden yazmak her zaman göründüğünden daha zordur ve zor yoldan öğrendim. Oh, bu sefer ne yaptığımı biliyorum, bu yüzden yarısı kadar uzun sürecek (daha sonra orijinalinden daha uzun sürüyor çünkü daha önce yapılan hataları düzeltmeye veya ön
boşaltma

Yanıtlar:


7

Büyük bir proje geliştirirken yaptığım bazı şeyleri aşağıya bakın:

1 - OpenProj gibi bir planlama aracı kullanıyorum ve görev olarak eklemek istediğim tüm özellikleri ekliyorum. Örneğin, şu anda kullanıcılarımın siteme kaydolduktan sonra otomatik olarak oturum açmalarına izin veren bir özellik üzerinde çalışıyorum. Planımda "özellik otomatik oturum açma" gibi bir görevim var.

2 - Tek kişilik bir geliştirme dükkanıyım, bu yüzden genellikle bir özellikten diğerine geçiyorum. Planım, tüm özelliklerin sıralı olacağı şekilde oluşturulmuştur. Her özellik için ne kadar zamana ihtiyacım olacağını tahmin etmek için fazla zaman harcamıyorum. Genellikle her birinin gelişmem için bir günümü alacağını düşünürüm. Biri daha fazla alırsa, planı güncellerim ve gelecekteki tüm görevler buna göre hareket eder.

3 - Git'i yoğun kullanıyorum. Her özellik bir branştır. Her özelliği tamamladıktan sonra, onu geliştirme dalıyla birleştirir ve bir sonraki özellik için yeni bir dal oluştururum.

4 - Yazılımda bir hata bulursam, düzeltmek ve çözüldükten sonra birleştirmek için küçük bir git dalı oluştururum. Üzerinde çalıştığım hem geliştirme dalını hem de mevcut özellik dalımı güncellediğimden eminim. Bu arada, hata OpenProj planımda başka bir görev haline geliyor. "Hata-yanlış-adres" gibi bir şey. Ve eklediğimde, diğer tüm özellikler zaman çizelgesine geri taşınır.

5 - Gelişirken, yeni bir özellik hakkında düşünürsem, basitçe, zaman çizelgesine en uygun ve yeniden ayarlanacağını düşündüğüm plana dahil ederim.

Umarım bu yardımcı olur. Önünüzde heyecan verici bir projeniz var gibi görünüyor. İyi şanslar!


10

Tam bir yeniden yazma için gidiyorsanız, neden php kullanmanız gerektiğini de düşünmüyorsunuz? Teknolojinin değiştirilmesi / yükseltilmesi, tasarımınızı / ölçeklendirilebilirliğinizi / sürdürülebilirliğinizi vb. Geliştirmek istediğiniz katalizör olabilir.


3
Ayrıca, mevcut çerçevelerin Bir Başka Tek Kullanımlık Çerçeve oluşturmaktan daha uygun olabileceğini düşünün.
S.Lott

1
@ S.Lott - bu tek kullanım için diğerlerinden daha iyi hitap edecek şekilde hazırlanmışsa, tek kullanımlık bir Çerçeve oluşturmakta sorun nedir?
İsimsiz

1
@Chris Bridgett: Dünyanın bir başka son derece uzmanlaşmış çerçeveye ihtiyacı olmayabilir. "Cazip bir sıkıntı" olabilir. Eğlenceli bir zaman kaybı. Çoğu zaman, mevcut çerçeveler de işi yapar. Özel amaçlı bir çerçevedeki "terzilik" genellikle yerleşik, mevcut bir çerçeveyi anlamadaki başarısızlıktan kaynaklanır. Genellikle mevcut çerçeveler daha güvenli, daha güvenilir ve daha hızlıdır. Genellikle, mevcut çerçeveler zaten hata ayıklanır. Genellikle mevcut çerçeveler diğer ekip üyeleri tarafından daha iyi anlaşılır.
S.Lott

@ S.Lott: Bunu sahip olduğum birkaç site için yazıyorum ve tasarımı başka bir çerçeve olmayacak şekilde ayarlandı. Ben de bir süre için serbest bırakmayı planlamıyorum. re: TheLQ: Bu benim ilk düşüncelerimden biriydi, ancak başka hiçbir web dili PHP .NET dışında erişebilir. Python tercih edilir, ancak cPanel sunucularında kurulum yapmak (ne yazık ki web barındırma dünyasının çoğunu makyaj), bir acıdır.
Jon

1
@ S.Lott Gönderimden beri Symfony, CakePHP ve CodeIgniter hakkında okuyordum ve bunları kullanmamı engelleyen bir numaralı şey, hepsi körü körüne MVC'ye yapışıyor ve yeniden kullanılabilirliği görmezden geliyor. Şu anki (Ve yeniden yazmam gerekirse gelecek) tasarımım, tek bir klasörde (A 'modül' klasörü) MVC'dir, ancak oradaki kullanıcı görünümleri (Named example.module.view.php) yanı sıra bir temadır. tasarımcı, mevcut görünümleri geçersiz kılan kendi temalarını oluşturabilir. Bu benim için çok önemli ve büyük çerçevelerin hiçbiri bunu çok fazla saldırı yapmadan yapmıyor gibi görünüyor - bu beni rahatsız ediyor.
Jon

10

Bunun yerine ağır bir şekilde yeniden düzenlemeyi öneririm

Burada beklediğiniz sorun:

Bu yeniden yazmayı ayrıntılı olarak planlamak istiyorum, istediğim her özelliği, nereye gideceğini ve diğer tüm bölümlere nasıl bağlanacağını detaylandırmak istiyorum - ancak bu planlama seviyesiyle ilgili hiçbir deneyimim yok. Herhangi bir tavsiye? Yardımcı olacak herhangi bir program var mı? Trac'tan sıkılıyorum, hiç hoşuma gitmedi.

gerçekten zor bir şey. Temelde tüm çirkinliği ile Şelale modelidir . Sonuç olarak, 'büyük yeniden yazma' yaklaşımıyla ilgili sorunlar için bazı anekdotik kanıtlar var : muhtemelen problemleri doğru bir şekilde tahmin etmeyecek ve sıfırdan yeniden yazmak istediğiniz başka bir karmaşa ile sonuçlanacaksınız. Kötü olduğunuz için değil, tek seferde büyük bir şey elde etmek imkansız olduğu için değil.

Bunun yerine gözden geçirmeniz başlattığınızda, yapabilirsiniz bireysel bilet yazmak ve projeyi kullanmaya devam edebilirsiniz. Buradaki hile, genel olarak daha iyi bir tasarıma yol açan daha küçük değişiklikleri tanımlamaktır.

Örneğin: Siz söylediniz, MVC'niz yok, ama istiyorsunuz. İlk adım olarak, tek bir PHP dosyası alabilir ve her zamanki karışıklığı varsayarak, sıralayabilirsiniz, böylece üstte tüm db-erişimi, hesaplama vb. Altta "şablonlama" ( her bilet için ilk biletler). İkinci bir adım olarak, tüm bu şablonlaştırıcı parçaları, parametrelerini geçiren işlevlere kapsülleyebilirsiniz. (daha fazla bilet). Bitti? Tebrikler, MVC'de V'nizi bitirdiniz.


Bunu dikkate alacağım, teşekkürler. Ayrıca sadece işleri temizlemek için - şu anda MVC kullanıyorum.
Jon

@Jon: Evet, ayrıca, örneğim tipik bir sayfa, çerçeve yok. Ama bence, mutatis mutandis, cevabım bununla geçersiz değil. Bahsetmediğim bir nokta: yeniden düzenleme eğlencelidir. Toplam saçmalıkların güzel bir şey haline geldiğini görmek çok ödüllendirici :)
keppla

3

Mevcut bir çerçeveyi kullanmayı düşünün. CakePHP, Zend Framework, CodeIgniter ve Symfony PHP için bilinenlerdir. Yüzlerce veya binlerce kullanıcının ihtiyaçlarını karşılarlarsa, eminim ki sizinkini karşılayabilirler.

PHP dışında bir şey öğrenmek / kullanmak istiyorsanız - Django (Python) ve Rails (Ruby) geleneksel web uygulamaları için önde gelen çerçevelerdir.

Tabii ki, çerçeve oluşturma deneyimi istemiyorsanız - ki, ekleyebileceğim, piyasada çok daha az değerlidir (mevcut, desteklenen çerçeveleri nasıl kullanacağınızı bilmek yerine).


1

Kullanmayı sevdiğim şey , bir program izleyici olarak Redmine . IT, trac'den çok daha kullanıcı dostu (bence) olmakla birlikte, bu öğelerin her birini çok iyi işler.

Yeniden yazmanızla ilgili olarak, ilk olarak, gelebilecek her özelliği / yeni uzantıyı asla tahmin edemeyeceğinizi anlamanız önemlidir, bu nedenle başvurunuzu mümkün olduğunca esnek bir şekilde yazmaya çalışın. PHP'nin sahip olduğu MVC çerçevelerinin çoğunun kullanılması bu durumdan yararlanmanıza yardımcı olabilir; ancak DB mimariniz başlangıçtan itibaren esnek değilse (Cake) bu çerçevelerden bazıları sizi deliyor. Gerçekten olabildiğince soyut şeyler yapmaya odaklanacağım ve zor kodlanmış bir şey gördüğünüzde kendinize bunun ne olduğunu ve neden bir DB'de saklanamayacağını sorun.

Gerçekten DB tasarımı pek çok soru ve soruyu yanıtlamaya yardımcı olur ve uygulamanızın nasıl etkileşime girdiğinin ana önemini gördüğüm yerdir; bu nedenle, verilerin nasıl saklandığını ve DB'nizin nasıl yapılandırıldığını analiz etmek için zamanın büyük çoğunluğunu harcamanızı tavsiye ederim.


1

Bir sorun izleme yazılımı olarak, JIRA harika, ama çok pahalı. Kullandığım bir başka iyi araç da Eventum. Bedava.

Ancak en önemli kısım, neye ihtiyacınız olduğu hakkında iyi bir fikre sahip olmaktır. Öncelikle, uygulamanızın gereksinimlerini toplamanız, ne istediğinizi ve mümkün olduğunca eksiksiz bir his almanız gerekir.

Buna dayanarak, yazılım gereksinimleri oluşturacaksınız, bu, uygulamanızın bir parçası olacak modülleri, işlevlerini ve alt işlevlerini, nesneleri, sınıfları, arayüzlerini, hemen hemen her şeyi tanımlayacağınız daha teknik bir yaklaşımdır.

Bilerek, uygulamanın karmaşıklığını ve gerekli kod satırlarını iyi anlayacaksınız, böylece bir tahmin yapabilir ve bir program oluşturabilirsiniz. Bir programa ve son teslim tarihine sahip olmanız önemlidir, aksi takdirde asla bitiremezsiniz.

Umarım yardımcı olur


Jira 10 kullanıcıdan daha azı için çok ucuz. Maliyet 10 $ ve 10 $ sadaka gider.
sixtyfootersdude
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.