Có một thuật ngữ cho sự phức tạp quá mức của OOP?


18

Một hoặc hai năm trước tôi đã thấy một bài viết xuất sắc về OOP (Java), trong đó cho thấy sự tiến triển của một trình ghi nhật ký cụ thể đơn giản gồm hai hoặc ba dòng mã, và một quá trình suy nghĩ quá mức về mặt lý thuyết của nhà phát triển thiếu kinh nghiệm về cơ bản đã nói rằng , tôi nên nói thêm điều này trong trường hợp chúng ta muốn điều đó Đến cuối bài viết, bộ ghi chép đơn giản này là một đống rác khổng lồ mà nhà phát triển ban đầu khó có thể hiểu chính mình ...

Có một thuật ngữ chung cho loại biến chứng quá mức này? Bài báo đó (mà tôi rất mong muốn tôi có thể tìm lại) cho thấy khái niệm tuyệt vời cho một trường hợp bị cô lập, nhưng tôi đã bắt gặp toàn bộ các dự án nơi các nhà phát triển đã tự lập trình thành một nút thắt bằng cách sử dụng quá mức các mẫu, khung, thư viện và các vấn đề khác. Theo cách riêng của mình, điều này là xấu (hoặc thậm chí tệ hơn) so với các ứng dụng spaghetti VB6 cũ mà chúng tôi thừa kế để thay thế.

Điều tôi thực sự tìm kiếm là đưa vấn đề này lên khi phỏng vấn. Tôi muốn biết liệu ai đó có nhận thức và ý thức được việc rơi vào tình trạng này dễ dàng như thế nào khi thiếu kiến ​​trúc / quy hoạch trước (và cảm thấy liệu họ có cân bằng chính xác không), nhưng đó không thực sự là một điều gì đó Tôi có thể tìm thấy rất nhiều thông tin trên.


25
Vâng, nó được gọi là OOP.
vườn

Câu trả lời:


28

Thuật ngữ thường xuyên nhất tôi nghe để mô tả các thiết kế như vậy là quá mức . Các ý nghĩa gốc của từ đó, tuy nhiên, không liên quan đến phát triển phần mềm, và bên ngoài phát triển phần mềm nó có lẽ không phải là một giai điệu xấu như vậy.

Ở cấp độ tổng quát hơn, Joel Spolsky đã đặt cho các nhà thiết kế những người thiết kế kiến ​​trúc quá mức với cái tên " phi hành gia kiến ​​trúc ".

Tuy nhiên, đặc biệt đối với một cuộc phỏng vấn, tôi nghĩ điều quan trọng hơn là phải biết những gì ngược lại, chỉ đưa những thứ vào một thiết kế thực sự cần thiết và quên đi cách tiếp cận "chỉ trong trường hợp" không lành mạnh - đây được gọi là nguyên tắc YAGNI .


Cảm ơn. Tôi là người ủng hộ lớn của YAGNI, không chắc có điều gì ngược lại không.
jleach

Tôi sẽ nhấn mạnh rằng yagni là về "những gì thực sự cần thiết ngay bây giờ". Bạn vẫn nên để mọi thứ ra ngoài, ngay cả khi nó được biết nó sẽ cần thiết sau này, miễn là nó không cần thiết ngay bây giờ.
Bent

7
@Bent Tôi cũng nhấn mạnh rằng điều đó không có nghĩa là hoàn toàn bỏ qua những điều / thay đổi mà bạn biết chắc chắn sẽ xảy ra trong tính năng gần ... biết cách phần mềm sẽ được mở rộng sau khi có thể hướng dẫn bạn viết mã sẽ nhiều hơn dễ dàng tái cấu trúc dọc theo các trục thay đổi.
Bakuriu

Tôi đã sử dụng thuật ngữ "kỹ thuật kém" trái ngược với "kỹ thuật quá mức". Tôi đã làm việc với những người thích thêm tất cả các loại tính năng và tiện ích mở rộng "chỉ trong trường hợp" không có trường hợp sử dụng rõ ràng. Nếu bạn không hiểu vấn đề bạn đang cố gắng giải quyết thì đó chỉ là kỹ thuật kém.
Josh Johnson

4

Vâng, áp đảo là thuật ngữ đơn giản nhất để mô tả điều này. Tôi đã thấy các thiết kế quá phức tạp, phức tạp không cần thiết nhiều lần hơn tôi có thể nhớ trong những năm qua. Nhiều năm trước, khi tham gia khóa học Microsoft GWBasic, người hướng dẫn đã liên tục thực hiện phương pháp KISS (Giữ cho nó đơn giản ngu ngốc). Điều này đúng như ngày hôm nay.

Vì vậy, tôi luôn ghi nhớ KISS và luôn thiết kế với các Nguyên tắc RẮN trong tâm trí. Nhưng với điều đó đã được nói, vẫn có thể áp đảo một thiết kế với các nguyên tắc RẮN được xem xét đầy đủ. Bạn phải cân bằng một cách tiếp cận thông thường, thực dụng với mong muốn được thuần khiết và tuân thủ các nguyên tắc OOP thường được chấp nhận. Nếu có đủ thời gian và nếu bạn thích tạo ra các giải pháp phức tạp, bạn có thể đi xuống con đường thiết kế một động cơ cho ván trượt vì bạn nghĩ rằng cuối cùng nó sẽ được biến thành một chiếc xe hơi. May mắn thay, tôi đã đủ kỷ luật để không làm điều này trong những năm qua, nhưng tôi đã thấy nó nhiều lần.

Vì vậy, để tóm tắt, để ngăn chặn quá mức mã hóa:

1) KISS (Giữ cho nó đơn giản ngu ngốc)

2) Thực hiện theo các nguyên tắc RẮN với tính thực tiễn trong tâm trí.

3) Đừng cố gắng thiết kế cho mọi tình huống. Và đôi khi nhỏ, trừu tượng rò rỉ không phải là những điều khủng khiếp, nếu chúng bị cô lập, có chủ ý và nếu nỗ lực ngăn chặn chúng vượt xa những tác động của việc giữ chúng.

4) Xem xét việc thực hiện các giải pháp trong khi thiết kế chúng. Bạn không thể chỉ nói, "ồ, đó là một chi tiết triển khai" và cho rằng thiết kế của bạn là thực tế. Tôi đã từng làm việc với một kiến ​​trúc sư đã làm việc này thường xuyên, và than ôi, các thiết kế của anh ta không bao giờ hoạt động, và kết quả là, tôi không làm việc ở đó nữa.

5) Mã như thể bạn là người sẽ duy trì nó.


-3

Vì vậy, bạn sẽ có cuộc phỏng vấn này và bạn có ý định lừa ứng viên hiển thị những gì anh ta biết về công nghệ phần mềm và sau đó bạn sẽ nói "Nah, có lẽ bạn muốn áp dụng tất cả những gì bạn biết trong bài tập đầu tiên của mình, hãy chuyển ngay bây giờ , bạn mạ vàng quá kỹ thuật tạo ra giá trị phi kinh doanh! Shoo! "

Tôi nghĩ sẽ an toàn hơn nếu trình bày một ví dụ cụ thể và loại bỏ các ưu và nhược điểm của việc áp dụng các mẫu nhất định. Hơn bạn sẽ được mời chào cho các câu trả lời như "Nó phụ thuộc, bạn có muốn nó nhanh không? Đây có phải là tất cả không? Vấn đề phức tạp đến mức nào? Những mô hình nào đã được áp dụng?" và bạn có thể tự học một cái gì đó. Điều này cũng sẽ cho phép ứng viên chứng minh ý thức về bối cảnh của mình trong khi đó sẽ là một câu hỏi cởi mở hơn. Chờ đợi và muốn có một câu trả lời cụ thể sẽ giúp bạn có được mối quan tâm lớn nhất giống như bạn. Nếu bạn không nhận được câu trả lời của mình, đó có thể là ứng cử viên chỉ coi đó là một người không có trí tuệ.


4
Tôi xin lỗi, nhưng tôi thực sự chỉ tự hỏi liệu có một thuật ngữ cho nó. Tôi đã không tìm kiếm lời khuyên về cách tiến hành một cuộc phỏng vấn (hoặc để câu hỏi của tôi được nhận thức theo bất kỳ cách nào về cách tôi sẽ tiến hành một cuộc phỏng vấn). Cảm ơn sự quan tâm của bạn mặc dù ...
jleach

1
Vâng, bạn đã viết đoạn cuối đó trong câu hỏi của bạn mà khó có thể bỏ qua và khá là một tuyên bố. Nếu bạn không đánh giá cao phản hồi về một số phần nhất định trong văn bản của bạn, bạn có thể muốn hạn chế hơn trong những gì bạn đặt xuống.
Martin Maat
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.