Là phân rã chức năng thực sự là một antipotype?


9

Trong khi tôi đang đọc Các mô hình chống tệ nhất mà bạn đã gặp , tôi đã nhấp vào liên kết trong bài đăng này để truy cập vào trang web về các mô hình chống.

Và trang http://sourcemaking.com/antipotypes/feftal-decysis khiến tôi băn khoăn.

Làm thế nào xấu chống mẫu này, và nó có phải là một mô hình chống không? Bởi vì, mặc dù hiện tại tôi đang làm phần lớn lập trình OOP, tôi vẫn cảm thấy miễn cưỡng với các ngôn ngữ OOP thuần túy như Java và cả các thực tiễn thiết kế mà chúng mang lại. Và tôi đoán, tôi vẫn có một số đặc điểm của lập trình chức năng trong khi tôi viết mã.

Và điều này đặt ra một câu hỏi, liệu tôi có đang làm sai khi gắn bó với phong cách chức năng OOP + hay nó phổ biến trong công nghiệp và thực sự không tệ đến vậy.

Những gì tôi biết từ kinh nghiệm, là kiểu OOP + Chức năng không hoàn toàn tương thích với các nhà phát triển OOP thuần túy. Nhưng đồng thời, trong khi các nhà phát triển OOP gặp vấn đề với phát triển Chức năng OOP +, thì phản biện là các giải pháp OOP thường được thiết kế quá mức và quá khó sử dụng, và theo kinh nghiệm của tôi, thậm chí không dễ dàng hơn một chút, và thực tế đã giới thiệu một số điểm mù cho RẤT lỗi nghiêm trọng để che giấu.

Vì vậy, mặc dù tôi đã thảo luận với đồng nghiệp về những chủ đề này, tôi đã đi đến kết luận rằng không có cách nào thực sự hoàn hảo. Và tôi vẫn còn câu hỏi chưa được trả lời.

Vấn đề OOP cũng được củng cố bởi một liên kết từ một bài đăng khác trong cùng một chủ đề. Liên kết xem phong cách Java OOP http://chaosinmotion.com/blog/?p=622

Vì vậy, thái độ chung đối với việc trộn lập trình chức năng với OOP là gì? Và sự cân bằng mà một nhà phát triển nên cố gắng đạt được là gì?


1
Tiêu đề và nội dung câu hỏi của bạn đang hỏi một số câu hỏi có liên quan, nhưng hoàn toàn khác nhau, một số câu hỏi nghe có vẻ khoa trương. Tôi đang gặp khó khăn để tìm ra chính xác những gì bạn yêu cầu ở đây.
quả việt quất

Xin lỗi, tôi không phải là người bản ngữ và tôi đang gặp khó khăn khi nghĩ về một tiêu đề tốt hơn. Sửa lỗi được chào đón.
Coder

1
Câu hỏi rất rõ ràng. Đừng nghe blueberryfields.
jojo

5
Rõ ràng, đối với những người quá khích OOP, bất cứ điều gì ngoài tầm với của OOP đều là một "phản hạt". Trong thực tế, các antipotype tồi tệ nhất có thể là sự lạm dụng quá mức của chính OOP.
SK-logic

Câu trả lời:


8

Trước hết, lập trình chức năng hiện đang là điều mà tất cả những đứa trẻ tuyệt vời đang làm. Anti-Pattern đã nói về lập trình thủ tục thực sự (sẽ rõ ràng hơn nếu kỹ thuật này được gọi là "phân rã thủ tục" nhưng không phải vậy), và tôi nghĩ bạn cũng vậy.

Mô hình chống nói về cách viết mã thủ tục xấu trong ngôn ngữ hướng đối tượng, trang khác nói về điều xấu là viết Java - thật ra không có ngôn ngữ nào tuyệt vời đến mức bạn có thể làm mọi thứ bạn muốn làm nhưng không thể viết mã xấu.

Trong thực tế, tôi đã thấy một ít kỹ thuật hơn trong mã hướng đối tượng so với thủ tục - ít hơn một chút về kỹ thuật và hơn một chút so với kỹ thuật.

Trong trường hợp của bạn, nó sẽ phụ thuộc vào chi tiết cụ thể và tôi không chắc bạn thực sự làm gì theo kiểu thủ tục. Là nó chính xác, rõ ràng, có thể kiểm tra, dễ sửa đổi, vv? Các tiêu chí để đánh giá mã phải dựa trên những mối quan tâm thực tế như vậy, và không dựa trên độ tinh khiết của một phong cách cụ thể. Có vẻ như trong trường hợp của bạn, những người hợp lý và hiểu biết có thể không đồng ý (và làm!) Về những mối quan tâm đó, và nếu vậy có lẽ không có cách nào khách quan để xác định sự thật của vấn đề.


2
Câu trả lời của bạn bắt đầu tốt, nhưng sau đó bạn có mơ hồ và không cam kết. Tôi đã đọc bài báo rằng OP liên kết với phân rã chức năng, và nó là một phản hạt khủng khiếp, được thực hiện bởi các nhà phát triển thủ tục đang cố gắng biến phong cách lập trình của họ thành một mô hình hướng đối tượng. Vì vậy, không, nó không phụ thuộc vào chi tiết cụ thể.
Robert Harvey

nhưng tôi không nghĩ rằng Coder tin rằng mô hình chống đối là những gì cá nhân anh ta đã làm (tôi cũng không có lý do đặc biệt để nghi ngờ anh ta). Câu hỏi của anh ấy (một trong số đó, thực sự) là nếu lập trình kiểu thủ tục có thể ổn trong ngôn ngữ đối tượng (có thể giống như trong hàm Java tĩnh được hiển thị trong blog rant Java). Và điều đó phụ thuộc vào chi tiết cụ thể của những gì anh ta mã hóa. (Tôi đã mở đầu bằng "Trong trường hợp của bạn"). Tôi nghĩ rằng bạn đang đọc câu hỏi về cơ bản là "Tôi có nên lập trình như trong mô hình chống không?", Điều này rõ ràng là xấu - nhưng Coder biết điều đó, tôi nghĩ vậy.
psr

4
Ngay cả cách này - phân rã thủ tục là một kỹ thuật hợp lệ và bác bỏ nó là không tương thích nhiều với OOP là một sự cuồng tín thuần túy. Hãy để tất cả những bông hoa nở. Tất cả các kỹ thuật là hợp lệ nếu được sử dụng một cách khôn ngoan. Bám sát một phương pháp cụ thể là không khôn ngoan chút nào.
SK-logic
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.