Vì câu hỏi của bạn bao trùm rất nhiều nền tảng, với rất nhiều giả định, tôi sẽ bỏ qua chủ đề câu hỏi của bạn:
Tại sao chúng ta cần rất nhiều lớp trong các mẫu thiết kế
Chúng ta không. Không có quy tắc được chấp nhận chung nói rằng phải có nhiều lớp trong các mẫu thiết kế.
Có hai hướng dẫn chính để quyết định nơi đặt mã và cách cắt các tác vụ của bạn thành các đơn vị mã khác nhau:
- Sự gắn kết: bất kỳ đơn vị mã nào (có thể là một gói, một tệp, một lớp hoặc một phương thức) nên thuộc về nhau . Tức là, bất kỳ phương pháp cụ thể nào cũng nên có một nhiệm vụ và thực hiện tốt nhiệm vụ đó. Bất kỳ lớp học nào cũng phải chịu trách nhiệm cho một chủ đề lớn hơn (bất cứ điều gì có thể). Chúng tôi muốn sự gắn kết cao.
- Khớp nối: bất kỳ hai đơn vị mã nào nên phụ thuộc ít nhất vào nhau càng tốt - đặc biệt không nên có phụ thuộc vòng tròn. Chúng tôi muốn khớp nối thấp.
Tại sao hai điều đó nên quan trọng?
- Sự gắn kết: một phương thức thực hiện rất nhiều thứ (ví dụ: tập lệnh CGI kiểu cũ có GUI, logic, truy cập DB, v.v ... tất cả trong một mớ hỗn độn mã dài) trở nên khó sử dụng. Tại thời điểm viết, thật hấp dẫn khi chỉ đưa ý nghĩ của bạn vào một phương pháp dài. Điều này hoạt động, nó dễ dàng để trình bày và như vậy, và bạn có thể được thực hiện với nó. Rắc rối phát sinh sau đó: sau một vài tháng, bạn có thể quên những gì bạn đã làm. Một dòng mã ở trên cùng có thể là một vài màn hình cách một dòng ở phía dưới; thật dễ dàng để quên tất cả các chi tiết. Bất kỳ thay đổi bất cứ nơi nào trong phương pháp có thể phá vỡ bất kỳ số lượng hành vi của điều phức tạp. Nó sẽ khá cồng kềnh để tái cấu trúc hoặc sử dụng lại các phần của phương thức. Và như vậy.
- Khớp nối: bất cứ khi nào bạn thay đổi một đơn vị mã, bạn có khả năng phá vỡ tất cả các đơn vị khác phụ thuộc vào nó. Trong các ngôn ngữ nghiêm ngặt như Java, bạn có thể nhận được gợi ý trong thời gian biên dịch (nghĩa là về các tham số, ngoại lệ được khai báo, v.v.). Nhưng nhiều thay đổi không kích hoạt như vậy (tức là thay đổi hành vi) và các ngôn ngữ khác, năng động hơn, không có khả năng như vậy. Khớp nối càng cao, càng khó thay đổi bất cứ điều gì, và bạn có thể dừng lại, trong đó việc viết lại hoàn toàn là cần thiết để đạt được một số mục tiêu.
Hai khía cạnh này là "trình điều khiển" cơ bản cho bất kỳ lựa chọn "đặt cái gì" trong bất kỳ ngôn ngữ lập trình nào và bất kỳ mô hình nào (không chỉ OO). Không phải ai cũng hiểu rõ về chúng, và phải mất nhiều thời gian, thường là nhiều năm, để có được cảm giác thực sự ăn sâu, tự động về cách những phần mềm ảnh hưởng này.
Rõ ràng, hai khái niệm đó không cho bạn biết bất cứ điều gì về những gì thực sự phải làm . Một số người sai về phía quá nhiều, những người khác ở phía quá ít. Một số ngôn ngữ (nhìn vào bạn ở đây, Java) có xu hướng ủng hộ nhiều lớp vì bản chất cực kỳ tĩnh và mang tính mô phạm của chính ngôn ngữ này (đây không phải là một tuyên bố giá trị, nhưng nó là như vậy). Điều này trở nên đặc biệt đáng chú ý khi bạn so sánh nó với các ngôn ngữ năng động và biểu cảm hơn, ví dụ như Ruby.
Một khía cạnh khác là một số người đăng ký theo cách tiếp cận nhanh nhẹn chỉ viết mã cần thiết ngay bây giờ và để cấu trúc lại rất nhiều sau này, khi cần thiết. Trong phong cách phát triển này, bạn sẽ không tạo ra interface
khi bạn chỉ có một lớp thực hiện. Bạn chỉ cần thực hiện các lớp cụ thể. Nếu, sau này, bạn cần một lớp thứ hai, bạn sẽ tái cấu trúc.
Một số người chỉ đơn giản là không làm việc theo cách đó. Chúng tạo ra các giao diện (hoặc, nói chung hơn, các lớp cơ sở trừu tượng) cho bất kỳ thứ gì có thể được sử dụng chung hơn; Điều này dẫn đến một vụ nổ lớp nhanh chóng.
Một lần nữa, có những tranh luận cho và chống lại, và điều đó không quan trọng mà tôi, hoặc bạn, thích. Trong cuộc đời của bạn, với tư cách là nhà phát triển phần mềm, sẽ gặp phải tất cả các thái cực, từ các phương pháp spaghetti dài, thông qua các thiết kế lớp vừa đủ lớn, vừa sáng suốt, cho đến các kế hoạch lớp vô cùng khó chịu, bị áp đảo. Khi bạn có nhiều kinh nghiệm hơn, bạn sẽ phát triển nhiều hơn thành vai trò "kiến trúc" và có thể bắt đầu ảnh hưởng đến điều này theo hướng bạn muốn. Bạn sẽ tìm ra một trung gian vàng cho chính mình, và bạn vẫn sẽ thấy rằng nhiều người sẽ không đồng ý với bạn, bất cứ điều gì bạn làm.
Do đó, giữ một tâm trí cởi mở là điều quan trọng nhất, ở đây, và đó sẽ là lời khuyên chính của tôi cho bạn, khi thấy rằng bạn dường như rất đau đớn về vấn đề này, đánh giá bằng phần còn lại của câu hỏi của bạn ...