Cách đây rất lâu, tôi đã đọc một bài viết (tôi tin rằng một mục blog) đưa tôi vào bài hát "đúng" về cách đặt tên các đối tượng: Hãy rất cẩn thận về việc đặt tên các thứ trong chương trình của bạn.
Ví dụ: nếu ứng dụng của tôi (như một ứng dụng kinh doanh thông thường) xử lý người dùng, công ty và địa chỉ tôi sẽ có một lớp User
, một Company
và một Address
miền - và có lẽ ở đâu đó UserManager
, một CompanyManager
và một AddressManager
sẽ xuất hiện để xử lý những điều đó.
Vì vậy, bạn có thể nói những gì UserManager
, CompanyManager
và AddressManager
làm gì? Không, bởi vì Trình quản lý là một thuật ngữ rất chung chung phù hợp với mọi thứ bạn có thể làm với các đối tượng miền của mình.
Bài báo tôi đọc khuyến nghị sử dụng tên rất cụ thể. Nếu đó là một ứng dụng C ++ và UserManager
công việc của họ là phân bổ và giải phóng người dùng khỏi đống, thì nó sẽ không quản lý người dùng mà chỉ bảo vệ sinh tử của họ. Hmm, có lẽ chúng ta có thể gọi đây là a UserShepherd
.
Hoặc có thể UserManager
công việc của họ là kiểm tra dữ liệu của từng đối tượng Người dùng và ký dữ liệu bằng mật mã. Sau đó, chúng tôi sẽ có một UserRecordsClerk
.
Bây giờ ý tưởng này bị mắc kẹt với tôi, tôi cố gắng áp dụng nó. Và tìm thấy ý tưởng đơn giản này khó khăn đáng kinh ngạc.
Tôi có thể mô tả những gì các lớp làm và (miễn là tôi không rơi vào mã hóa nhanh & bẩn) các lớp tôi viết thực hiện chính xác một điều. Những gì tôi bỏ lỡ để đi từ mô tả đó đến các tên là một loại danh mục tên, một từ vựng ánh xạ các khái niệm thành tên.
Cuối cùng tôi muốn có một cái gì đó giống như một danh mục mẫu trong tâm trí của tôi (các mẫu thiết kế thường xuyên dễ dàng cung cấp các tên đối tượng, ví dụ như một nhà máy )
- Factory - Tạo các đối tượng khác (đặt tên được lấy từ mẫu thiết kế)
- Người chăn cừu - Người chăn cừu xử lý thời gian sống của các vật thể, sự sáng tạo và tắt máy của chúng
- Đồng bộ hóa - Sao chép dữ liệu giữa hai hoặc nhiều đối tượng (hoặc phân cấp đối tượng)
Vú em - Giúp các đối tượng đạt đến trạng thái "có thể sử dụng" sau khi tạo - ví dụ: bằng cách nối dây với các đối tượng khác
Vân vân.
Vì vậy, làm thế nào để bạn xử lý vấn đề đó? Bạn có một từ vựng cố định, bạn có phát minh ra tên mới một cách nhanh chóng hay bạn xem xét việc đặt tên những thứ không quá quan trọng hoặc sai?
Tái bút: Tôi cũng quan tâm đến các liên kết đến các bài báo và blog thảo luận về vấn đề này. Để bắt đầu, đây là bài viết gốc khiến tôi suy nghĩ về nó: Đặt tên các lớp Java mà không có 'Trình quản lý'
Cập nhật: Tóm tắt câu trả lời
Trong thời gian này, đây là một bản tóm tắt về những gì tôi học được từ câu hỏi này.
- Cố gắng không tạo ra ẩn dụ mới (Vú em)
- Hãy nhìn vào những khuôn khổ khác làm gì
Các bài viết / sách về chủ đề này:
- Những tên nào bạn thấy mình đang chuẩn bị / thêm vào các lớp học thường xuyên?
- Cách tiếp cận tốt nhất để đặt tên lớp là gì?
- Sách: Các mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng (Bìa cứng)
- Sách: Các mô hình kiến trúc ứng dụng doanh nghiệp (Bìa cứng)
- Sách: Mẫu thực hiện (Bìa mềm)
Và một danh sách hiện tại của tiền tố tên / hậu tố tôi đã thu thập (chủ quan!) Từ các câu trả lời:
- Điều phối viên
- Người xây dựng
- nhà văn
- Người đọc
- Xử lý
- Thùng đựng hàng
- Giao thức
- Mục tiêu
- Bộ chuyển đổi
- Bộ điều khiển
- Lượt xem
- Nhà máy
- Thực thể
- Gầu múc
Và một mẹo hay cho con đường:
Đừng để bị tê liệt khi đặt tên. Đúng, tên rất quan trọng nhưng chúng không đủ quan trọng để lãng phí thời gian khổng lồ. Nếu bạn không thể nghĩ ra một cái tên hay trong 10 phút, hãy tiếp tục.