Hard code là gì

     

Đây là bài chia sẻ được dịch từ nội dung bài viết của người sáng tác Anna Monus (https://www.hongkiat.com/blog/code-optimization-coding-antipatterns/). Trong bài share này, có một số chỗ được bản thân sửa đổi, bổ sung để đến phù hợp.Bạn đang xem: Hard code là gì


*

Thiết kế phong cách xây dựng của một website hay 1 ứng dụng, hoặc cấu hình thiết lập một coding workflow công dụng thường xuyên khiến bọn họ phải đối mặt với những sự việc nan giải, hay xuyên chạm mặt phải. Chúng ta không quan trọng phải xử lý những vấn đề xây đắp này từ con số 0, vị ta có thể tái sử dụng được những giải pháp ở cấp độ kiến trúc cũng tương tự những đoạn code trên tầng vi mô.

Bạn đang xem: Hard code là gì

Design patterns là trong số những giải pháp tái sử dụng trong một số trong những trường hợp độc nhất định, rất có thể hữu ích để giải quyết những sự cầm cố thường xảy ra và có thể giúp bọn họ tối ưu phần đông đoạn codes của mình.


*

Mặc dù Design patterns là phương tiện tuyệt đối để nâng cấp quy trình phát triển của bọn chúng ta bằng cách sử dụng những bí quyết đã được kiểm triệu chứng tốt. Tuy nhiên, nhiều lúc những design patterns kia cũng mang lại những hậu quả tiêu cực đối với chúng. Lúc này, bọn chúng được call là đa số Antipatterns.

Antipatterns là gì?

Thuật ngữ "antipatterns" mở ra lần thứ nhất trong một cuốn sách sở hữu tên AntiPatterns vào thời điểm năm 1998.

Nó đề cập mang đến những chiến thuật tái sử dụng mà ban đầu trông dường như hữu ích, nhưng lại dần sau đó, chúng lại trở nên vô ích hơn là lợi.

Điều này hoàn toàn có thể xảy ra vì nhiều lý do khác nhau, ví như nếu bọn họ không áp dụng những patterns đúng bối cảnh, mua đặt, tuyệt thời gian cân xứng (các giải pháp có tác dụng trong thừa khứ không hẳn lúc như thế nào cũng vận động đúng ở thời gian hiện tại), hoặc giữa những trường đúng theo xấu hơn là toàn thể mô hình đã không tốt ngay tự khi bắt đầu rồi (>""Antipatterns cũng thường được call là những quy mô thất bại. Mặc dù nhiên, tin vui là chúng ta hoàn toàn hoàn toàn có thể nhận biết và nên tránh chúng.

Trong nội dung bài viết này, tôi sẽ reviews qua cho chúng ta 10 antipatterns phổ biến hay gặp mặt phải trong quá trình phát triển web. (Chú ý rằng gần như antipatterns tôi liệt kê sau đây không hoàn toàn giống với hầu như gì chúng ta có thể tìm thấy trong cuốn sách tôi vẫn đề cập ngơi nghỉ trên).

10 Antipatterns phổ biến

1. Premature Optimization (Tối ưu sớm)

Thời điểm tốt là một trong những yếu tố quan trọng đặc biệt trong bài toán tối ưu hóa các đoạn codes. Nếu chúng ta để ý đến những hiệu quả nhỏ tuổi và tối ưu hóa chúng quá sớm trong quá trình phát triển, trước khi chúng ta biết đúng mực những điều cần làm, rất bao gồm thể bọn họ sẽ thuận lợi mắc phải antipattern "Tối ưu sớm".


*

Theo câu nói danh tiếng của Donald Knuth: "Tối ưu mau chóng là nền tảng gốc rễ của số đông điều ác", nó rất có thể hơi bị cường điệu hóa lên một chút, nhưng có thể cho thấy rằng những sự việc nghiêm trọng về về tối ưu hóa sớm hoàn toàn có thể gây ra vào tương lai như thế nào.

Nếu bọn họ tối ưu hóa hiệu năng trước lúc xây dựng một bản vẽ xây dựng hiệu quả, nó hoàn toàn có thể gây ra codes trở buộc phải khó đọc, việc debug và gia hạn khó khăn hơn, cùng những đoạn codes quá bị đẩy vào mã nguồn của bọn chúng ta.

Một ý tưởng giỏi để ngăn ngừa việc tối ưu sớm là tuân theo cơ chế lập trình YAGNI (You Aren’t Gonna Need It), nó khuyên họ nên vâng lệnh "cần cái gì thì thêm chiếc đó", chứ đừng tất cả mà "chắc là trong tương lai sẽ nên đến".

2.Reinventing the Wheel

Reinventing the wheel - Tái phát minh bánh xe hoàn toàn có thể hiểu nôm na là chiếc bánh xe nó sẽ được phát minh sáng tạo từ rất mất thời gian rồi, và nó cũng tốt nhất rồi, đừng có mất thời hạn đi sáng tạo lại nó nữa

*

Reinventing the wheel không chỉ là gây ra lãng phí thời gian, mà còn những chiến thuật tùy chọn, đặc biệt là những công dụng cơ phiên bản hiếm khi xuất sắc hơn rất nhiều chuẩn mà nhiều nhà cách tân và phát triển hay người tiêu dùng đã demo nghiệm siêu kĩ rồi.

3. Dependency Hell

Trái ngược cùng với "reinventing the wheel", họ có một antipattern không giống cũng phổ cập đó là "dependency hell".

Nếu, thay vì cặm cụi viết đều thứ trường đoản cú đầu, bọn họ lại quá lạm dụng quá việc áp dụng thư viện mặt thứ ba dựa vào những phiên bản cụ thể của các thư viện khác. Điều này sẽ khiến bạn dễ dãi phải đương đầu với những tình huống khó cai quản mỗi khi muốn cập nhật thư viện, vì đôi khi những dependencies này sau khi cập nhật lại không tương hợp với các cái khác.


*

Dependency hell có thể được giải quyết bằng phương pháp sử dụng các package managers tất cả khả năng cập nhật thông minh những dependencies để bọn chúng vẫn rất có thể tương ưng ý được cùng với nhau. Nếu bọn họ vấp phải không ít vấn đề, bài toán refactoring cũng có thể là một phát minh hay.

4. Spaghetti Code

Kết quả của một thi công kiến trúc kém là 1 trong những đống codes ông xã chất lên nhau giống như một chén bát mì Spaghetti vậy, vô cùng rối rắm và phức tạp. Phần nhiều Spaghetti codes rất cực nhọc để gọi và hầu hết khó hoàn toàn có thể hiểu được nó hoạt động như cố kỉnh nào (>"Don"t Repeat Yourself (DRY), thay vì tạo ra phương án giải quyết vấn đề, bạn lại đi cóp nhặt từng mẩu codes hết địa điểm này mang lại chỗ khác, tiếp đến chỉnh sửa lại nó cho phù hợp với ngữ cảnh.

Xem thêm: Yến Mạch Có Ăn Yến Mạch Sống Với Sữa Chua, Ăn Yến Mạch Đúng Cách


Kết quả của phương thức này là bọn họ có những đoạn codes bị lặp đi lặp lại, vì phần nhiều chúng chỉ khác biệt ở một vài điểm nhỏ.

Copy & paste programming không chỉ có thấy ở đa số lập trình viên mới, hơn nữa ở những lập trình viên đã gồm kinh nghiệm, cũng chính vì nhiều người trong các họ có xu hướng sử dụng phần đông đoạn codes đã có viết sẵn, kiểm soát kĩ lưỡng của mình cho gần như tác vụ cầm thể, điều này dễ dàng gặp phải sự tái diễn không ước ao muốn.

7. Cargo-Cult Programming

Cái thương hiệu “cargo-cult programming” được khởi đầu từ một hiện tại tượng dân tộc bản địa học sở hữu tên "cargo cult". Cargo cults xuất hiện ở nam giới Thái tỉnh bình dương sau ráng chiến thứ II, khi tiếp xúc cùng với nền thanh tao tiên tiến, người phiên bản địa cứ nghĩ rằng các thành phầm như Coca-Cola, TVs, tuyệt tủ lạnh trong số những tàu chở hàng với lên đảo, đông đảo được tạo vì chưng những thế lực siêu nhiên, với họ có niềm tin rằng mỗi khi tiến hành những nghi lễ ma thuật giống như như phong tục của bạn phương Tây, đầy đủ thùng chất đầy sản phẩm & hàng hóa đó đã lại mở ra trở lại.


Antipattern này cũng có thể có những biểu lộ tương trường đoản cú như vậy. Ta thực hiện những frameworks, thư viện, giải pháp, hay những design patterns,...có lợi cho chúng ta, mà lại không đích thực hiểu trên sao chúng ta cần đề xuất dùng đến chúng tuyệt những technology đó hoạt động ra sao.

Cargo cult programming xẩy ra ở phần lớn lập trình viên ko có tài năng hoặc là lập trình viên new (hoặc là những người dân thiếu kĩ năng về mặt nào đó), họ xào nấu những mã nguồn từ chỗ này mang đến nơi khác trong áp dụng mà phần lớn ít hoặc không hiểu biết biết về ý nghĩa sâu sắc thật sự của chúng. Antipattern này không chỉ là tệ vì khiến cho ứng dụng của bọn họ bị "bơm căng phồng", nhưng còn có thể dễ dàng đưa phần nhiều lỗi mới vào mã mối cung cấp của chúng ta.

8. Lava Flow

Chúng ta nói đến "Lava flow" antipattern mọi khi cần nên xử lý những đoạn mã codes thừa hoặc có chất lượng thấp nhưng dường như không thể tách rời với ứng dụng, nhưng họ không hoàn toàn hiểu được bọn chúng có công dụng gì hoặc tác động của bọn chúng đến toàn thể ứng dụng như vậy nào. Vày vậy, việc thải trừ chúng là 1 trong những việc khôn xiết rủi ro.

Điều này liên tiếp xảy ra với phần lớn legacy codes, hoặc là lúc đoạn codes này được viết bởi những người dân khác (thường thiếu thốn tài liệu chủ yếu xác), hoặc là khi dự án được gửi từ quá trình development quý phái production vượt nhanh.

Cái tên của antipattern này miêu tả sự tương đương với dung nham núi lửa, ban sơ thì di chuyển nhanh, trôi chảy cực nhọc phòng ngừa, nhưng sau đó thì cứng lại và khó nhiều loại bỏ.


Trên lý thuyết, ta hoàn toàn có thể loại vứt lava flows sau khi đã kiểm tra cùng refactoring kĩ lưỡng, tuy nhiên trong thực tế, việc triển khai nó ngoài ra rất trở ngại hoặc thậm chí là ko thể. Bởi vì lava flows thường xuyên có giá cả thực hiện cao, nên giỏi hơn hết để ngăn ngừa chúng là ta tùy chỉnh được phong cách xây dựng thiết kế giỏi và một workflow có tác dụng việc hiệu quả ngay từ thuở đầu ^_^.

9. Hard Coding

"Hard coding" là 1 antipattern được nhắc đến rất nhiều trong số những cuốn sách về cải cách và phát triển web ngay lập tức ở tiếng nói đầu. Hard coding xảy ra khi chúng ta lưu trữ những thông số kỹ thuật hoặc là dữ liệu đầu vào (ví dụ như những đường dẫn file, remote host name hay như là một đoạn văn phiên bản ở ngôn ngữ ví dụ nào đó) làm việc trong mã nguồn áp dụng thay bởi lưu chúng ở giữa những file cấu hình, database, user đầu vào hay từ 1 external api như thế nào đó.


Vấn đề gặp mặt phải ở đó là những hard code đó sẽ chỉ hoạt động đúng đắn trong một môi trường thiên nhiên nhất định làm sao đó, và khi mà điều kiện thay đổi, bọn chúng sẽ không hề hoạt động đúng chuẩn nữa.

Ví dụ như, ở môi trường thiên nhiên development, bạn áp dụng một s3-bucket mang tên s3-foo-development, tuy nhiên ở môi trường thiên nhiên production các bạn lại áp dụng một s3-bucket khác có tên s3-foo-production, hãy thử tưởng tượng, phần lớn s3 access key đã được fix cứng sống trong code rồi thì làm sao bạn cũng có thể sử dụng 2 s3-bucket khác nhau trên 2 môi trường không giống nhau như vậy. Cách giải quyết và xử lý ở đó là bạn đề xuất lưu đều s3 access key đó ở trong biến môi trường cho từng môi trường thiên nhiên cụ thể.

10. Soft Coding

Nếu như cứ nỗ lực quá mức nhằm tránh hard coding, chúng ta có thể vô tình va trán với 1 antipattern ngược lại với nó gọi là "soft coding".

Trong soft coding, họ đưa phần đa thứ nhưng đáng ra nó buộc phải được để tại trong mã nguồn ứng dụng ra các tài nguyên bên ngoài, ví dụ chúng ta lưu trữ business lô ghích trong database ==". Vì sao phổ đổi mới nhất mà họ thường làm thế, là do lo ngại những business rules sẽ chuyển đổi trong tương lai, và lúc này sẽ phải viết lại codes.

Trong phần đông trường hợp cực đoan, một áp dụng với hồ hết soft coded hoàn toàn có thể trở yêu cầu quá trừu tượng và phức hợp đến mức gần như là không thể hiểu được nó (đặc biệt là đối với những thành viên bắt đầu vào team), cùng cực kỳ cạnh tranh để debug cùng bảo trì.

Xem thêm: Sấy Khô Điện Thoại Bao Nhiêu Tiền, Sửa Điện Thoại Vô Nước Tại Tphcm

Kết luận

Bài chia sẻ trên đã reviews qua rất nhiều Antipatterns mà họ thường mắc phải trong vượt trình phát triển ứng dụng cũng như phương pháp để khắc phục chúng. Hi vọng bạn hiểu sẽ chăm chú để tránh phạm phải chúng vào sự nghiệp lập trình của bản thân mình nhé ^_^.