40 yıldan daha uzun ömürlü web uygulaması tasarlama önerileri


73

senaryo

Şu anda, temel gereksinimi, sağlık hizmeti sağlayıcıları tarafından kullanıcı tarafından oluşturulan formları kullanarak bilinmeyen özelliklerle veri toplamak olan bir sağlık projesi dışındayım. İkinci gereklilik, veri bütünlüğünün kilit olması ve uygulamanın 40+ yıl boyunca kullanılması. Şu anda müşterinin geçmiş 40 yıldaki verilerini çeşitli kaynaklardan (Paper, Excel, Access, vb.) Veritabanına taşıyoruz. Gelecek gereksinimler:

  • Formların iş akışı yönetimi
  • Formların zamanlama yönetimi
  • Güvenlik / Rol bazlı yönetim
  • Raporlama motoru
  • Mobil / Tablet desteği

Durum

Sadece 6 ay içinde mevcut (sözleşmeli) mimar / kıdemli programcı “hızlı” yaklaşımı benimsemiş ve fakir bir sistem tasarlamıştır. Veritabanı normalleştirilmez, kod birleştirilir, katmanların özel bir amacı yoktur ve veritabanında "silmeleri" gerçekleştirmek üzere bazı fasulye tasarladığı için veriler kaybolmaya başlar. Kod tabanı son derece şişirilmiş ve veritabanı normalleştirilmediğinden yalnızca verileri senkronize etmek için işler var. Onun yaklaşımı, eksik verileri geri yüklemek için yedekleme işlerine dayanmak olmuştur ve yeniden faktörlendirmeye inanmak gibi görünmemektedir.

Bulguları Başbakanlığa sunduğumda, sözleşmesi sona erdiğinde mimar kaldırılacak. Bana bu uygulamayı yeniden inşa etme görevi verildi. Ekibim benden ve bir junior programcıdan oluşuyor. Başka kaynağımız yok. Bu sistemi yeniden inşa etmeye odaklanabileceğimiz 6 aylık bir donma gereksinimi tespit edildi.

Drupal gibi bir CMS sistemi kullanmayı önerdim, ancak müşterinin organizasyonundaki politika nedeniyle sistemin sıfırdan inşa edilmesi gerekiyor.

İlk defa 40 + ömre sahip bir sistem tasarlayacağım. Sadece 3-5 yıl ömrü olan projelerde çalıştım, bu yüzden bu durum çok yeni, ama heyecan verici.

Sorular

  • Hangi tasarım konuları sistemi daha "geleceğe hazırlayacak" hale getirecek?
  • Sistemi daha “gelecekteki kanıtı” yapmak için müşteriye / PM'e hangi sorular sorulmalıdır?

59
Gelecekteki prova bir şeydir, ancak bir müşterinin mevcut mobil / tablet bilgisayar tarihçesinden 10x-20x daha uzun, dilin o anki tarihçesinden 5x-8x daha uzun bir ömre sahip olması beklenen bir yazılım isteyeceğini düşünüyorum. kullanımda ... verilen bir bilgisayar modelinin kararlılığı konusunda makul bir şekilde iyimser.

31
40+ yıl 'geleceğin kanıtı' olarak tasarlarken boşuna bir egzersiz gibi geliyor.
whatsisname,

10
Bir veritabanının önümüzdeki 40 yıl boyunca faydalı olma ihtiyacını yerine getirmek için hepsini kağıt üzerine koyardım. Kâğıt kendini kanıtlamış, dijital depoda ise çoğu zaman çok fazla veriyi nasıl kaybedeceğini kanıtlamıştır. (Tabii ki yok edilmesi gereken tüm verileri koruyacak)
Pieter B

34
Bu sistemi kurmak için 6 aydır iki müteahhit geliştiricisi mi veriyorlar? Yıllarca süren miras verilerini toplamak ve gelecek yıllarda yeni gereksinimler beklemek? Zaten projeden uzaklaşmıyorsanız, koşmaya başlayın. Bu, iki kişinin belirtilen zaman dilimi yakınında herhangi bir şeyle başa çıkabileceğinden çok daha büyük. Müşteri tamamen makul olmayan beklentilere sahiptir ve projeye uygun kaynaklar sağlama konusunda isteksizdir.
Sean McSomething

12
2 kişinin 40 yıldan fazla sürmesi gereken bir uygulama yapıp uygulaması 6 ay mı sürdü? Ne kadar iyi olduğunuzun önemi yok, başarısızlık için bir kurulum gibi geliyor. Kuruluşunuzu bunun ne kadar makul olmadığı konusunda ikna edemezseniz, en kısa zamanda başka bir iş aramaya başlamanızı öneririm.
dsw88

Yanıtlar:


132

Veri kraldır

Bence, 2053'te 2013 yılına ait bir web uygulamasının hala çalışır durumda ve çalışır durumda olmasını beklemenin biraz mantıksız olduğunu düşünüyorum. Teknolojiler değişecek. Platformlar gelip gidecek. HTML, o zamana kadar ilginç bir hafıza olabilir. Ancak verileriniz hala buralarda olacak.

Yani veri sizin temel odak noktanızdır. Verileriniz hala orada olduğu sürece, insanlar ne tür yeni teknolojiler ortaya çıkarsa adapte olacaklar. Veri şemalarınızın iyi düşünülmüş ve genişletme için uygun olduğundan emin olun. Onları açıklamak için zaman ayırın.

Gerçek uygulamalarla ilgili olarak, şirketiniz muhtemelen 'sıfırdan inşa' direktifine sahip olmak konusunda doğrudur. Birkaç 10 yaşından büyük web uygulamalarına sahibim ve 2003'te geçerli CMS sistemlerine kilitli olmadıkları için çok mutluyum. Evde yetiştirilen, çok basit çerçeveler kullanıyorlar. Bunun gibi bir şey için, proje ihtiyaçları için özel olarak oluşturduğunuz çok temel bir çerçeve ile daha iyi durumda olduğunuzu düşünüyorum.

Ancak gerçek şu ki, 40 yılı aşkın bir süredir, şirket (umarım) gelişen platformlara uyum sağlamak için epeyce ön uç ve arka uç hizmetler yapacak. Böylece, bireysel kullanıcı uygulamaları için 5-10 yıl ömür boyu hedef alacağım.


13
"Bu kodu 40 yıl içinde kullanmayacağız!" başlamak için bir Y2K hatası olmasının nedeni budur. Kodunuzun değiştirilmesini beklemek sadece kötü bir uygulamadır.
DougM

71
Y2K 'bug' veri problemiydi - 4 yerine 2 rakam saklandı. Bu yüzden verilere odaklanmayı öneriyorum.
GrandmasterB,

24
İyi bir nokta. Birisi eğer, akılda tutulması bu gerçekten (ve büyük olasılıkla yanı veritabanı) kendi veri 40+ yıl sonra kullanımda olmasını bekler, mümkün olduğunca az satıcıya özgü özellikleri ile veritabanı tasarımı için iyi olabilir. Özel Oracle / MS-SQL / hangi fonksiyonelliğe dayanan tüm kodunuzu çözmek / yeniden yazmak zorunda olanlar, bundan 20 yıl sonra sizinle mutlu olmayacaklardır. ;)
Sinir

4
Bu sağlam bir tavsiye. Hala 20-30 yıl önce orjinal olarak yazılmış olan birçok Cobol programı var. Teknoloji devam etse de, eğer verileriniz ve nesne modeliniz sağlamsa ve veriler ilginizi çekerse, kodunuz bir şekilde veya başka bir şekilde kullanımda kalacaktır.
Bobble

7
Birisi Y2K'yı getirdiğinden beri: UNIX Y2K'ya dikkat edin ( en.wikipedia.org/wiki/Year_2038_problem ).
MrFox

40

20 yılı aşkın bir süredir müşterilere ödeme yaparak kullanımda olan yazılımları üretiyoruz. Kod temeli birkaç kuşak kaynak kontrol aracını geçmiştir. Yazılımımız, tablet olayı dışındaki tüm kurşun noktalarınıza isabet ediyor.

Kaygıları bazıları şunlardır ESIGN ve UETA . Avukatlarımız, elektronik kayıtları en az 10 yıl boyunca okunabilir tutmamız gerektiğine inanmaktadır. Bütün tutulan belgeler için PDF / A'ya bakmalısınız .

Veritabanınız için normalleştirme konusunda çok fazla endişelenmeyin. Bunun yerine, her şeyi günlüğe kaydetmekten ve verilerdeki değişiklikleri / silinmeleri izleyen denetim tablolarına sahip olmaktan endişe etmelisiniz. Sürümleri yükseltirken, verilerinizin taşınmasını sağlamak için yeni sürümleri yeterli süre boyunca paralel olarak test etmeyi planlayın. Bu yeni sürümlerin test edilmesi de yeni işletim sistemlerini içeriyor - yıllar boyunca hoş olmayan sürprizler yaşadık. Geri alma işleminin yapılması durumunda kurulum medyasını ve lisans anahtarlarını koruyun. Yedekleri test et. Veritabanında depolanacak nesneleri serileştirecekseniz, geliştirme çerçeveniz tarafından sağlanan serileştirme yerine XML olarak yapın.

Sizin personeliniz için uzun vadeli kod tabanlarının uzun süreli hafızaya ihtiyacı vardır. İdeal olarak, uzun zamandır etrafta olan insanları istersiniz. Bu kurumsal olarak imkansızsa, her şeyi bir wiki gibi bir şeyle belgelendirmeniz gerekir. Benim tavsiyem, hata izleme sisteminize bağlanabilecek bir wiki.

Kod tabanınız için kodunuzda yorumlarınız olduğundan emin olun. Bir sürüm kontrol sisteminden diğerine geçiş, giriş yorumlarınızı neredeyse her zaman kaybeder. Ben spec ve hata numaralarından sonra adlandırma birimi testleri hayranıyım. Bu şekilde, ünite testi Test_Bug_1235 bozulursa, test edilmesi gerekenleri neyin ve nerede izleyeceğinizi bilirsiniz. Testlerinizi isimlendirmek kadar "seksi" değildir, Check_File_Save_Networked_Drivesancak bu tür bir testin şartnamelere, gereksinimlere veya hatalara aykırı olarak izlenmesi zordur Test_requirement_54321_case_2.


Deneyimlerinizi paylaştığınız için teşekkür ederiz. Şu andaki mimarın kodlarından hiçbirini açıklamadığı veya bize herhangi bir belge sağlamadığı için kesinlikle bazılarına ihtiyacım var. Lojistik bir kabus oldu, ama bunu değiştirmeyi umuyorum. PDF / A, özellikle denetim için, müşterimizin ihtiyaç duyacağı bir şey olduğu için, kesinlikle araştırmam gereken bir şeydir. Tavsiyeniz için tekrar teşekkürler!
Pete,

4
Bu kapsamlı ve iyi düşünülmüş bir cevaptır. Hem veri ve veri kalitesindeki değişiklikler için hem de hangi verileri kimin izlediğini izlemenin ardındaki yasal nedenler için denetimin önemi hakkında bazı iyi noktalar vardınız , bkz. HIPAA . Yazılımınız Amerika Birleşik Devletleri'nde kullanılacaksa, o zaman bu yasaya göre gerekli olan bazı güvenlik kısıtlamalarınız ve gereksinimleriniz olacaktır.
maple_shaft

3
Hiç olmazsa tam taahhüt geçmişiyle SVN'ye gitmek mümkün.
feeela

Sadece Git SVN değil, çoğu taş devri olmayan sistemler olsa da, CVS gibi eskilerin sıklıkla reposurgeon ile manuel olarak ayarlanması gerekir. İhracatçıların çoğu, Git-VCS'ler tarafından da ithal edilebilecek kadar basittir ve git hızlı bir ihracat akışı yayarlar.
Grawity

2
Testleri yalnızca Hata İzleme ve Spesifikasyon numaralarından sonra adlandırmamanızı öneririz : a) hata numaraları 0'dan başlamaya meyillidir (kimse> 5 basamaklı rakamlar gibi görünmez ve hata izleme yazılımı değiş tokuş edilir; b) özellikler eğilimindedir kaybolmak (çirkin ama çoğu zaman yeterli olur); c) Seksi isimler genellikle onu yeterince netleştirir. Yine de, spec / bug kimliğine referans olması her zaman iyi bir fikirdir.
bernstein

29

Bu uygulamanın 20 yıl sonra hala nasıl çalışacağını anlamaya çalışmaktan ziyade, altı ayınızı orijinal mimarın neden olduğu problemleri gidermek için makul, sağlam bir mimariye yerleştirmek için harcayacağınızı düşünüyorum. oradan ilerle.

Veritabanının kısmi olarak normalleştirilmesi tıbbi ortamda mutlaka beklenmeyen bir durum değildir. Tıbbi veri tabanlarının bazı kısımları, onları EAV (Varlık / Özellik / Değer) modeline uygun kılan özelliklere sahiptir .


2
@ user2708395 En performanslı veya sorgulanması kolay olmayabilir gibi EAV tasarımına dikkat edin. Ayrıca raporlama için iyi bir seçenek olmayabilir.
maple_shaft

@maple_shaft Ben de okudum. İnsanların aşırı kullandığı bazı korku hikayeleri duyduğum için çok dikkatli olacağım. İstemci yalnızca ayda bir kez raporlar oluşturduğundan, sorgulamayı kolaylaştırmak için bazı raporlama veritabanı kullanmaya bakmak.
Pete

4
@maple_shaft: Genellikle veriler EAV şeması / veritabanından ayrı bir raporlama şeması / veritabanına çıkarılır.
SinirliFormsDesigner ile

@FrustratedWithFormsDesigner Bu mükemmel bir nokta. Şemanızdaki EAV'ın sağladığı esneklik eşsizdir, ancak kesinlikle bütün kalıcılık için gümüş bir kurşun değildir.
maple_shaft

EAV'lerin kullanılabileceğini kabul ederken, bulabileceğiniz ilişkilere şaşıracaksınız. Bununla birlikte, bu tür endüstriler için (sağlık hizmetleri, müşteri ilişkileri, vb.) Sıklıkla görülen ekstra niteliklerin bir yere gitmesi gerekir. Öznitellikler.
Clockwork-Muse

13

Ön uç bakış açısıyla cevap:

Yapamayacağınızı söyleyen herkesi dinlemeyin, çünkü 1996'da ortak yazdığım deneysel bir San Francisco Eyalet Üniversitesi web hizmeti nihayet birkaç yıl önce Internet cennetine gitti ve o zaman hiçbir zaman tek bir tarayıcı uyumluluğu düzeltmesi gerekmedi ; Bu, 40 yıllık hedefinizin neredeyse yarısı. Ve 1998'de bir Stanford Araştırma Enstitüsü projesi için yaptığım bu JavaScript tabanlı ön uç , birkaç yıl sonra daha serin bir şeyle değiştirildi, ancak orijinal UI'nin bugün küçük uyumluluk düzeltmeleriyle devam etmesinin bir nedeni yoktu.

İşin püf noktası, uygulamanızın yalnızca yaygın olarak desteklenen W3C / ECMA standartlarını kullanmasını ve kontrolünüzde temiz bir tasarıma sahip olmasını sağlamaktır . Modaya uygun 90'lar dönemi teknolojisine yazılan birçok web uygulaması bugün iyi ya da hiç işe yaramazken, büyük standartlara göre yazılmış 90'lar dönemi web uygulamaları hala işe yarıyor. Pasif görünebilirler ama çalışıyorlar.

Buradaki amaç, sunucularına çıkacak ve bir daha dokunmadan 40 yıl boyunca kalacak bir web uygulaması yazmak değil. Sıfırdan yeniden inşa edilmek zorunda kalmadan yeni özellikleri desteklemek için büyümeye devam edebilecek hatta yıllarca kullanımda olabilecek bir temel oluşturmaktır.

Her şeyden önce, resmi standartlara ve sadece resmi standartlara kod yazmanız gerekir . Onaylanmış bir ECMAScript standardının parçası olmayan JavaScript özelliği yoktur; ES5.1 mevcut sürümdür ve genellikle desteklenir, bu nedenle hedeflenmesi güvenlidir. Aynı şekilde, HTML5, CSS ve Unicode'un geçerli sürümleri de iyidir. Deneysel JavaScript, CSS3 veya HTML özelliği yoktur (satıcı önekleri olan veya tarayıcılar arasında% 100 anlaşma yapmayanlar). Ve tarayıcıya özel uyumluluk hackleri yok. Standarttayken ve herkes önek olmadan destekliyorsa, yeni bir özellik kullanmaya başlayabilirsiniz.

ES5 desteği, IE8 veya önceki sürümleri düşürmek anlamına gelir; bu, birkaç yıl içinde işe yaramayacak tarayıcıya özgü saldırılar gerektirdiği için yine de öneririm. Aslında adresinden bazal tarayıcı uyumluluğu setleri uzun ömürlü en iyi şans için ES5 en Sıkı Modu öneririm IE10 ve herkes son sürümlerinde . Bu tarayıcılar ayrıca, HTML5’in form doğrulama ve yer tutucu özelliklerinin birçoğu için yerel desteğe sahiptir; bu, çok uzun süre faydalı olacaktır.

ECMAScript'in yeni sürümleri, eski sürümlerle uyumluluğu korur; bu nedenle, kodunuz geçerli standartlara göre yazıldığında, gelecekteki özellikleri benimsemek çok daha kolay olacaktır. Örneğin, yaklaşan classsözdizimini kullanarak tanımlanan sınıflar, mevcut constructor.prototypesözdizimiyle tanımlanan sınıflarla tamamen değiştirilebilir . Böylece, beş yıl içinde bir geliştirici, ES6 formatına sınıfları dosya bazında, hiçbir şeyi bozmadan yeniden yazabilir - tabii ki, iyi bir birim testiniz olduğunu varsayarsak.

İkincisi, özellikle uygulamanızı kodlama biçiminizi değiştirirlerse , popüler JavaScript uygulama çerçevelerinden kaçının . Omurga tüm öfke, o zaman SproutCore ve Ember, ve şimdi Angular, herkesin tanıtmayı sevdiği çerçeve. Yararlı olabilirler, ancak ortak bir yönleri de var: yeni sürümler çıktığında ve uzun ömürlülüğü sorgulandığında sık sık uygulamaları kırıyorlar ve kod değişiklikleri gerektiriyorlar. Geçenlerde Angular 1.1 uygulamasını 1.2'ye yükselttim ve biraz yeniden yazmam gerekiyordu. Aynı şekilde, Omurga 2'den 3'e gitmek çok fazla HTML değişikliği gerektirir. Standartlar bir sebepten dolayı yavaş hareket ediyor, ancak bu çerçeveler hızlı hareket ediyor ve periyodik olarak kırılan şeyler maliyet.

Ayrıca, yeni resmi standartlar genellikle eski çerçeveleri eski bırakır ve bu olduğunda bu çerçeveler ya mutasyona uğrar (değişikliklerle birlikte) ya da geride kalır. ECMAScript 6 onaylandıktan ve tüm tarayıcılar standardize edilmiş Promise sınıfını destekledikten sonra tüm dünyanın rakip vaat eden kütüphanelerine ne olacağını biliyor musunuz? Eski hale gelecekler ve geliştiricileri onları güncellemeyi bırakacak. Doğru çerçeveyi seçtiyseniz, kodunuz yeterince iyi adapte olabilir ve eğer kötü bir şekilde tahminde bulunduysanız, büyük bir yeniden düzenlemeye bakıyor olacaksınız.

Bu nedenle, bir üçüncü taraf kütüphanesini veya çerçevesini benimsemeyi düşünüyorsanız, gelecekte kaldırmanın ne kadar zor olacağını kendinize sorun. Uygulamanızı sıfırdan oluşturmadan hiçbir zaman kaldırılamayan Angular gibi bir çerçeve ise, bu, 40 yıllık bir mimaride kullanılamayacağının iyi bir işareti. Bazı özel katman yazılımlarıyla soyutladığınız üçüncü taraf bir takvim widget'ıysa, değiştirilmesi birkaç saat sürebilir.

Üçüncüsü, ona iyi ve temiz bir uygulama yapısı ver. Bir uygulama çerçevesi kullanmasanız bile, geliştirici araçlarından, komut dosyalarından ve iyi bir tasarımdan yararlanabilirsiniz. Şahsen, Closure Toolkit'in bağımlılık yönetiminin bir hayranıyım çünkü hafif ve uygulamanız oluşturulduğunda ek yükü tamamen kaldırılıyor. LessCSS ve SCSS, stil sayfalarınızı düzenlemek ve piyasaya sürülmek üzere standartlara dayalı CSS stil sayfalarını oluşturmak için mükemmel araçlardır.

Ayrıca MVC yapılı tek kullanımlık sınıflar halinde kendi kodunuzu düzenleyebilirsiniz. Bu, birkaç yıl geleceğe geri dönmeyi ve bir şey yazdığınızda ne düşündüğünüzü bilmeyi ve yalnızca ihtiyacı olan parçaları değiştirmeyi çok kolaylaştıracaktır.

Ayrıca W3C’nin tavsiyelerine uymalı ve sunum bilgilerini tamamen HTML’nizin dışında tutmalısınız. (Buna "büyük yeşil metin" ve "iki sütun genişliğinde" gibi öğelerin sunum sınıf adlarını verme gibi hileleri içerir.) HTML'niz semantik ve CSS sunumlu ise, bakımı ve uyarlaması daha kolay olacaktır Gelecekte yeni platformlara. Görme engelli veya engelli insanlar için özel tarayıcılar için destek eklemek de daha kolay olacaktır.

Dördüncüsü, testlerinizi otomatikleştirin ve neredeyse tam kapsama sahip olduğunuzdan emin olun. Sunucu tarafında veya JavaScript'te olsun, her sınıf için birim testleri yazın. Ön uçta, her sınıfın desteklenen her tarayıcıdaki özelliğine göre performans gösterdiğinden emin olun. Her test için bu testleri inşa botunuzdan otomatikleştirin. Bu, hem uzun ömür hem de güvenilirlik açısından önemlidir, zira mevcut tarayıcılar onları gizlese bile erken hatalar yakalayabilirsiniz. Hem Jasmine hem de Google Closure'un JSUnit tabanlı test çerçeveleri iyi.

Ayrıca, Selenium / WebDriver'ın iyi olduğu tam UI işlevsel testlerini de yapmak isteyeceksiniz. Temel olarak, UI'nızdan geçen ve bir kişiyi test ediyormuş gibi kullanan bir program yazıyorsunuz. Bunları inşa botuna bağla.

Son olarak, başkalarının belirttiği gibi verileriniz kraldır. Veri depolama modelinizi düşünün ve kalıcı olmasını sağlayın. Veri şemanızın sağlam olduğundan ve bunun her işlem için de iyi bir şekilde test edildiğinden emin olun. Sunucu mimarinizin ölçeklenebilir olduğundan emin olun. Bu, ön uçta yaptığınız her şeyden daha önemlidir.


1
'JS çerçeveleri' ile ilgili iyi tavsiyeler, arka uç çerçeveleri için de geçerlidir. Bkz Bob amca Martin'in tavsiyesi .
Brian Low

Açıkçası, tamamen bağlamı verilen JS konusunda temkinli olurdum. HTML'nin 40 yıl içinde olduğunu hayal edebiliyorum; Dönüştürücüyü, istediğiniz zaman JS'yi istediğiniz şekilde desteklemek için ne şekilde kullanılıyorsa ona güvenmemeliyim (ve tercih edilen çıkış cihazı düşünülemez şekilde farklı olabileceğinden, JS'nizin muhtemelen yanlış bir şey yaptığını düşünün).
Eamon Nerbonne

10

Müşterinizin makul olmayan beklentilerinin sorunlarını bir kenara bırakmak ve tasarım konularına odaklanmak, 40 yıla kadar gitmem, ama uzun zamandır evrimleşebilirlik gibi görünen sorun tam olarak REST için yaratılmış. . Bununla, REST'i mimarlık tarzı olarak kastetmiştim, bu günlerde çok sık rastlanan terim olan buzzword odaklı bir gelişme değil.

Bir dereceye kadar, insanlar REST'i yanlış anladılar çünkü tezimdeki medya tipi tasarımına yeterince detay veremedim. Çünkü zamanım tükendi, REST'in diğer yönlerinden daha az önemli olduğunu düşündüğüm için değil. Aynı şekilde, birçok insanın yanlış anladığından şüpheleniyorum, çünkü konuyla ilgili yalnızca Wikipedia kaynaklara dayanan Wikipedia girişini okuyorlar.

Ancak, çoğu insanın basit şeyler tasarlamanın basit olması gerektiği hatasında hata yaptığını düşünüyorum. Gerçekte, bir şeyi tasarlamak için gereken çaba, sonucun sadeliği ile ters orantılıdır. Mimari stiller giderken, REST çok basittir.

REST, onlarca yıllık bir yazılım tasarımıdır : her ayrıntı, yazılımın ömrünü ve bağımsız evrimi teşvik etmeyi amaçlamaktadır.

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-724

Bir RESTful arayüzü kullanacağınızdan bahsettiniz. Bu yorum kendi başına ciddi araştırmalar yapmanız ve REST'in gerçekte ne olduğunu anlamaya çalışmanız gerektiğini gösteriyor. Muhtemelen, HTTP yöntemlerinin haritalandırılmasıyla, çoğu insanın REST olduğunu düşündüğü CRUD işlemleriyle ilişkilendiriyorsunuz, ancak bununla ilgisi yok.

REST’i web mimarisinin resmileştirilmesi olarak düşünün. Öyle ya da böyle, on yıl önce ya da daha fazla hala kullanıma hazır olan ve bugün yapılan bir müşteriyle kullanılabilecek web bölümleri var. Çok fazla iş olacak, size garanti ediyorum, çünkü REST hakkını yapmak zor, ancak uzun vadeli faydalar buna değer.


Bu çok yardımcı! Teşekkür ederim. REST hakkında daha fazla araştırma yapıyordum ve bunun çok büyük faydalarının ve bunun HTTP yöntemlerinin ötesine nasıl genişletilebileceğini görebiliyorum. Oldukça güçlü şeyler ve onunla çalışmaktan çok heyecanlıyım. Bağlantı için de teşekkürler! Keşke daha fazla zamanım olsaydı!
Pete

9

Soruyu ve diğer (çok iyi düşünülmüş) cevapları okuduktan sonra, iki sentimi de bırakacağımı düşündüm. Not: Gerçekten eski herhangi bir uygulamayı / yazılımı korumak zorunda değilim. Referans olarak kullandığım şey, bazı açık hükümet verilerini alan, ayrıştırıp farklı biçimlerde görüntüleyen, kendi çalışmalarımdaki hobi web uygulamasıdır. Uygulama yalnız olmadığım ve gov'un bir şekilde bu verileri sunacağını açıkladığı bir proje olarak başladı . Dolayısıyla zamanla birçok şeyin değişeceği açıktı. Ve yaptılar. Ondan ne öğrendim:

  • Mini uygulamalarda işleri böl. Her biri kendi görevini yerine getirebildi. Bu, tek bir parçanın çok hızlı, çok güvenli ve çok kolay bir şekilde değiştirilmesini sağlar. Ve geri dönmeniz gerektiğinde, olayların neden olduğunu ve nasıl olduklarını anlamak zor değil. Siz veya bir başkası daha sonra bir şeyi değiştirmek zorunda kalacaksa, tek bir parçayı değiştirmek, bütün bir şey grubundan daha kolaydır.
  • Farklı parçalar arasındaki haberleşmede kullanılan katı bir sabit katman / katmanı edinin. Bu durumda JSON kullandım, ancak XML, ini veya benzeri standartlar da iyi olurdu. Tekrarlaması kolaydır ve neredeyse her şeye dönüştürülebilir. Hepsi bir süre yaşayabilecekleri kanıtlanmış standartlar. Temel veri ve / veya depolama modeli değişse bile. Uygulamaların her biri, kendi görevi için kendi veri deposunu kullanabilir. Bu, bir görev için taranmış veri miktarını daha küçük yapar, bu nedenle kullanımı ve bakımı daha kolaydır ve değiştirilebilir.
  • Dil kararlarını programlama konusunda endişelenmeyin. Bunlar zamanla değişecek. Sadece rahat olduğunuz veya bir göreve en uygun olan dili kullandığınızdan emin olun.
  • Veri depolama alanınızın "yatay ölçeklenebilir" olduğundan ve ek depolama modüllerinin takılmasının kolay olduğundan emin olun .
  • Mini uygulamaların çağrıldığı ve / veya veri alışverişi yaptığı ortak bir noktaya (benim durumumda URI'lar) sahip olun.

Özetle: En çok değer verdiğim şey, görevlerin ayrılması için kaygıların ayrılması ve parçaların değiş tokuş kabiliyetidir. Sadece 40 yılda (hatta 5 veya 10'da bile) donanımın, ara yüzlerin, depolama vs.'nin çok fazla değişeceğini biliyorsunuzdur. Ve daha sonra geliştiriciler bu değişikliklere tepki vermek ve uygulamanızın parçalarını değiştirmek zorunda kalacaklar, veri kabı veya Kullanıcı Arayüzünün parçaları.


1
Çok iyi tavsiye! Teşekkürler. Görev ayrılığı ve mini uygulamalar oluşturma konusunda kesinlikle aynı fikirdeyim. Mevcut yapı her şey birleşti ve yeni özellikleri ve gereksinimleri entegre etmeyi zorlaştırdı. Bir RESTful arayüzü ile gitmek ve JSON kullanmak umuyorum. Şikayet etmeyin, ama ilk katıldığımda, offshore mimar JSON kullanmama izin vermedi. Ben de ona "dizeleri" geçirdiğimi söyledim ve bu dizelerin JSON biçiminde olduğu bölümünü bıraktım. :)
Pete

7

İşleri mümkün olduğu kadar “geleceğe hazır” yapmak için değişimi planlayın. Yani, kolayca değiştirebilme yeteneğinden başka bir şey için optimizasyon yapmamak için elinizden geleni yapın. Yani normalleşme yok, kesin bir onaylama yok ve gevşek birleştirme bolluğu var.

  • Büyük açık kaynaklı teknolojiler kullanın. Veriler için, kapalı kaynaklı sistemler, hangi şirketlerin hangi şirketlerin altına gireceğini planlayamadığı veya stratejilerini değiştirerek planlayamayacağı gibi büyük bir risk kaynağıdır. Ayrıca, canlı bir topluluğa sahip olmayan küçük açık kaynaklı projelerin de desteğini yitirme olasılığı daha yüksektir.

  • Şema'sız bir NoSQL veritabanı kullanın. Kullanılmakta olan yapılandırılmamış veri türleri, MongoDB gibi bir belge deposu için ders kitabının hemen dışındadır. Verilerinizin nasıl yapılandırılacağını bildiğiniz zaman geleneksel ilişkisel veritabanları ve normalleşmeleri iyidir, ama bu gerçekten de burada bir kurgu. Bir RDBS'de değişen şema maliyetleri, sistem genişledikçe daha da büyüyor. Hangi yapı seçildiyse değişimin sona ereceğini biliyoruz.

  • Yaygın olarak kabul gören standartları kullanarak sistemi yoğun şekilde ayırın. Tüm veri erişimini ve web servislerine mutasyonu bölmek, bunun için bir adım. Değişikliklerin yapılması için mesaj kuyrukları ile birleştirilmesi, sistemin ayrı ayrı bölümlerinin dilleri veya teknolojileri zamanla değiştirmesine yardımcı olacaktır.


Ne yazık ki, basit olmayan bir veri tabanının kullanılması, verilerin yeniden yapılandırılmasının ve yeniden düzenlenmesinin sıfır maliyete sahip olduğu anlamına gelmez.
Alex D

4

Tamam, burada muhtemelen oldukça popüler olacak bazı şeyleri söyleyeceğim, ama burada benimle kal.

Bu, verinin ve / veya uygulamanın 20 yıldan fazla sürmesi gereken ilk projeniz olduğu ve projeye öncülük eden siz olduğunuz için, geri adım atmanız ve bu projenin başarılı olma ihtimalinin ne olduğunu düşünmeniz gerekir. . Çünkü temel olarak sıfıra yakınlar.

Veritabanı tasarımına odaklanarak ve bunu doğru yapmak için çok fazla zaman harcamanız gerekir. Bu projenin başarılı olması için, projeye bir veri mimarını getirmeniz gerekiyor, daha sonra da. Veri tabanı tasarımı konusunda deneyimli ve verilerin gelecekte nasıl kullanılabileceğini dört gözle inceleyen biri olmadan, verilerin 5 yıl sonra hala faydalı olma olasılığı 40 yıldan daha azdır.

İki kişinin (biri jr. Dev unvanı olan) 40 yıl sürmesi beklenen sıfırdan bir şeyler inşa etmesini beklemek muhtemelen başarılamayacak. Veri tasarımı, API tasarımı ve uygulama tasarımı üzerinde çalışan, bunun gibi büyük projelerle çalışmakta deneyimli bir takımın olması gerekir. Bunun gibi bir şey 2 kişilik bir proje değil.

Projeyi Drupal gibi bir şeye bağlamak istemek, projenin neden bu tür projeler üzerinde çalışan insanlara ihtiyaç duyduğunu gösterir. Uygulamayı sadece birkaç yıl içinde modası geçmeyecek herhangi bir şeye bağlamak istemezsiniz. Bunu yaptıysanız, 5-10 yıl içinde sistemde çalışacak birini bulmak çok çabuk zorlaşabilir.

Bu tavsiyeyi yönetime götürür ve onlara projede daha üst düzey insanları edinmeniz gerektiğini açıklardım. Aksi halde, proje başarısız olmaya mahkumdur ve muhtemelen bunun için suçu üstlenen kişi olursunuz.


3

Uygulamanın herhangi bir evrim olmadan 40 yıl hayatta kalmasına gerek yoktur. Ancak, sıfırdan inşa edileceği ya da yapılması gerektiğinden, hala 'çalışıyor' olabilir.

En önemli şey, genişletilebilir olduğu kadar bir miktar istikrar ve yönetişime de izin veren 'veri mimarisi'.

İnsanlığın sonuna kadar hayatta kalabilen ancak hala genişletilebilir olan veri mimarisi ve taksonomisini tasarladık. Bunu sizin için yapacak gerçek bir VERİ TAKSONOMİSİ / VERİ MİMARİSİ kişisini bulmuş olmalısınız.


Bu projenin başından beri başarısız olduğunu düşünüyorum, uygun bir veri mimar olmadan başlatılmış olmasıdır. Bu kesinlikle çok sağlam bir tavsiye.
Pete,

Beni arama ve işe alma zamanı :) Konuştuğumuz gibi bazı şirketler için Veri Yönetişimi ve Taksonomisi yapmak :)
Alex S

3

Buradaki anahtar veritabanına odaklanmaktır (yukarıda belirtildiği gibi). Bunun tutarlı olması ve işlemi tamamen tanımlaması gerekir. Değişirken operasyonla büyümesi gerekiyor. Değiştirmesi kolay değilse, o zaman eski olacak ve bu ölüm öpücüğüdür. Gerisi nispeten daha az önemlidir.

Her zaman mevcut sistemlerin işe yaramadığı durumlar olsa da, normalleşmenin önemli olmadığını öne sürenlere katılmıyorum. Bu durumlarda denormalize ancak veritabanının bir atom işleminin bir parçası olarak fazladan yazma / değişiklik yapmasını sağlayın. Bu şekilde, sorunu çözene kadar sorunu etkin bir şekilde görmezden gelebilirsiniz.

Emekli olmadan önce çalıştığım şirket sıfırdan yazılmış ve neredeyse 25 yıl boyunca sürekli büyüyen ve neredeyse bir orta bayinin tüm yönlerini kapsayan bir sistem kullanıyor. Bu sistemin önemli olduğunu düşündüğüm yönleri:

  • Entegrasyon hayatidir.
  • Veritabanının hem BT hem de diğer personel için doğru ve anlaşılabilir olması gerekir, bu nedenle adlandırma konusunda neredeyse paranoyak bir vurgu gereklidir. Daha sonra tablo ve alan adlarını oluşturmak için birleştirilen tanımlı anımsatıcı tablolarımız var ve tüm “kodlar” aynı şekilde sabit olarak adlandırılmış ve bir EAV tablo yapısında saklanmış.
  • İş mantığını veritabanı tetikleyicileri içine aldık. Bu ilk başta ağrılıdır ve hata mesajlarını istemcilere iletmek ve bazı tablolarda tüm masayı kilitlemeden tetikleyicilerin esnek bir şekilde değiştirilmesine izin vermek için ek çalışma gerektirir, ancak bu hızla büyük bir zaman tasarrufu sağlar ve veritabanını çok daha doğru olmaya zorlar aksine.
  • Referanslarınız doğruysa, “silindiğinde” bile, sistemin kullanım ömrü boyunca en azından referans tablolarını (ideal olarak en hızlı ve en az önemli işlemlerden biri) saklayacağınızı varsayalım.
  • Yukarıdakilerden dolayı, benzersiz tanımlayıcıların ve işlem numaralarının uzun vadede boyutlandırıldığından emin olun. (Aslında şaka olarak emekli olana kadar sürmeleri gerektiğini önerdim).

2

Olay kaynağı ve komut ve sorgu sorumluluğu ayrımını kullanmanızı öneririm . Bunun temel nedeni, emin olabileceğiniz tek şeyin halihazırda ortaya çıkan olaylar olmasıdır. Yeni tür olaylar gelebilir. Bir modele ağır düşünceler eklemiş olsanız bile, bunun modası geçmiş olacağından emin olabilirsiniz. Her sürümde tüm verileri geçirmek uygun olmayabilir. Bu yüzden en iyisi, mevcut ihtiyaçlarınızı karşılayan ve ihtiyaç duyduğunuz her seferinde önceden kaydedilmiş olaylardan hesaplanan bir modele sahip olmak ve daha sonra o modelin mevcut durumundan hesaplanan olayları çıkarmaktır.

Ayrıca akılda test var. Uygulama bundan sonraki on yıl içinde kullanılıyorsa, test uzmanlarının hala yapması gerekeni yaptığını doğrulamaları gerekir. Bu nedenle entegrasyon uygulamanızı mümkün olduğunca kolay test edin.

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.