Önce ön uç veya Önce arka uç. İyi sistem tasarım uygulaması olan ikisinden hangisi?


30

Şu anda bir okul kayıt sistemi geliştirmemi isteyen bir müşterim var. Şimdi bu ilk kez bu tür bir zorlukla karşı karşıyayım. Oluşturduğum geçmiş yazılımların çoğu o kadar da karmaşık değil.

Hepinizin karmaşık yazılımlar yarattığını biliyorum, bu konuda sadece tavsiyenizi istiyorum. Önce ön veya arka ucu tasarlamalı mıyım?

Teşekkürler!

İşte internette bir süre önce bulduğum bir makalenin sonucudur. Sadece paylaşmak istiyor

http://www.skitoy.com/p/front-end-vs-back-end-developers-my-take/157

Ön uç ve arka uç geliştiricileri (benim kullanımım)

Benim kişisel al

Yine bu bir eğitim meselesi, bazı geniş vuruş genellemeleri:

Ön uç geliştiriciler

  • Genelde CS derecesine sahip değil veya 3. kademe okuldan CS derecesine sahip değilsiniz.
  • Temeline benzer dillerde çalışın (PHP'ye bakınız)
  • Photoshop belgelerini CSS / HTML / etc'ye dönüştürme konusunda görsel bir beceri edinin.
  • Özgür dil türleri nedeniyle yinelemeli programlama için yüksek toleransı var

Arka uç geliştiriciler

  • CS derecesine veya çok fazla deneyime sahip olmak
  • Bana problem çözme yaklaşımlarında daha sistematik olma eğilimindedir
  • Sızan bir nesneyi bulmakla günlerce vakit geçirmeyi unutmayın
  • Sorunları çözmek için araçlar oluşturmaya çalışın


2
smh, bu yüzden insanlara Web Geliştiricisi'ne karşı Yazılım Geliştiricisi olduğumu söylememin nedeni bu.
2'de

10
Ön ve arka uç geliştiriciler hakkındaki bu genellemelerin soru ile ne ilgisi var?
Erik,

Front End Dev! = Back End Devs, çoğu zaman devam eden s / b geçişlerini sürdürür.
Abhinav Gauniyal

Bence buradaki tek geçerli cevap 'Bu değişir ...' olacaktır
Oliver Weiler

Yanıtlar:


43

Arkadan başlayıp ileriye doğru giderseniz, müşteriyi yanlış anlama riskini taşırsınız. Kolayca göremeyecekleri ve kavrayamayacakları şeyler yaratacağınız için, gereksinimleri karşılayıp karşılamadığınızı doğrulamaya çok kolay katılamazlar. Bu, çok fazla iş israf edebileceğiniz anlamına gelir.

Önden başlayıp geriye doğru giderseniz, tüm yaptığınız ekranda basit bir form çizdiğinde, müşterinin neredeyse bittiğini düşünme riski vardır. Daha sonra neden bu kadar uzun sürdüğünü sorgulayabilirler, çünkü bunu birkaç gün içinde bitirdi. Ayrıca, daha uygun bir ön yüzün daha kolay olacağı durumlarda, önden arkaya doğru evlenmek için karmaşık bir iş yapmanız gerektiğinin farkına vardığınızda, kendinizi bir köşeye boyanma riskini de taşırsınız.

IMO, önce özellik üzerinde çalışmalısın. Sistemdeki her özellik için ön ve arka uçları birlikte yazın. Bu, müşteriye ilerlemenin daha fazla görülmesini sağlar ve onlara çok fazla sıkıntıya neden olmadan "hayır, demek istediğim bu değil" deme fırsatı verir.

Bu, sunucu donanımını veya güvendiğiniz herhangi bir yazılımın özelliklerini (örneğin hangi veritabanını kullandığınızı) düşünmeniz gereken çok büyük bir proje ise, o zaman muhtemelen önce o kısmı iyi düşünmelisiniz.


Bunun daha özlü bir açıklama olduğunu düşünüyorum. Fakat ilk önce arka ucu yapmak daha iyi olurdu, çünkü iyi yapılandırılmış bir arka ucunuz varsa, ön ucu oluşturmanın daha kolay olacağını düşünüyorum.
drexsien

3
Ön
tarafın

1
Bu yüzden müşteriye göstereceğiniz ve "Programın yapmasını istediğiniz şey bu mu?" Diyen bir mock-up GUI oluşturmalısınız.
gablin

1
+1. @ andsien: Siz zaten fikriniz varsa, neden istediniz? Tecrübelerime göre Paul haklı, özellik odaklı gelişim neredeyse her zaman daha iyi bir stratejidir.
Doktor Brown

3
@ andsien: "İyi yapılandırılmış bir arka uca sahipseniz ön ucu oluşturmak daha kolaydır". IMHO bu tehlikeli bir yanlış anlaşılma. Sorun şudur: Ön uç için özellikler oluşturmak için onu kullanmadan önce arka ucunuzun iyi yapılandırılmış olup olmadığını bilmiyorsunuz.
15'te sleske

9

Yazılımın birçok boyutu vardır, bu yüzden aşırı basit bir ön-arka-geri zayıf bir sorudur ve makul ve yararlı bir cevap vermek çok çok zordur.

Bir görünüm verinin statik yapısıdır. Bu görüşe göre en az üç boyut vardır: mimari katmanlar ("önden arkaya"), kullanım durumları ve aktörlerin yanı sıra uygulama maliyetleri veya riskleri.

Bir görünüm işlemin dinamik yapısıdır. Ayrıca, bu görüş için en az üç boyut vardır.

Üçüncü bir görünüm, doğal olarak katmanlara düşen, kullanım durumlarını destekleyen ve maliyet ve riskleri olan mimari bileşenlerdir.

Devam edebilirdim, ama mesele bu.

Ön uç ve arka uç geliştiricileri (benim kullanımım)

Soruna bakmak için yaklaşık en az kullanışlı yoldur. Gerçek geliştiriciler - ve sizin görüşleriniz - burada çok, çok az önemli. Önemli olan nedir?

  • Vakaları ve Aktörleri Kullanın

  • Bu kullanım durumlarını destekleyen mantıksal veri modeli

  • Kullanım durumunun bir parçası olarak yapılan işlem

  • Kullanım senaryosunun mantıksal ve işleme öğelerini oluşturmak için kullanacağınız bileşenler.

Bu yüzden çoğu insan sisteminizi kullanıcı hikayesi veya kullanım senaryosu ile ayırmanız gerektiğini söylüyor.

Geliştirme yapacak insanlar hakkında geniş kapsamlı inme genellemeleri yapmamak.


7

Ne. Uygulamanızın neler yapması gerekiyor? Sıcak vananın sıcak su sağladığından, soğuk vananın soğuk su verdiğinden, suyun ilk sırada aktığından, boruları ihtiyaç duyduğunuz yerde uzatabildiğinizden emin olun ve ardından evin tüm odalarına ya da evin gerçek tesisatını uygulamaktan endişe edin Aslında tam olarak benziyor.

Ön uç sadece üzerinde bazı anahtarlar ve kollar bulunan bir maskedir. Arka uç yalnızca veri alma ve işleme isteklerini alan bir şeydir. Önce istediğiniz herhangi bir kombinasyonda her ikisini de hızla uygulayabileceğiniz bir noktaya gelin.

Fakat ne yaparsanız yapın, birisinin tasarımının diğerinin tasarımını belirlemesine izin vermeyin. Bu şekilde delilik yatıyor.

Müşterilerinizin fikrini kaç kez değiştirdiklerine bakılmaksızın, ihtiyaçlarınız ne olursa olsun geliştirsinler. Daha sonra spesifikasyonlara göre geliştirin ve küçük makaslar sonunda mutlu olana kadar yeniden düzenleyin.

Ayrıca, 2008 yılındaki ön uç devlerin arka uç uçlarla karşılaştırılması web yıllarında uzun zaman önceydi. Eğlence uğruna, soruya bağladığımızdan beri eski kestaneye birkaç şey düzeltmek / eklemek istiyorum, ancak (umarım) içine birkaç ipucu da ekleyeceğim:

Ön uç geliştiriciler

Genelde CS derecesine sahip değil veya 3. kademe okuldan CS derecesine sahip değilsiniz.

Ellerini göster. CS derecesine sahip kaç kişiye ön uçta en iyi uygulamalar öğretildi? Veya JavaScript ile bir karışıklık yapmamak nasıl? Veya IE6-IE9'dan CSS sorunlarını nasıl ele alabilirim? Akademi'yi işleten ders kitabı endüstrisi, sürekli değişen teknolojiyle başa çıkmak için çok tembel ve şişkindir, bu nedenle kolejlerde çok az 'ciddi' dikkat çekmiştir. Bu benim gibi geç çiçek açanlar için mükemmeldi.

Temeline benzer dillerde çalışın (PHP'ye bakınız)

Çünkü PHP müşteri tarafında bir teknolojidir? Ya da öncelikle Scheme'den esinlenen JavaScript, artık Basic ile daha fazla ortak noktaya sahip olduğundan, artık artık ön uçta bir sorun değil ve gerçekte asla gerçekte olmadı ancak arka uç .NET web uygulamaları için hala kullanılabilir durumda mı? Blog, kendi kendine öğretilen açık kaynaklı web geliştiricileri ile bu noktada kurumsal popüler teknolojiyi kullanan CS grad web geliştiricileriyle karşılaştırmaktadır. Bu savaşın her iki tarafındaki eşit paylarla dayanılmaz ve yetkin biriyle karşılaştım, ama o hala OT.

Photoshop belgelerini CSS / HTML / etc'ye dönüştürme konusunda görsel bir beceri edinin.

Biraz geniş olan "görsel beceri" den detaylara daha fazla dikkat. Hepimizin hiçbir şekilde estetik tasarım becerisi yoktur. Fakat evet, çoğumuz bu şeyi Jr. düzeyinde öğrenmek zorundayız ve aslında CSS neşterlerinin yapacağı zaman JS çekiç kullanmayan iyi bir kullanıcı arayüzü yazmak oldukça önemlidir.

Özgür dil türleri nedeniyle yinelemeli programlama için yüksek toleransı var

Bu yüzden ilk önce daha önce bahsettiğim parçaları istiyorum. Düğmeleri basarız, siz malları alırsınız / alırsınız. Onları paketleyip teslim ediyoruz. Bunların hiçbir şekilde birbirine sıkıca bağlanmasının bir nedeni yoktur. Ayrıca, gerçekten, katı yazma işlemi, teknik olarak sınıfları olmayan bir dilde kibirli olmaktan hoşlanan çoğu insanın, tipik olarak yapması gereken OOP'ta emilmiyorsa, yinelemeli bir sürece müdahale etmemelidir. Ama kıyameti olsa bile, ön uç sadece öngörülebilir bir erişim noktasına ihtiyaç duyar ve JSON olmayan bir JavaScript yazarken dinamik olarak JavaScript yazmak gibi aptalca bir şey yapmadığınız sürece arka uçta istediğiniz şeyi yapabilirsiniz. başarılı arka uç davranışını sıkı sıkıya bağlamak HTML yapısına "tam da öyle". * öksürük * java devs * / öksürük *


Tek pişmanlığım sorunuzu bir kereden fazla tekrarlayamamam. Sonunda hangi cephenin, hangi cephenin ve nasıl geliştirileceği sorusunun sorulacağı sorusunu sormanın yanlış olduğu sorusunu bulmak için bu sorunun cevabını 2 cevap aşağı kaydırmam gerekti. Ayrıca CS Derecesi hakkındaki görüşünüzü de kabul ediyorum. Ve son "geç olgunlaşanlar" lafı.
Shivan Dragon

5

Buna tek bir doğru cevap yok. Her iki yaklaşım da bazı durumlarda iyi (ve kötü) olabilir.

Birinin kabul (kabul ve ünite) testlerinin yapıldığı TDD yaklaşımını göz önünde bulundurmanızı tavsiye ederim.

Sistemin bir iskeletini bir araya getirerek başlayın : mutlak asgari işlevselliğe sahip temel altyapı. Bu sadece konseptinizin işe yaradığını ve farklı bileşenlerin birlikte çalışabileceğini göstermek içindir. Bu aynı zamanda çıplak bir kemik UI (eğer varsa), gerçekte minimal bir şey yapmak ve / veya göstermek için yeterlidir.

Daha sonra ayrıntıları, özelliklere göre düzenlersiniz : belirli bir özellik / senaryo için bir kabul testi yazın, başarısız olun, ardından memnun etmek için kod yazın. Bu , dışarıdan içeriye doğru çalışmanıza neden olur : sistem bir girdi mesajı alır, bu nedenle bu iletiyi ele almanız / dönüştürmeniz, onunla bir şeyler yapmanız ve sonuçları tekrar kullanıcı arayüzüne geçirmeniz gerekir. Yolda etki alanı kavramlarını keşfedecek ve bunları UI'den etki alanı katmanına ve geriye doğru yeni sınıflarla temsil edeceksiniz.

Bu yaklaşım için önerilen bir okuma, Testler Kılavuzlu , Büyüyen Nesne Yönelimli Yazılımdır .


1

İlk önce API

Her iki takımın mühendisleri, ön uç ile arka uç arasındaki API üzerinde birlikte çalışmalıdır. Sonra her iki takım da tasarlanan API'ye dayanarak çalışmaya başlayabilir. Bu, başka bir ön uç ekibinin çalışmaya başlayabilmesi (belki de mobil, web istemcisinden sonra), ekiplerin paralel olarak çalışmaya başlayabileceği açık avantajının avantajına sahiptir.

Yinelemeli bir yaklaşımla birleştirin ve şöyle görünmelidir:

  1. Basit bir API tasarlayın
  2. Her iki takım da API'ye dayanarak geliştirir ve test eder
  3. Entegrasyon testi
  4. Müşteriye göster ve geri bildirim al.
  5. API'yi geliştirin ve tekrarlayın.

0

Ön uçtan başla, ama önce neden zaten var olan bir uygulamayı bulamıyorlar? Bu, bu proje hakkında daha fazla fikir verecektir. Bazı özel gereksinimleri var mı yoksa daha ucuza yapabileceğinizi düşünüyorlar mı?

Güvenlik beklentilerini ve yasanın gerektirdiğini tam olarak anlayın. Bunun ne tür bir okul olduğundan emin değilim, ancak öğrenci bilgileri genellikle bazı gizlilikler gerektiriyor.

Potansiyel öğrenciler bir web sitesine veri giriyorlarsa, grafik tasarım daha fazla sorun olacak.

Taleplerine göre, ön uç alayları çizin. Eğer GUI'nin ileri doğru olmadığını düşünüyorsanız, işlevsel bir şey yapmanız gerekebilir, böylece onu çalışırken görebilirsiniz. Kaydı, veri girişine bağlı olarak farklı yönlere yayılan bir tür 'sihirbaz' olarak görebilirler.

Sonra veritabanına bilgi ısrarla başlayabilirsiniz.


1
ön uçtan başlamaktaki sorun (deneyime dayanarak), bazı işlevleri
unutduğunuzda, arka ucunuzu bozabileceği ve

1
@ andsien - Tasarlamaktan mı yoksa inşa etmekten mi bahsediyorsunuz? Önce arka ucu tasarlamadan bir ön uç oluşturmaya başlamazdım.
JeffO

ops benim yapı inşa düşünüyorum im ... bu jeff için teşekkürler.
drexsien,

0

Evet, OP'nin bir süre önce sorulduğunu farkettim. Arka ucundan başlayın, ancak kullanıcının ne düşündüğünü görmesini sağlamak için ön ucu MOCK UP yapın. Ön uç, buna değer, çünkü sadece çan ve ıslık. Arka uç, paranın olduğu yerdir ve bir kere o düzene sahipseniz, FE sadece etin üzerindeki sos olur.


Ne yazık ki müşterilerin istediği şey bu, ancak böyle bir davranışın teşvik edilmemesi gerektiğini düşünüyorum. Onları görmeye kapatmayın ve istedikleri temel davranışı elde ettiklerini doğrulayana kadar prototip görünümünüze uymayın. Müşteriler genellikle göz şekerini faydalı özellikten ayıramazlar ve yalnızca uzun vadede uygulama nihayetinde başarısız olduklarında sizi daha az önemli olan şeylerle suçlamak için çok zaman harcarlar.
Erik,

@ErikReppen Çok kez bu deneyime sahip oldum - İstemciye "kullanıcının bir metin alanına veri gireceğini" ve istemcinin "form alanının tam olarak 400 piksel genişliğinde olacağını ve sayfanın soluk mavi olacağını göstermesini istedim Arial 11pt metinli arkaplan ... "Ama yine de bir ön ucu demonte etmekten daha iyi olduğunu düşünüyorum. Aksi halde, ana kullanım durumlarında dengesiz varsayımlarla çelişen bir sistemin kurulması mümkündür.
sekiz

Bir ön ucu demo yapabilirsiniz ancak sade ve basit tutun. Onlara satılmalarını talep etmedikleri sürece, onları fotoğrafçıların aptallıklarından uzak tutun. Ve orada sorun yatıyor. Bekledikleri şey buydu, ancak pikselleri öncelikli olarak "gerçekte müşterilerimizin yapmalarını istediğimiz şeyi yapmalarını" öncelemek için fazla aptal olmadıklarından daha sık görülürler.
Erik,

errr, bu yüzden CSS'ye sahip değil miyiz? (Ben her ne kadar do Acını hissediyorum). Her zaman ve kasıtlı olarak çirkin, ancak işlevsel bir FE'm var ve Vakaları, iş akışını kullanın ... ve tartışırız. (ama gerçek cevap
şartlar-

0

Yorumumu genişletiyorum:

Önce gereksinimleri toplayın, sonra bunları Kullanım Kılıfları ve tasarımına dönüştürün.

İlk önce ayrıntılı bir veritabanı tanımı gelir. Müvekkilin tamamen takmalarını umursamıyorum, onları oturmaya ve bakmaya zorluyorum - ve imza atıyorlar (muhtemelen o zaman daha fazla teknik bilgili adamlarının bunu yapması gerektiğini fark etmesi için zorluyorlar) ), devam etmeden önce.

BE olmadan FE ile nasıl başlayabilirsiniz? Ne için FE? Veritabanınızı tanımlayın !! FE'nin manipüle ettiği şey budur.

Tamam, sorunlar ve daha sonra ince ayarlar var olacak ve ben bunu buzdağının söz konusu ucu en çok anladığımız olduğundan, kısa sürede müşterinin önünde basit, örnek, GUI almak için iyi olduğunu kabul ediyorum.

Bununla birlikte, 1) tartışma tartışmaları için bunun sadece kaba bir moral olduğunu vurguluyorum ve 2) kasıtlı olarak çirkin ama işlevsel kıldığını vurguluyor; geniş ve arka plan açık mavi.

Buradaki çoğu cevabın (ve onları takip ettiğim) müşteriye çok fazla odaklanma eğiliminde olduğumu düştüm, ancak, tamamen bakış açısına göre, öncelikle bir BE'yi manipüle etmek için bir FE tasarlayamayacağınızı iddia ediyorum. bu BE tasarımı.


"önce bir BE'yi tasarlamadan bir BE'yi manipüle etmek için bir FE tasarlayamazsınız". Oh evet, yapabilirsiniz - buna "prototip" denir. Yeni bir sistem başlatırken değerli bir ilk adım olabilir.
15'te sleske

prototipleme nedir? Alev savaşı yok, sadece aklıma girdi. Bir prototipin ne olduğunu anlıyorum, ama belki de farklı bir alandan geldiğim için, sadece her zaman şu şekilde görüyorum: gereklilikleri almak, bunları kullanım durumlarına ve tasarıma dönüştürmek. Eğer d / b'nizin çivilenmemiş olması durumunda, o zaman gereksiz işleri yapmanıza gerek yok, bu yüzden önce bunu sıralayın, daha sonra nasıl değiştireceğinize karar verin (gereksinimlere göre). YMMV ... devam etti ...
Mawg

Muhtemelen siyah-beyaz değil, aksi takdirde soru sorulmayacaktı, ama her zaman önce IMO ol. Aslında, bir tane yapıyorum şu anda yolda ki (ben onlara dokundu asla, ama bu :-) bütün nother hikaye gereksinimleri yerine sadece belli belirsiz bir bulanık duygu var clietns için
Mawg

1
Benim deneyimim, kullanıcı gereksinimlerinin önce gelmesi ve mimarlığın izlemesi gerektiğidir. Fakat elbette bu teknik detaylara bağlı, bazı şeylerin daha sonra değiştirilmesi gerçekten zor. En azından değişimlerin farkında olmak önemlidir.
15'te sleske

Aynı şeyi farklı şekillerde söylediğimizden şüpheleniyorum (+1)
Mawg
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.