Front end trước hoặc Back end trước. Một trong hai đó là một pratice thiết kế hệ thống tốt?


30

Tôi có một khách hàng ngay bây giờ yêu cầu tôi phát triển hệ thống tuyển sinh của trường. Bây giờ đây là lần đầu tiên tôi có loại thử thách này. Hầu hết các phần mềm trong quá khứ mà tôi tạo ra không phức tạp lắm.

Tôi biết hầu hết tất cả các bạn đã tạo ra các phần mềm phức tạp, tôi chỉ muốn lời khuyên của bạn về điều này. Tôi nên thiết kế đầu tiên kết thúc trước hoặc cuối?

cảm ơn!

Đây là kết luận của một bài báo tôi tìm thấy trên internet một thời gian trước đây. Chỉ cần chia sẻ

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

Nhà phát triển front-end so với back-end (mất của tôi)

Cá nhân của tôi

Một lần nữa, đó là vấn đề đào tạo, một số khái quát về đột quỵ rộng:

Nhà phát triển giao diện người dùng

  • Thông thường không có bằng CS hoặc có bằng CS từ trường cấp 3.
  • Làm việc trong các ngôn ngữ tương tự như cơ bản (xem PHP là Cơ bản)
  • Có kỹ năng trực quan trong việc chuyển đổi tài liệu photoshop sang CSS / HTML / vv.
  • Có khả năng chịu đựng cao đối với lập trình lặp, do loại ngôn ngữ miễn phí

Nhà phát triển cuối

  • Có bằng CS hoặc nhiều kinh nghiệm
  • Có xu hướng với tôi hệ thống hơn trong cách tiếp cận giải quyết vấn đề của họ
  • Đừng bận tâm dành nhiều ngày để tìm một đối tượng bị rò rỉ
  • Hãy thử và xây dựng các công cụ để giải quyết vấn đề


2
smh, đây là lý do tại sao tôi nói với mọi người rằng tôi là Nhà phát triển phần mềm và Nhà phát triển web.
vui mừng

10
Những khái quát này về các nhà phát triển phía trước và phía sau có liên quan gì đến câu hỏi?
Erik Reppen

Front End Dev! = Back End Devs, mặc dù hầu hết thời gian, quá trình chuyển đổi b / w chúng vẫn tiếp tục.
Abhinav Gauniyal

Tôi nghĩ rằng câu trả lời hợp lệ duy nhất ở đây sẽ là 'Nó phụ thuộc ...'
Oliver Weiler

Câu trả lời:


43

Nếu bạn bắt đầu ở phía sau và đi tiếp, bạn có nguy cơ hiểu nhầm khách hàng. Vì bạn sẽ tạo ra những thứ mà họ không thể dễ dàng nhìn thấy và hiểu được, họ không thể tham gia rất dễ dàng trong việc xác minh xem bạn có đáp ứng yêu cầu hay không. Điều này có nghĩa là bạn có thể lãng phí rất nhiều công việc.

Nếu bạn bắt đầu ở phía trước và đi lùi, bạn sẽ gặp rủi ro là khách hàng sẽ nghĩ rằng nó gần như đã hoàn thành, khi tất cả những gì bạn đã làm là vẽ một hình thức đơn giản trên màn hình. Sau đó, họ có thể đặt câu hỏi tại sao nó lại mất nhiều thời gian như vậy, vì bạn đã hoàn thành nó trong vài ngày. Bạn cũng có nguy cơ vẽ mình vào một góc, khi bạn nhận ra rằng bạn phải làm một số công việc phức tạp để kết hôn từ phía trước ra phía sau, khi một mặt trước phù hợp hơn sẽ đơn giản hơn.

IMO, bạn nên làm việc trên tính năng này trước tiên. Viết mặt trước và mặt sau cùng nhau, cho từng tính năng trong hệ thống. Điều này mang lại cho khách hàng tầm nhìn tiến bộ lớn hơn và nó cho họ cơ hội để nói "không, đó không phải là ý tôi", mà không khiến bạn quá đau khổ.

Điều đó nói rằng, nếu đây là một dự án rất lớn, trong đó bạn cần xem xét phần cứng máy chủ hoặc khả năng của bất kỳ phần mềm nào bạn dựa vào (ví dụ: cơ sở dữ liệu nào bạn đang sử dụng), thì có lẽ bạn nên suy nghĩ kỹ về phần đó trước.


Tôi nghĩ đó là một lời giải thích ngắn gọn hơn. Nhưng nó sẽ tốt hơn để làm cho mặt sau đầu tiên vì tôi nghĩ nó dễ dàng hơn để tạo mặt trước nếu bạn có một mặt sau có cấu trúc tốt.
drexsien

3
Nếu họ nghĩ rằng giao diện người dùng là tất cả, bạn có thể đề cập đến Google ...
l0b0

1
Đó là lý do tại sao bạn nên xây dựng một GUI giả lập mà bạn hiển thị cho khách hàng và nói "Đây có phải là điều bạn muốn chương trình thực hiện không?", Và sau khi giải quyết xong, bạn ném nó ra và bắt đầu xây dựng phần phụ trợ.
gablin

1
+1. @andsien: Nếu bạn đã có ý kiến, tại sao bạn lại hỏi? Theo kinh nghiệm của tôi, Paul nói đúng, phát triển dựa trên tính năng hầu như luôn là chiến lược tốt hơn.
Doc Brown

3
@andsien: "việc tạo giao diện người dùng sẽ dễ dàng hơn nếu bạn có một mặt sau có cấu trúc tốt". IMHO đó là một sự hiểu lầm nguy hiểm. Vấn đề là: Bạn không biết liệu mặt sau của bạn có cấu trúc tốt hay không cho đến khi bạn sử dụng nó để xây dựng các tính năng cho frontend.
sleske

9

Do đó, có nhiều khía cạnh đối với phần mềm, do đó, một mặt trước quá đơn giản là một câu hỏi kém và rất, rất khó để đưa ra một câu trả lời hợp lý, hữu ích.

Một quan điểm là cấu trúc tĩnh của dữ liệu. Có ít nhất ba chiều trên quan điểm này: các lớp kiến ​​trúc ("từ trước ra sau"), các trường hợp sử dụng và các tác nhân, cũng như chi phí hoặc rủi ro khi thực hiện.

Một quan điểm là cấu trúc động của quá trình xử lý. Có ít nhất ba chiều cho quan điểm này.

Một quan điểm thứ ba là các thành phần kiến ​​trúc, rơi tự nhiên vào các lớp, hỗ trợ các trường hợp sử dụng và có chi phí và rủi ro.

Tôi có thể tiếp tục, nhưng vấn đề là đây.

Nhà phát triển front-end so với back-end (mất của tôi)

Là cách ít hữu ích nhất để xem xét vấn đề. Các nhà phát triển thực tế - và ý kiến ​​của bạn về họ - rất quan trọng ở đây. Vấn đề là gì

  • Ca sử dụng và diễn viên

  • Mô hình dữ liệu logic để hỗ trợ các trường hợp sử dụng

  • Quá trình đó được thực hiện như một phần của ca sử dụng

  • Các thành phần bạn sẽ sử dụng để xây dựng các yếu tố logic và xử lý của ca sử dụng.

Đây là lý do tại sao hầu hết mọi người nói rằng bạn cần phân tách hệ thống của mình theo câu chuyện của người dùng hoặc trường hợp sử dụng.

Không đưa ra những khái quát về đột quỵ rộng rãi về những người sẽ phát triển.


7

Cũng không. Ứng dụng của bạn cần gì để có thể làm được? Hãy chắc chắn rằng van nóng cung cấp nước nóng, van lạnh cung cấp nước lạnh, nước chảy ngay từ đầu, bạn có thể mở rộng đường ống bất cứ nơi nào cần thiết và sau đó lo lắng về việc thực hiện hệ thống ống nước thực tế cho tất cả các phòng trong nhà hoặc những gì ngôi nhà sẽ thực sự trông giống như chính xác.

Mặt trước chỉ là một mặt nạ với một số công tắc và đòn bẩy trên nó. Mặt sau chỉ là một thứ nhận được yêu cầu lấy và xử lý dữ liệu. Đến điểm mà bạn có thể nhanh chóng thực hiện cả hai trong bất kỳ kết hợp mong muốn nào trước tiên.

Nhưng bất cứ điều gì bạn làm, đừng để thiết kế của người này ra lệnh cho thiết kế của người kia. Đó là cách điên rồ nói dối.

Có sẵn các công cụ để cho các nhà phát triển của bạn xây dựng bất cứ điều gì họ cần cho khách hàng của bạn, bất kể họ thay đổi ý định bao nhiêu lần. Sau đó xây dựng nó để thông số kỹ thuật và khởi động lại cho đến khi những lời nguyền nhỏ cuối cùng cũng hạnh phúc.

Ngoài ra, việc so sánh các nhà phát triển front end với các nhà phát triển back end trong năm 2008 là một thời gian dài trước đây trong những năm web. Để giải trí, tôi muốn sửa / thêm một vài điều vào hạt dẻ cũ đó vì chúng tôi đã liên kết nó trong câu hỏi, nhưng cũng (hy vọng) nhúng một vài mẹo trong:

Nhà phát triển giao diện người dùng

Thông thường không có bằng CS hoặc có bằng CS từ trường cấp 3.

Đưa tay ra. Có bao nhiêu người có bằng CS đã được dạy về các thực hành tốt nhất ở mặt trước? Hoặc làm thế nào để không gây rối với JavaScript? Hoặc làm thế nào để xử lý các vấn đề CSS từ IE6-IE9? Ngành công nghiệp sách giáo khoa, điều hành học viện, quá lười biếng và cồng kềnh để xử lý công nghệ liên tục thay đổi, vì vậy nó đã nhận được rất ít sự chú ý 'nghiêm trọng' trong các trường đại học. Điều này đã được tuyệt vời cho những người nở muộn như tôi.

Làm việc trong các ngôn ngữ tương tự như cơ bản (xem PHP là Cơ bản)

Bởi vì PHP là công nghệ phía máy khách? Hoặc bởi vì JavaScript, được lấy cảm hứng chủ yếu bởi Scheme có nhiều điểm tương đồng với Basic rồi Visual Basic, giờ đây không còn là mối lo ngại ở mặt trước và chưa bao giờ thực sự tồn tại nhưng vẫn có sẵn cho các ứng dụng web .NET back? Blog so sánh các nhà phát triển web nguồn mở tự học với các nhà phát triển web cấp độ CS sử dụng công nghệ phổ biến của công ty tại thời điểm này tôi nghĩ. Tôi đã gặp phải những kẻ không thể vượt qua và có thẩm quyền trong các cổ phần bằng nhau ở cả hai phía của cuộc chiến cụ thể đó nhưng anh ta vẫn đến OT.

Có kỹ năng trực quan trong việc chuyển đổi tài liệu photoshop sang CSS / HTML / vv.

Chú ý nhiều hơn đến chi tiết hơn là "kỹ năng thị giác" hơi rộng. Không phải tất cả chúng ta có bất kỳ kỹ năng thiết kế thẩm mỹ nào. Nhưng vâng, hầu hết chúng ta đều phải học những thứ này ở cấp độ Jr. và thực sự rất quan trọng để viết UI tốt mà không sử dụng búa JS khi dao mổ CSS sẽ làm.

Có khả năng chịu đựng cao đối với lập trình lặp, do loại ngôn ngữ miễn phí

Đây là lý do tại sao bạn muốn các phần tôi đã đề cập trước đó tại chỗ đầu tiên. Chúng tôi chuyển qua các nút bấm, bạn sản xuất / lấy hàng. Chúng tôi đóng gói và cung cấp chúng. Không có lý do cho những điều này theo bất kỳ cách nào bị ràng buộc chặt chẽ với nhau. Ngoài ra, thực sự, việc gõ nghiêm ngặt không nên can thiệp vào một quá trình lặp đi lặp lại nếu bạn không sử dụng OOP, điều mà hầu hết những người thích kiêu căng về một ngôn ngữ không có kỹ thuật, trên thực tế, thường là như vậy. Nhưng ngay cả khi chúng bốc mùi, giao diện người dùng chỉ cần một điểm truy cập có thể dự đoán được và bạn có thể làm bất cứ điều gì bạn muốn ở mặt sau miễn là bạn không làm điều gì đó ngớ ngẩn như viết JavaScript mà không phải là JSON hoặc liên kết chặt chẽ hành vi kết thúc thành công với cấu trúc HTML là "chỉ như vậy." * ho * java devs * / ho *


Điều tiếc nuối duy nhất của tôi là tôi không thể +1 câu hỏi của bạn nhiều lần. Thật xấu hổ khi tôi phải cuộn xuống 2 câu trả lời cho câu hỏi này để cuối cùng tìm ra câu trả lời mà hỏi về thứ tự trước và sau và nên được phát triển là câu hỏi sai. Tôi cũng đồng ý với ý kiến ​​của bạn về Bằng cấp CS. Và nhận xét "nở muộn" cuối cùng.
Rồng Shivan

5

Không có câu trả lời đúng duy nhất cho điều này. Một trong hai cách tiếp cận có thể là tốt (và xấu) trong một số tình huống.

Tôi khuyên bạn nên xem xét phương pháp TDD, trong đó một hướng dẫn bằng các thử nghiệm (chấp nhận và đơn vị).

Bắt đầu bằng cách kết hợp một bộ xương của hệ thống: cơ sở hạ tầng cơ bản, với chức năng tối thiểu tuyệt đối. Điều này chỉ để cho thấy rằng khái niệm của bạn hoạt động và các thành phần khác nhau có thể làm việc cùng nhau. Điều này cũng bao gồm một giao diện người dùng xương trần (nếu có), chỉ đủ để thực sự làm và / hoặc hiển thị một cái gì đó tối thiểu.

Sau đó, bạn đưa ra các chi tiết, tính năng theo tính năng : viết một bài kiểm tra chấp nhận cho một tính năng / kịch bản cụ thể, làm cho nó thất bại, sau đó viết mã để đáp ứng nó. Điều này khiến bạn làm việc từ bên ngoài : hệ thống nhận được một số thông báo đầu vào, vì vậy bạn cần xử lý / chuyển đổi thông báo đó, làm một cái gì đó với nó, sau đó truyền kết quả trở lại UI. Trên đường, bạn sẽ khám phá các khái niệm miền và thể hiện chúng với các lớp mới, từ UI đến lớp miền và trở lại.

Đối với phương pháp này, một cách đọc được đề xuất là Phát triển phần mềm hướng đối tượng, được hướng dẫn bởi các bài kiểm tra .


1

API đầu tiên

Các kỹ sư của cả hai đội nên làm việc cùng nhau trên API giữa front-end và back-end. Sau đó, cả hai đội có thể bắt đầu làm việc dựa trên API được thiết kế. Điều này có lợi thế là một nhóm đầu cuối khác cũng có thể bắt đầu công việc (có thể là thiết bị di động, sau máy khách web) bên cạnh lợi thế rõ ràng là các nhóm có thể bắt đầu làm việc song song.

Kết hợp với một cách tiếp cận lặp đi lặp lại và sẽ giống như thế này:

  1. Thiết kế một API đơn giản
  2. Cả hai nhóm phát triển và thử nghiệm dựa trên API
  3. Bài kiểm tra tích hợp
  4. Hiển thị cho khách hàng và nhận phản hồi.
  5. Tăng cường API và lặp lại.

0

Bắt đầu với frontend, nhưng trước tiên, tại sao họ không thể tìm thấy một ứng dụng đã tồn tại? Điều này sẽ cung cấp một số cái nhìn sâu sắc hơn về dự án này. Họ có một số yêu cầu độc đáo hay họ nghĩ bạn có thể xây dựng rẻ hơn?

Nắm bắt đầy đủ các kỳ vọng bảo mật của họ và những gì pháp luật yêu cầu. Không chắc đây là loại trường nào, nhưng thông tin sinh viên thường yêu cầu bảo mật.

Nếu các sinh viên tiềm năng đang nhập dữ liệu trên một trang web, thiết kế đồ họa sẽ là một vấn đề.

Dựa trên yêu cầu của họ, vẽ mock up của mặt trước. Nếu bạn nghĩ rằng gui không thẳng tiến, bạn có thể phải làm một cái gì đó có chức năng, để họ có thể thấy nó hoạt động. Họ có thể xem đăng ký dưới dạng một số loại 'thuật sĩ' phân nhánh theo các hướng khác nhau dựa trên mục nhập dữ liệu.

Sau đó, bạn có thể bắt đầu nhận thông tin vào cơ sở dữ liệu.


1
Vấn đề khi bắt đầu với giao diện người dùng (dựa trên kinh nghiệm) là khi bạn quên một số chức năng, nó có thể gây rối cho mặt sau của bạn và có thể khiến bạn phải loanh quanh tìm cách sửa nó
drexsien

1
@andsien - bạn đang nói về thiết kế hoặc xây dựng? Tôi sẽ không bắt đầu xây dựng một mặt trước mà không thiết kế phụ trợ trước.
JeffO

ops lỗi của tôi tôi đang nghĩ đến việc xây dựng ... cảm ơn vì jeff đó.
drexsien

0

Có tôi nhận ra OP đã hỏi một lúc trước. Bắt đầu ở mặt sau nhưng MOCK UP mặt trước để cho phép người dùng thấy những gì bạn hình dung. Mặt trước, đối với tất cả nó là giá trị, chỉ là tiếng chuông và còi. Mặt sau là nơi chứa tiền, và một khi bạn đã có tiền, FE chỉ là nước thịt.


Đáng buồn thay, đó là những gì khách hàng muốn, điển hình, nhưng tôi nghĩ hành vi đó nên được khuyến khích. Đừng để chúng bị treo lên trên hình ảnh và gắn bó với vẻ ngoài nguyên mẫu của bạn cho đến khi họ có thể xác minh họ đang có hành vi cơ bản mà họ muốn. Khách hàng thường không thể tách kẹo mắt khỏi tính năng hữu ích và họ sẽ khiến bạn lãng phí rất nhiều thời gian vào những thứ ít quan trọng hơn chỉ để đổ lỗi cho bạn khi ứng dụng không thành công trong thời gian dài.
Erik Reppen

@ErikReppen Tôi đã có trải nghiệm đó nhiều lần - Tôi muốn cho khách hàng thấy "người dùng sẽ nhập dữ liệu vào trường văn bản" và khách hàng thấy "trường biểu mẫu sẽ rộng chính xác 400 pixel và trang sẽ có màu xanh nhạt nền tảng với văn bản Arial 11pt ... "Nhưng tôi vẫn nghĩ rằng tốt hơn là không bao giờ giới thiệu một giao diện người dùng. Mặt khác, có thể xây dựng toàn bộ hệ thống mâu thuẫn với một số giả định không có căn cứ trong trường hợp sử dụng chính của họ.
octern

Bạn có thể demo một giao diện người dùng nhưng giữ cho nó đơn giản và đơn giản. Làm cho họ tránh xa sự ngu ngốc chính xác của photoshop trừ khi đó là cách họ yêu cầu nó được bán cho họ. Và đó chính là vấn đề. Đó là những gì họ đã mong đợi nhưng họ thường không quá ngu ngốc khi ưu tiên các pixel từ "thực sự khiến khách hàng của chúng tôi làm những gì chúng tôi muốn họ làm."
Erik Reppen

errr, đó không phải là lý do tại sao chúng ta có CSS? (mặc dù tôi làm cảm thấy đau đớn của bạn). Tôi luôn luôn & cố tình có một FE xấu xí, nhưng đầy đủ chức năng và làm cho rõ ràng rằng chúng ta đang thảo luận về Các trường hợp sử dụng, quy trình làm việc ... & có thể làm đẹp nó sau. (nhưng câu trả lời đúng là yêu
cầu-

0

Mở rộng về nhận xét của tôi:

Đầu tiên thu thập các yêu cầu, sau đó biến chúng thành Use Case & design.

Đầu tiên là một định nghĩa cơ sở dữ liệu chi tiết. Tôi không quan tâm nếu khách hàng không hoàn toàn mò mẫm nó, tôi buộc họ ngồi xuống và nhìn vào nó - và ký vào đó (có thể sau đó buộc phải nhận ra rằng một khi những kẻ am hiểu công nghệ hơn của họ phải làm như vậy ), trước khi tiến hành.

Làm thế nào bạn có thể bắt đầu với FE, mà không có BE? FE để làm gì ??? Xác định cơ sở dữ liệu của bạn !! Đó là những gì FE thao túng.

Ok, sẽ có vấn đề & chỉnh sau, và tôi làm đồng ý rằng nó là tốt để có được một đơn giản, mẫu, giao diện ở phía trước của khách hàng càng sớm càng tốt, vì đó mũi đặc biệt của tảng băng trôi là những gì hầu hết hầu hết hiểu.

Tuy nhiên, tôi 1) nhấn mạnh rằng đây chỉ là một sự giả tạo thô bạo, để thảo luận về cá heo và 2) cố tình làm cho nó xấu xí, nhưng có chức năng , để những ai không hiểu có thể nitlog & bảo tôi làm cho hộp đầu vào chính xác 400px rộng & nền màu xanh nhạt.

Tôi đã nói rằng hầu hết các câu trả lời ở đây (và tôi đã theo dõi họ) có xu hướng tập trung quá nhiều vào khách hàng, nhưng, từ quan điểm hoàn toàn s / w, tôi cho rằng bạn không thể thiết kế FE để điều khiển BE mà không cần trước thiết kế BE.


"Bạn không thể thiết kế FE để điều khiển BE mà không thiết kế BE trước". Ồ vâng, bạn có thể - đó gọi là "nguyên mẫu". Nó có thể là một bước đầu tiên có giá trị khi bắt đầu một hệ thống mới.
sleske

nó là nguyên mẫu gì? Không có chiến tranh lửa, nó chỉ xuất hiện trong đầu tôi. Tôi không hiểu nguyên mẫu là gì, nhưng có lẽ vì tôi đến từ một lĩnh vực khác, tôi chỉ luôn thấy nó là: nhận được các yêu cầu, biến chúng thành các trường hợp sử dụng & thiết kế. Nếu bạn không có d / b đóng đinh thì bạn sẽ thực hiện nhiều việc không cần thiết, vì vậy hãy sắp xếp nó trước, sau đó tìm ra cách thao tác với nó (theo yêu cầu). YMMV ... tiếp tục ...
Mawg 18/03/2015

Có thể nói không phải là đen trắng, nếu không thì câu hỏi sẽ không được hỏi, nhưng trước tiên, luôn luôn là IMO. Trên thực tế, tôi đang làm một cách như vậy ngay bây giờ cho những người chỉ có cảm giác mờ nhạt mơ hồ thay cho yêu cầu (tôi không bao giờ nên chạm vào chúng, nhưng đó là một câu chuyện hoàn toàn mới :-)
Mawg 18/03/2015

1
Kinh nghiệm của tôi là yêu cầu của người dùng nên được ưu tiên và kiến ​​trúc nên tuân theo. Nhưng tất nhiên điều này phụ thuộc vào các chi tiết kỹ thuật, một số điều thực sự khó thay đổi sau này. Ít nhất điều quan trọng là phải nhận thức được sự đánh đổi.
sleske

Tôi nghi ngờ rằng chúng ta có thể nói điều tương tự theo những cách khác nhau (+1)
Mawg 18/03/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.