Biliyorsunuz zaman bir uygulamayı yeniden yazmak zamanı

21 Cevap php

Bu mütevazice, ama muhtemelen bir şey çoğu ile ilgili olabilir. Ben şu anda 2 yıl önce bir müşteri için yazdığı bir PHP uygulaması için işlevsellik ekleme. Tam açıklama ilgi olarak, bu aslında bir spec belirlemek ve yazmak için müşterileri ile bir araya geldi anlamda, şimdiye kadar sıfırdan inşa ilk "gerçek" uygulaması oldu. Sonra ben (ben biraz önce ilkel PHP deneyimi vardı) gitti SQL öğrenmeye, kendime göre bir uygulama geliştirdik.

Istemci, varolan işlevselliği değişiklik yapmanın yanı sıra uygulamaya yeni modül eklemek için bu hafta beni aradı. Ben eklemeler kolaylaştırmak için baştan uygulamayı modularizing kötü bir iş yaptığını şimdi biliyoruz. Şu anda, kod tabanı kod neredeyse 20,000 hatları (dar uygulama eğer, oldukça sofistike) 'dir.

Ben gelecek değişiklikler daha kolay ve daha verimli hale getirmek için uygulamayı "yeniden" için olsun veya olmasın ile mücadele ediyorum. Ben müşteri ile anlaşma niteliği ben gelecekte değişiklik yapma tek kişi olacak hangi bir olduğuna işaret olmalıdır. Onlar bu uygulama için başka bir geliştirici talep etmeyecektir.

Bana tomurcuklanma programcı her zaman kendi OKB karşılamak amacıyla temiz ve en verimli şekilde bir şeyler yapmak istiyor, ama ben yeniden harcamak her zaman için müşteri faturası düşünüyorsunuz. Onları ücret başlangıç ​​hızı düşük olduğundan Ahlaki, ben bu ince hissediyorum - onlar 2 yıl boyunca benden hiçbir müdahalesi olmadan gerçekleştirmektedir istikrarlı bir çalışma uygulaması var, ve benim özgeçmiş benim ilk gerçek kalkınma projesi var. Benim ikilem gelecekteki gelişme uğruna bir uygulamayı yeniden yazmaya karar hakkında zaman.

Düşüncelerinizi ile tartın lütfen. Ben şimdiye kadar bu sorunu olmuştur tek ben değilim eminim.

21 Cevap

Rewrite gizli bir 3 seçenek var / kararını yeniden yoktur: sürekli bir anda bunu biraz yeniden. Bu üstlenmeden dahi, sen bütün darbe monolitik bir karar vermek zorunda değilsiniz tuz buz ve sıfırdan başlamak için çalışır, sen parça parça şeyler yaklaşım ve sürekli bir hedef olarak daha iyi bir tasarım doğru çalışabilir. Yerine oturma odası boya, yere kadar evi yeniden inşa etmeyin, o zaman mutfak bozulmasina, ardından den yeniden düzenlerler, sonra peyzaj sonra, bahçesinde pencereyi kokan, sonra vb, çatıyı tamir Sonunda bir sona Eğer muhtemelen şimdiye kadar fizibil bir büyük öbek olabilir daha zamanla daha değiştirmek için izin Grandfather's Axe durum.

Sen ile küçük iyileştirmeler yapmak, birçok farklı düzeylerde bu yapabileceğiniz en her kod parçalarını daha okunabilir ve daha sürdürülebilir hale getirmek için (değişken / yöntemi, vs, yeniden adlandırmak, özü yöntemi kullanılarak) kontrol ediyorum. Ya da hala noktasından B noktasına A aşamalı çalışan ama B noktası ulaşan firma hedefi (geliştirilmiş tasarım) sahip olan, özel bütçeler kullanarak büyük iyileştirmeler yapıyoruz. Hala kırılma değişiklikleri yapabilirsiniz ama bunları yapma konusunda akıllı olması gerekir. Aksine sadece o daha sonra silmek sonra eski bit gibi eski ve bayrak can, yerine eski bitleri tutmak ve buna ek olarak yeni şeyler eklemek şeyler yapıyor bazıları tamamen yeni bir şekilde (yani API) ile işlevselliği bazı bit yerine daha Onları, sonra insanlar şeyler yapmanın yeni yolu zarif bir geçiş yapmak için yeterli zaman verilmiş.

When do you know it’s time to rewrite an application

Müşteri bunun için ödeme ne zaman.

Bu benim için oldukça görecelidir. Benim ilk uygulama serbest da oldu, ve 60,000 satır klasik ASP canavar oldu.

Ben hala çağrıları sık sık onu korumak için olsun, ve ben onu yeniden eğlendi ettik ederken, gerçeği (kez değişmiş olsa da) bunun çalışır ve değiştirirken müvekkilimin güven bana birkaç tüyleri çekin olan değer olduğunu o.

Tüm uygulamaların% 99 bok vardır, bu sadece onlara baktığımda ne kadar deneyimli bağlıdır :)

Bunu düzeltmek için harcanan zaman / maliyet uygulamayı yeniden yazmak için zaman ya da maliyeti daha büyük olduğunda bir uygulamayı yeniden yazmak zamanı. Sadece uygulamanın bazı yönlerini yeniden bakmak değer olabilir.

Ben size bunu istikrarlı ve iyi çalışıyor demek gibi uygulama yeniden yazmak gerekiyor gibi görünmüyor söyleyebilirim. Ama sonuçta karar size gerekli olan veya uygulamada değişiklikler veya eklemeler yapmak için gerekli olacak sizce ne sıklıkta olduğunu. Bu yıl her çift bir kez app ekleyerek olacak ise, bir yeniden yazma uygulamasına değişiklikleri yazmak için ilgili zamana karşı tekrar ne kadar süreceğini bağlı olarak zaman değer görünmüyor.

Ben yeniden yazmak için arzu her zaman bir akıllı biri değil güçlü biridir, ancak anlayabiliyorum.

Ben o senin kod değildir, özellikle eğer ... şey yeniden yazmak için karar vermek çok kolay (ve 2 yıl önce kod aslında başkasının kodu) olduğunu öğrendim.

Sorun yeniden birlikte halletmek zaman, ben işler gibi kolayca onlar olacak hayal gibi değil oldukça sorunsuz sonunda olabilir bulduk, olduğunu.

Bu daha eklemeler için sistemini artıracak, yeni modül eklemek için gerekli alanları düzeltmek, ancak tüm app yeniden yazmak için zaman kaybetmeyin için daha iyi olabilir. Bu sizin için çalışan kim için para tasarrufu ve başladığınız yere geri biten sizi kurtarır.

Ben (bir bütün uygulama olarak aynı, ama hala) bir uygulama için belirli bir denetimi yeniden yazmak için bir kez yol aldı çünkü bu düşüncesindeyim ... mevcut uygulama ben daha iyi encapsulation gibi, üzerine getirebileceği hissettim çok şey vardı , daha KURU, ve daha iyi performans. Ben hedefe ulaşmada sona erdi, ancak performans sorunları hala oradaydı ve ben modülerleştirme bazı geliştirilmiş olsa da, yine de ben hayal ettiğinden daha fazla dağınık bir sürü sona erdi.

Ben yeniden uygulanması ciddiye almalı şeydir zor yoldan öğrendim ve sadece gerçekten böyle bir eylemi gerektirecek tasarım kusurları olduğunda kullanmak (ve dürüst olmak gerekirse, ben can tasarım kusurları ne tür bilmiyorum hissediyorum Tüm kod temeli üzerinde GOTO bulma kısa Bu,) gerektirir. Eğer gerçekten sizin (veya her kim) o yazdı düşünüyordum olmuştu ne olduğunu anlamak için derin koduna dalmıştır varsa yeniden uygulamak için karar vermek kolay hızlı bir karardır.

Özellikle için yazdım kazanımlar bir yazımının çıkmak ne düşünüyorum ... ve onlar ne olup bittiğini tam olarak farkında olduğundan emin olun, ve ona katılıyorum.

Ben Ryan katılıyorum. Yeniden yazmak için nedenleri yeterince güçlü ve müşteri için değer sağlamak, onlar ödemek gerekir. Gerçekten, tüm dolar ve sent aşağı gelir. Bir yeniden yazma ile onlara tasarruf edilir? Bu 2 yıl içinde bir çağrı olmadı eğer durum haklı zor geliyor. Heck, oldukça ilk uygulaması üzerinde bir başarı, ya da bu konuda herhangi bir app.

Eğer büyük özellikler ekleyerek ya da bir şey karmaşık üstlenmeden sürece nadiren olur - yeniden yazma zamanı daha az veya değişiklik yapmak için zaman yakın olurdu ben kullandığım bir ölçüsüdür. App değişimin sürekli bir devlet olacak ve yeniden yazma bu değişikliklerin ağrı kolaylığı istiyorsanız, o zaman bu durumda mantıklı gibi de olabilir.

Ben en iyi geliştiriciler biraz OKB olduğunu düşünüyorum, ama biz de pragmatik olmak zorunda.

Eğer gitmek gibi refactor. Netscape öğrenin, yeniden yok.

Onw seferde singlehandedly 20kloc uygulaması yeniden çalışılıyor profesyonel sucide olduğunu. Eğer yeni özellikler eklemek gibi ilk çalışmak en ağrılı bulmak şeyler değiştirmek, refactor.

Ben burada biraz geride kaldım farkındayım ama ben bu web güzelliği sanırım - Eğer yazının tarihini kontrol etmek için rahatsız kadar her şey mevcut! ;-)

Yazınızı benim bir akor vurdu çünkü neyse, benim düşüncelerimi göndermek (ve muhtemelen tekrar konu tekme başlatmak) istiyordu. Neredeyse tam sizinki gibi, biraz daha küçük olsa bunun bir uygulama var: PHP + SQL, ~ 5KLoC, ilk "gerçek" app, ben genç ve masumdu vs, vs, yazdı, ve sonra ilk web uygulaması yazdı I Bunun üzerine kapalı teslim, ben (hey, ben çalışma var istiyorum!) gurur bir şey vardı, ve benim arka cebinde nakit nispeten şişman tomar.

Birkaç ay sonra, ben hata raporları bir çift var. Ben geri projeye gitti ve iç içe PHP ve SQL korkunç bir karmaşa bulundu. Sitenin yönetici kısmı biryere çoğaltılması, bir ~ 2.5KLoC dosyası oldu. Veritabanı, muhtemelen en iyi tasarlanmış bit olduğunu ve sadece kısmen normalize edildi. Bu korkunç gerçekten oldu, ve çok hızlı bir şekilde bunu korumak için bir kabus olacağını fark etti. Ben böcek kadar sabit ve üzerinde taşındı.

Bir çift daha hata Ben bu kadar sabit ve batma hissi daha da kötüleşti geldi. Son kez bazı hatalar kod etkili unmaintainable olduğunu, (ben hâlâ genç ve masum olduğunu ve Netscape hikaye duymamıştı) onu yeniden yazma sözü geldi. Neyse ki, ben kalan büyük kusurları dışında ütülenmiş ediyorum görünüyor; (Ben müşteri ile temas hala yaşıyorum!) Beri herhangi bir hata olmadı. Ben belirli bir uygulamanın yeniden yazmaya başlamak yapmadım.

Ve dürüst olmak gerekirse, ben memnunum. Ben çalışmak çoğu diğer projeler gibi, bu bir hobi / yedek zamanlı proje oldu. Ben kıçımı altında bir ateş biraz daha koymak ki, bunun için ödenen var. Ben daha çok, iki kez tekrar başlangıç ​​denedim öğrendim şekilde özgün proje, içerik yönetim sistemi bir tür oldu. (Üniversite orkestra için) ikinci sürümü hala kullanılan ve orijinal birinin üzerine büyük bir gelişme oldu edilir. Ben birden fazla dosya, işlevleri, (bir çeşit) şablonları ... İyi zamanlar :-) kullanılan Ama yine de biraz çöp oldu. Nesneye yönelim ve tüm ilişkili iyilik, Smarty şablon sistemini ... Hatta daha iyi kez kullanılan üçüncü versiyonu:-D Bu bir bitirdim asla. Sistemin gereksinimleri karmaşıklığı beni mahçup başladı, ve ben sonunda sadece üzerine çalışmayı durdurdu. Ben hızlı bir şekilde orada ne istediğini yapacağını çevresindeki diğer içerik yönetim sistemleri bir dizi, bir yol veya başka vardı, ve ben iki yıl önce bu adımı atmaktan beri uzak Drupal döndü değil bulundu!

Ne zaman bir uygulamayı yeniden yazmak için zaman nedir? Neredeyse hiç; Ben yeniden faktoring ileri neredeyse her zaman bir yol olduğunu kabul ediyorsunuz. Hatta benim canavar orijinal sürüm nispeten kolay ve acısız yeniden çarpanlarına olabilirdi. Eğer daha önce kökten farklı bir şey yapmak isteyen konum Sadece eğer gerçekten bunu düşünmelisiniz.

Şu anda (ilginçtir ki aynı zamanda PHP dahil) benzer bir durumda değilim. Benim yaklaşım ben bir "biz gitmek gibi" temelinde (testleri gibi) bu süre içinde hakkında öğrendiğim en iyi uygulamaları (yani ben kod dokunmak sadece her yeni özellik için bir tane ekleyin ve eski özellikleri eklemek) eklemektir . Bu şu anda oldukça hafif bir çözüm gibi görünüyor.

Ben, çok sık ben her şeyi yeniden yazmak için cazip ... Jonathan Hollanda katılıyorum ve ben sık sık temizliğine bu içgüdü vermek ama benim için kodlama beri bir sorun değildir - an - sadece bir hobi. Müvekkilim duyuyorum ve onun kod gibi değilse müşteri memnun değil - bu bir şey bu ya da önümüzdeki hafta / ay teslim edilir wether Müvekkilim umursamıyor nedenidir. Ben bu şeyleri deneyime sahip beri konumda Öte yandan ben değil benim bütün programı yeniden olmaz. Eğer gerçekten farklı ne yapardınız? Sık sık (gerçekten) farklı kod desenleri için yeni bir nesne ilişkisi modeli ile gelmek gerekir. Ben şiddetle tavsiye ederim

  1. Bu sorun hakkında müşteri konuşmak
  2. kodunuzu refactor

Kodunuzu üstlenmeden tam bir yeniden çok daha hızlı ve ben seni o kadar farklı o Codewise hakkında gitmek olmaz tahmin beri bu gitmek için yoludur gerekir.

Özgeçmiş: Refactor - recodesrc değil.

Yapmanız gerekir eğer kendinize zaman

Cevaplarda genel fikir benimle aynı fikirde gibi görünüyor; Uygulamayı yeniden etmeyin.

Yıllar önce benzer bir uygulama miras. Bu yeni işlevler eklemek için, PHP, büyük, çok eski ve zor. Yaklaşık 18 ay önce yeni bir sürümü ve benim sorunları o çözüldü sürü "çerçevesinde" en dışarı geçiş başardı. Sadece sayfa şablonuna ve oldukça kolay biraz daha iyi şeyler için eski kötü kod takas yapmak için kütüphane çağrıları bir avuç çağrı verdiği yaklaşık bir yıl sürdü.

Uygulaması çoğunlukla sadece çok özel raporlar ve formlar ve bazı gerçekten eski sayfaları vardır. Giriş sayfası yaklaşık 100 sayfa kimliği vardır sırasında sizi ve fikir vermek için, eski raporlardan biri 3 bir sayfa kimliği vardır.

Bugüne kadar ben muhtemelen 25k satırları ekledik ama ben orijinal 6000 ya da öylesine hatlarının% 80 (veya daha az) hala orada olduğunu bahse girerim

Bunun üzerinde çalışıyoruz, her gün bir veya iki saat harcamak, çünkü yavaş yavaş gelişen programı ile alabilirsiniz. Akla gelen diğer bir yaklaşım, mevcut kodun yanında oturmak ve aynı veri üzerinde çalışan yeni, fantezi, modülleri yapmak olacaktır. Yapmanız gereken tek şey bazı oturum ve izin veri içine kravat ama aksi halde bu sayfaları ayrıdır. O zaman gelecekteki güncellemeler çalışmak için daha iyi bir çerçeve ise tüm muhtemelen sonunda bir göç giden app yeni "tarafı" yapılacaktır.

Ama sonunda size eski sayfalarında en çok korumak gerekir, yeni bir çerçeveye göç bile .. ideal sadece dosyalarını değiştirmek ve istiyorum hemen hemen değişmeden kalan bırakarak fonksiyonları bir dosyanın alt ve üst kısmında yüklendi.

İyi şanslar.

Bir seferde bir parça yeniden bana iyi bir şey gibi görünüyor. Bir işlev veya sınıf (statik veya örneği) konsolide edilebilir özelliğe bulmak ve gitmek gibi kod basitleştirilmesi, parça parça şeyler hareket etmeye çalışın.

Yeniden yazmak için zaman size aynı şeyi değiştirmek zorunda olduğunu fark ettiğinizde kod birkaç yerde olmasıdır. Eğer işlevselliği yeni bir parça ekliyoruz ve birden fazla yerde ekleyerek sonuna kadar zaman olmasıdır.

Ben kod bazı 600.000 satırları içeren bir miras kod tabanı üzerinde çalışıyoruz ve ben belki bu kodu% 90 (ciddi!) yineleniyor olduğundan şüpheleniyorsanız. Yeni bir şey eklemek için, ben (60 farklı yerlerde eklemek zorunda ciddi!). Bu durumda, yeniden düzenleme sıfırdan başlayarak daha bu% 90 çıkarmak için uzun alacağını gibi bir seçenek değildir.

Ben de senin iyi çalışıyor kod parçasını yeniden gerçek bir güçlü bir teknik nedeni olmalıdır görüşünde değilim. Eğer yeniden zaman size önceki sürümde gibi ve yeni sürümünde diğer ayrıntıları göz ardı etmedi ne odaklanma eğilimindedir. Yani sonuç genellikle iyi olsa bile, genellikle da mükemmel değildir ve daha sık değil o zaman değer değil gerçekten.

Ayrıca, her zaman "gelecek gelişmeler kolaylaştıran" açısından düşünmek için cazip, ama profesyonel bir ilişki bu tür, gerçekten gelecek gibi görünüyor asla bilemezsiniz.

Yani sizin durumunuzda, yapmanız gereken biliyorum işin yolunda gerçekten parçalar üstlenmeden muhtemelen daha güvenli bir yaklaşımdır.

Eğer bazı ciddi temizlik zamanı bir işaret olarak alıp, uzanan korumak veya uygulamada hata tespit karşı direnç hissediyorsun. Bu mutlaka herşeyi sıfırdan yeniden gerekir anlamına gelmez. Çoğu zaman bazı üstlenmeden uzun bir yol gidecek.

Ben önümde benzer bir durum var: Bu dükkan etrafında yazmak ya Ruby on Rails veya {[gibi bir şey kullanmak en araçların sürücüler özel inşa kod üretimi / ORM aracı kullanmak için bir zor kullanmaya devam (1)]} (temelde PHP Raylar). Biz bize ve önceki geliştiriciler için mevcut çerçeve çalışma korkunç bir geçici çözüm yapmış yapmaya çalışırken çok fazla zaman harcamak. Ben yeni geliştirici yaşıyorum ve bir yeniden yazmak için bastırıyorlar duyuyorum. Modülerlik burada anahtarıdır. Geçerli kod tabanı artık yeterli modüler ve bir kare peg alarak ve yuvarlak bir delik içine sığacak yapmak gibi. Bunun yerine yuvarlak birini kullanarak kare peg kapalı lanet tarafı tıraş tutmak. ;)

İyi şanslar ve bize karar verdim ve ne sizin için nasıl çalıştığını bildireceğiz.

beaudetious

Yerde tekrar yazılmasını ve üstlenmeden arasında bir seçenek olabilir. Veri modeli kurtarılabilir ise, yeni işlevselliği yapmak gibi Ruby on Rails gibi bir çerçeve içinde bir web uygulaması üzerinde greft ve sadece yavaş yavaş bakımı zor PHP bileşenleri yerine, yeni site ve eski site arasındaki bağlantıları koymak veya arızalı. Bir web uygulaması olduğu için, geri ve ileri kimlik doğrulama bilgilerini geçirerek yönetmek daha başka pek çok baş ağrısı olmadan yeni bir çerçeve entegre gerekir.

Başka bir dil / platform yazılı bir seçenek değilse, o zaman yeniden düzenleme gitmek için yol olacak. Bizim bilgisayar bilimcisi acı, her şey-in-kendi-yerine kafasında geri dönmek ve sadece bunu biz şimdi bildiklerimi bilseydim eğer olurdu şekilde yapmak, ancak tüm app kırma riske ve daha fazla ağrı oluşturarak daha iyi değil istemci (ve daha geç gece senin için diyor) için.

Ben "ev" örneği ilk posterleri ile, burada sorunu olduğunu düşünüyorum evin temeli ve çerçevesi tamamen bahçesinde çalışan ve tüm diğer şeyler, sadece temel sorunu maskeleme, oturma odası boyama, berbat eğer çerçeve ve temel hala kötü.

Ben yazılım temeli gerçek bir iyi bir göz atın ve bu değerlendirme dışı karar tabanı ediyorum.

Yeni ya da "tamir" çerçevesi içine uyacak yeni, daha verimli, temiz kod için "modeller" olarak eski kodu kullanın.