Chú Bob có nghĩa là gì bởi 'tên cụm danh từ'?


14

Tôi đang đọc Clean Code của chú Bob. Bởi vì tôi không phải là người nói tiếng Anh bản địa, tôi không thể hiểu câu sau:

Các lớp và các đối tượng nên có danh từ hoặc cụm danh từ những cái tên như Customer, WikiPage, Account, và AddressParser. Nói cách Tránh thích Manager, Processor, Data, hoặc Infotrong tên của một lớp. Một tên lớp không nên là một động từ.

Theo tôi biết, không ai trong số các Manager, Processor, Data, và Infolà một động từ, không phải là nó? Điểm thực tế anh ấy muốn nhấn mạnh là gì?


có lẽ chú Bob đang áp dụng tư duy RESTful trong việc thể hiện những đức tính của các đối tượng tài nguyên.
rwong

Câu trả lời:


21

Ba điểm riêng biệt:

  • Tên lớp nên là danh từ hoặc cụm danh từ . Điều này có nghĩa là tên của lớp nên là một chủ đề của động từ. Trong trường hợp thiết kế hướng đối tượng, các phương thức sẽ là các động từ diễn ra trên thứ mà lớp là một đại diện.

  • Một số từ nên tránh. Managerchỉ ra một lớp thần có thể . InfoDatacó thể chỉ ra một thùng chứa dữ liệu giả. Những từ như thế này có thể chỉ ra mô hình kém của không gian vấn đề.

  • Động từ không bao giờ nên là tên lớp. Xem điểm đầu tiên - lớp mô hình hóa mọi thứ, phương thức mô hình hành động.


1
Những từ như thế này có thể chỉ ra mô hình kém của không gian vấn đề. - Chà, người ta sẽ nghĩ, hoặc không gian vấn đề được mô hình hóa kém hoặc không, độc lập với các tên được chọn. Một cái tên tốt không giúp thiết kế kém; và một thiết kế tốt chỉ bị tổn thương nhẹ bởi một cái tên nghèo nàn.
Ingo

Và bạn có thể hạ thấp bước này khi xem xét cách bạn thực sự xây dựng lớp của mình và cách nó tương tác với thế giới bên ngoài - các thuộc tính của lớp thường là danh từ, trong khi các phương thức của lớp thường là động từ
PeteH

Nếu dự án của bạn có một lớp mà bạn sẽ xem xét gọi "Trình quản lý" hoặc "Thông tin" hoặc "Dữ liệu" thì có khả năng nó có hàng tá các lớp như vậy, điều đó có nghĩa là bạn sẽ không sử dụng các tên này. Bạn sẽ có ThisManager và ThatManager và AnotherManger, v.v.
gnasher729

Anh ấy nói động từ không bao giờ nên có trong tên lớp, nhưng tôi chỉ đọc lại Thêm ngữ cảnh có ý nghĩa, và trong ví dụ của anh ấy ở trang 29, anh ấy đặt tên một lớp là GuessStatisticMessage. Bây giờ tôi bối rối về quy tắc, bởi vì tôi diễn giải cách sử dụng Guess của anh ấy như một động từ, trái ngược với một danh từ. dictionary.com/browse/guess?s=t
Devin Gl lý do Lambert

2
@DevinGl LýLambert Nhưng đó không phải là Đoán. Đó là một thông điệp thống kê Guess. Một tin nhắn là một danh từ. Guess Statistic chỉ mô tả loại tin nhắn mà nó là - một thông điệp về thống kê đoán.
Thomas Owens

7

Anh ta đang cố gắng phân biệt sự vật (danh từ) và hành động (động từ). Trong thiết kế hướng đối tượng thông thường, chúng ta nghĩ về các lớp như là sự vật và phương thức của chúng là hành động mà những thứ đó có thể thực hiện. Quản là chăm sóc hoặc phối hợp, trong khi người quản lý là người hoặc vật quản lý.

Sách giới thiệu thường đưa điều này xuống theo các thuật ngữ đơn giản và rõ ràng nhất có thể như một lớp có tên Dog , với các phương pháp BarkBite . Trong các lớp học trong thế giới thực, sự khác biệt thường tinh tế hơn một chút, nhưng nó vẫn còn đó. Tôi tin rằng điểm mà chú Bob đang đưa ra, tuy nhiên, trong khi người quản lý là một danh từ, nhưng nó chú ý nhiều đến những gì người quản lý làm, và không phải là nó - nó quá mơ hồ về một từ để mô tả chính xác những gì là được quản lý hay thế nào.


5
Thật không may, kiểu suy nghĩ này có thể dẫn đến thiết kế sai. Một trong những ví dụ điển hình là ví dụ giới thiệu cổ điển về tài khoản ngân hàng. Trong hầu hết tất cả các sách giáo khoa OO, Accountlà một đối tượng, balancelà một trường và transferlà phương thức. Nhưng thiết kế chính xác sẽ là: Transferlà một đối tượng, accountlà một trường và balancelà một phương thức. Đó là cách các hệ thống ngân hàng thực sự được triển khai và cách ngân hàng thực sự hoạt động trước máy tính.
Jörg W Mittag

@ JörgWMittag: câu chuyện cảnh báo đó rất đáng để đăng lên như một câu trả lời; rằng đây là những hướng dẫn chung, và trong một số trường hợp hiếm hoi có thể dẫn đến sự phân hủy xấu.
smci
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.