Khi nào một lớp keo hoặc lớp quản lý làm quá nhiều?


10

Tôi có xu hướng xây dựng các lớp tập trung quản lý các lớp khác trong thiết kế của mình. Nó không tự lưu trữ mọi thứ, nhưng hầu hết các yêu cầu dữ liệu sẽ đến "người quản lý" trước. Trong khi nhìn vào một câu trả lời cho câu hỏi này, tôi nhận thấy thuật ngữ "Đối tượng của Chúa". Wikipedia liệt kê nó như một phản mẫu, dễ hiểu.

Đâu là ranh giới giữa một lớp keo hợp pháp hoặc mô-đun, truyền dữ liệu và tin nhắn từ nơi này sang nơi khác và một lớp đang làm quá nhiều?

Câu trả lời:


15

Rất nhiều người nói những điều như "một lớp học không bao giờ nên lớn hơn đầu của bạn".

Tuy nhiên, tôi vừa tham gia một cuộc thảo luận với một số lập trình viên thực sự tuyệt vời, đẳng cấp thế giới về chính chủ đề này. Tôi đã nói chuyện với một trong những anh chàng Khỏa thân. Theo như chúng tôi có thể nói, đôi khi, điều này xảy ra, và không có nhiều cách để khắc phục nó.

Tuy nhiên, thông thường, một lớp mà điều này xảy ra là một đối tượng miền đại diện cho thành phần cơ bản của miền của bạn - Tài khoản cho ngân hàng, Bán cho bán lẻ, v.v. Nếu bạn cũng tìm thấy nó xảy ra với các lớp khác, có lẽ bạn cũng vậy muốn xem xét trách nhiệm của lớp đó. Đây là lời khuyên của tôi:

  • Nếu nó được gọi là "Người quản lý", "Người trợ giúp" hoặc "Dịch vụ", thì rất có thể nó quá lớn. Khi bạn thực sự tìm ra trách nhiệm của một lớp nên là gì, bạn sẽ thấy việc ủy ​​thác các trách nhiệm khác dễ dàng hơn.
  • Nếu nó được gọi là "Trình điều khiển", thì nó sẽ chịu trách nhiệm kiểm soát sự tương tác giữa một nhóm các lớp khác ... và không có gì khác.
  • Nếu nó thông qua dữ liệu và tin nhắn giữa các nút vật lý khác nhau sau đó hoặc là nó phải đối phó với chuyển đổi một thông điệp cụ thể một hình thức đăng, hoặc nó xử lý các cơ chế chuyển nhượng. Chẳng hạn, bạn có thể có một lớp chuyển đổi Giao dịch Ngân hàng thành XML và một lớp khác gửi XML đó qua HTTP.
  • Nếu nó chuyển các sự kiện giữa các mô-đun khác nhau trong một ứng dụng, thì nó có trách nhiệm thông báo cho người nghe khi một sự kiện được nêu ra và không có gì khác.

Theo nguyên tắc thông thường, nếu nó quá lớn, hãy xem liệu bạn có thể ủy thác bất kỳ trách nhiệm nào cho một lớp khác không, và nếu bạn không thể, có lẽ nó sẽ ổn.


Câu trả lời tốt với hướng dẫn cụ thể hữu ích. Tôi có xu hướng tạo các lớp như thế này cho các đối tượng miền trong đó tất cả hoặc gần như tất cả, dữ liệu đại diện cho một số khía cạnh của miền và tôi muốn có thể coi nó là một đơn vị. Sau đó, tôi có xu hướng ủy thác các trách nhiệm thực tế cho các lớp chỉ thực sự được khởi tạo bên trong lớp lớn. Vì vậy, tôi khá gần với dòng này, và tôi có lẽ nên nghiêng về việc làm cho các lớp riêng lẻ nhỏ hơn khi tôi viết nó.
jprete
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.