Tôi thấy một số vấn đề nghiêm trọng với câu hỏi này. Hãy bắt đầu.
Làm thế nào để ngừng lãng phí thời gian thiết kế kiến trúc
Câu hỏi này khá tải. Ngoài ra, bạn không thiết kế kiến trúc. Bạn kiến trúc sư . Kiến trúc và thiết kế là các hoạt động bổ sung và liên quan, nhưng không giống nhau, ngay cả khi chúng có thể trùng nhau.
Tương tự, theo cách tương tự, có thể lãng phí thời gian để thực hiện kiến trúc (bằng cách kiến trúc quá mức), bạn cũng có thể lãng phí thời gian để thiết kế quá mức và mã hóa quá mức (bằng cách mã hóa công cụ theo cách phức tạp hơn nhiều so với cần thiết hoặc do không thành công mã cho những thứ được yêu cầu.)
Kiến trúc phù hợp nhằm ngăn chặn sự lãng phí đó trong mã hóa. Nó làm như vậy bằng cách giới hạn, thu hẹp và ghi lại các cách có thể mà một hệ thống phức tạp sẽ được 1) thiết kế, 2) mã hóa và kiểm tra nó, 3) được giao, 4) duy trì, 5) phục hồi từ thất bại và 6) cuối cùng ngừng hoạt động.
Kinh nghiệm của tôi là những người chỉ thích mã hóa, họ chỉ viết mã mà không nghĩ đến việc hệ thống vận hành và duy trì lâu dài như thế nào, chuyển sang khoai tây nóng tiếp theo để lại một linh hồn tội nghiệp để duy trì một con golem xấu xí.
Nhưng tôi lạc đề...
Đây là điều: Đối với các hệ thống đủ đơn giản, kiến trúc là hiển nhiên và xuất phát từ thực tiễn thiết kế và thực hiện âm thanh.
Nó chỉ dành cho các hệ thống lớn có số lượng người hoặc phần mềm cấp hệ thống khá lớn, những thứ rất phức tạp đòi hỏi kiến trúc rõ ràng.
Gần đây tôi đã tốt nghiệp đại học và bắt đầu làm lập trình viên. Tôi không thấy khó giải quyết các vấn đề "kỹ thuật" hoặc gỡ lỗi, những điều mà tôi muốn nói có 1 giải pháp.
Đó là mức tối thiểu cần thiết cho nghề này và tôi rất vui vì bạn không gặp vấn đề gì khi làm chúng (tôi sẽ lo lắng nếu bạn làm vậy).
Nhưng dường như có một loại vấn đề không có một giải pháp
Đó là bánh mì và bơ trong nghề nghiệp của chúng tôi, loại vấn đề mà các nhà tuyển dụng sẵn sàng trả mức lương cao hơn (trung bình) của chúng tôi.
Như một vấn đề thực tế, các vấn đề đáng giải quyết là những vấn đề có thể có nhiều hơn một giải pháp. Vấn đề của thế giới thực, họ là như thế. Và thế giới đòi hỏi chuyên môn của chúng tôi, với tư cách là nhà phát triển phần mềm, phải đưa ra sự đánh đổi chấp nhận được.
- những thứ như kiến trúc phần mềm.
Kiến trúc của sự vật là một đặc tính không thể tránh khỏi của hệ thống phức tạp, có thể là ảo / phần mềm hoặc trong thế giới cụ thể. Mỗi hệ thống hoạt động, có đầu vào và tạo đầu ra, nó sẽ phức tạp và sẽ có kiến trúc.
Khi chúng tôi phát triển phần mềm cho các hệ thống như vậy (hệ thống ngân hàng, hệ thống giám sát quyền lực, hệ thống bán vé, v.v.), chúng tôi hướng đến việc sản xuất một phần mềm bắt chước các chức năng và yêu cầu của hệ thống đó.
Chúng tôi chỉ không thể đơn giản là cánh nó và mã nó theo phong cách cao bồi. Chúng tôi cần một số loại kiến trúc. Điều này đặc biệt đúng nếu dự án cần hàng tá kỹ sư, nếu không muốn nói là nhiều hơn.
Những điều này làm tôi bối rối và khiến tôi đau khổ vô cùng.
Được thôi. Nó không phải là một chủ đề dễ dàng để học hoặc dạy, không phải không có nhiều thực hành.
Tôi dành hàng giờ để cố gắng quyết định làm thế nào để "kiến trúc sư" các chương trình và hệ thống của tôi. Ví dụ: tôi chia logic này thành 1 hoặc 2 lớp, làm cách nào để đặt tên cho các lớp, tôi nên đặt riêng tư hoặc công khai, v.v. Những loại câu hỏi này chiếm quá nhiều thời gian của tôi và nó làm tôi rất thất vọng. Tôi chỉ muốn tạo chương trình, kiến trúc bị nguyền rủa.
Thật không may, đó không phải là kiến trúc phần mềm.
Nó thậm chí không phải là thiết kế, mà chỉ là mã hóa. Tôi sẽ cung cấp một số gợi ý ở dưới cùng của bài viết này.
Làm thế nào tôi có thể nhanh chóng vượt qua giai đoạn kiến trúc và vào giai đoạn mã hóa và gỡ lỗi mà tôi thích ?
Tôi đang gặp khó khăn trong việc tìm cách trả lời điều này, vì nó khá xúc động.
Chúng ta đang cố gắng để hoàn thành một công việc, hay chúng ta đang cố gắng chỉ để tận hưởng thực hành? Thật tuyệt vời khi cả hai là một và giống nhau, nhưng trong cuộc sống thực, nhiều lần họ không như vậy.
Thật tuyệt khi làm những việc chúng ta thích, nhưng trong một nghề phức tạp như của chúng ta, chỉ tập trung vào những gì chúng ta thích, điều đó không dẫn đến việc có một sự nghiệp hiệu quả.
Bạn sẽ không tiến bộ, bạn sẽ không trưởng thành hoặc tiếp thu kiến thức mới.
Có câu nói này trong Quân đội, "hãy nắm lấy mút."
Những cụm từ khác có lời khuyên tương tự. "Nếu nó không hút, nó không đáng" và yêu thích của tôi, "Nếu nó hút (và nó rất quan trọng), hãy làm điều đó cho đến khi nó ngừng hút."
Khuyến nghị của tôi:
Dường như với tôi rằng bạn vẫn đang đấu tranh để hiểu sự khác biệt giữa
mã hóa (cách mã hóa các lớp, mô-đun của bạn hoặc những gì không, quy ước đặt tên, khả năng hiển thị truy cập, phạm vi, v.v.),
thiết kế (có bao nhiêu tầng, front-end / back-end / db, mỗi giao tiếp như thế nào, đi đâu) và các quyết định kiến trúc ngầm xuất phát từ thiết kế các hệ thống đơn giản,
kiến trúc (như được tìm thấy trong các hệ thống phức tạp đòi hỏi hàng ngàn, nếu không nói là hàng trăm nghìn giờ.)
Vì vậy, tôi sẽ đề nghị bạn đi sâu vào chủ đề đầu tiên (mã hóa) để đưa nó lên cấp độ tiếp theo.
Mã sạch
" Mã sạch" của Robert "Chú Bob" Martin là một nơi tốt để bắt đầu.
Phần mềm kết dính
Ngoài ra, tôi khuyên bạn nên làm quen với một số liệu phần mềm hướng đối tượng cụ thể được gọi là LCOM hay đúng hơn là LCOM4.
Nó có thể trở nên toán học hơn và nó không phải là chống đạn, nhưng mục tiêu của bạn là hiểu và phát hiện theo kinh nghiệm (hoặc bóng mắt nếu bạn muốn) nếu một lớp được gắn kết hoặc nếu nó thiếu sự gắn kết.
http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
https://www.computing.dcu.ie/~renaat/ca421/LCOM.html
Nguyên tắc phần mềm
Điều này liên quan chặt chẽ với "Nguyên tắc trách nhiệm duy nhất" hoặc SRY mà tất cả chúng ta nên làm quen. SRY là một trong 5 "RẮN" mà tất cả chúng ta cần phải làm quen nếu chúng ta trở nên thành thạo về mã hóa.
Khi chúng ta chuyển qua các nguyên tắc RẮN, chúng ta cũng cần làm quen với các nguyên tắc "GRASP" , điều chỉnh, hoặc hướng dẫn cách chúng ta viết mã các lớp.
Sách bổ sung
Cuối cùng, tôi cũng đề nghị như sau:
"Tái cấu trúc" của Martin Fowler và Ken Beck sẽ là cuốn sách tiếp theo tôi đọc trong danh sách này.
"Thiết kế theo hợp đồng, ví dụ" của Richard Mitchell, Jim McKim và Bertrand Meyer (sau này của danh tiếng của Eiffel.) Cuốn sách này không còn xuất bản, nhưng bạn có thể tìm thấy các bản sao được sử dụng giá rẻ ở Amazon.
Với điều này, bạn sẽ nắm bắt tốt cách bắt đầu mã hóa và thiết kế, và với thực tế, để di chuyển và làm chủ (hoặc ít nhất là nắm bắt) kiến trúc phần mềm.
Tôi chắc chắn sẽ có những chuyên gia khác sẽ thêm, bớt hoặc phản đối những đề xuất này. Họ sẽ đưa ra các đề xuất khác, có thể được xác thực bằng kinh nghiệm của chính họ.
Tất cả những gì tôi có thể nói là thế này - không có phím tắt.
Tất cả tốt nhất.