Các lớp đặt tên - Làm thế nào để tránh gọi mọi thứ là Trình quản lý <WhatEver>? [đóng cửa]


1188

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 Companyvà một Addressmiền - và có lẽ ở đâu đó UserManager, một CompanyManagervà một AddressManagersẽ xuất hiện để xử lý những điều đó.

Vì vậy, bạn có thể nói những gì UserManager, CompanyManagerAddressManagerlà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à UserManagercô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ể UserManagercô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:

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.


11
Nó thuộc về wiki cộng đồng vì không có câu trả lời "tốt nhất" nào. Đó là một cuộc thảo luận.
DOK

13
Đó là phản trực giác. Họ không nên gọi nó là một diễn đàn? Tôi nghĩ rằng một wiki sẽ là một bộ sưu tập các sự kiện, không phải ý kiến.
AaronLS

78
Cảm ơn vì đã cập nhật thông tin này - nhưng ugh, mẹo cuối cùng đó là lời khuyên khủng khiếp! Nếu bạn không thể nghĩ ra một cái tên hay trong 10 phút, có lẽ có điều gì đó không ổn với lớp của bạn. (Với sự cẩn thận tiêu chuẩn: 1) hoàn hảo là kẻ thù của tốt, 2) Vận chuyển là một tính năng - chỉ cần nhớ rằng bạn đang phải gánh chịu nợ kỹ thuật).
Jeff xương ức

11
Nếu bạn không thể nghĩ ra một cái tên hay trong 10 phút thì hãy nhờ đồng nghiệp giúp đỡ. Đừng bỏ cuộc.

9
Nếu bạn không thể nghĩ ra một cái tên hay trong 10 phút, hãy thử giải thích nó với các đồng nghiệp của bạn; họ có thể nghĩ ra một cái tên hay (user338195), nhưng cố gắng giải thích nó có thể sẽ giúp bạn phát hiện ra điều gì sai với nó ( Jeff ).
WillC

Câu trả lời:


204

Tôi đã hỏi một câu hỏi tương tự , nhưng ở đâu có thể, tôi cố gắng sao chép các tên đã có trong khung công tác .NET và tôi tìm ý tưởng trong các khung công tác JavaAndroid .

Dường như Helper, ManagerUtillà những danh từ không thể tránh khỏi mà bạn đính kèm để phối hợp các lớp không chứa trạng thái và nói chung là thủ tục và tĩnh. Một thay thế là Coordinator.

Bạn có thể nhận prosey đặc biệt là màu tím với những cái tên và đi cho những thứ như Minder, Overseer, Supervisor, Administrator, và Master, nhưng như tôi đã nói tôi muốn giữ nó như tên khuôn khổ bạn đang sử dụng để.


Một số hậu tố phổ biến khác (nếu đó là thuật ngữ chính xác) bạn cũng tìm thấy trong .NET framework là:

  • Builder
  • Writer
  • Reader
  • Handler
  • Container

4
Tôi rất thích những thứ này. Chúng không rơi vào cái bẫy của những ẩn dụ xấu hoặc chưa biết vì chúng đã được .NET Framework sử dụng. Thật thú vị khi xem xét các thư viện khác (Java), để biết thêm thông tin đầu vào của những gì thường được sử dụng.
froh42

Tôi muốn đề nghị Conductor, giống như nhạc trưởng của một dàn nhạc. Đây chắc chắn là một vai trò quan trọng, tùy thuộc vào bản chất của sự hợp tác mà bạn cần "thực hiện" (các đối tượng khác là các tác nhân rất chuyên môn nên đáp ứng với mệnh lệnh tập trung và đừng quá lo lắng về mọi cộng tác viên khác).
heltonbiker 7/12/2015

1
Tôi không tin rằng giải pháp cho các lớp -er là đưa ra một tên khác. Như tôi đã đọc trong nhiều bài viết khác và tôi đang cố gắng tìm hiểu câu trả lời, đó là bạn cần thay đổi kiến ​​trúc, không chỉ tên được sử dụng.
Michael Ozeryansky

115

Bạn có thể xem qua source-code-wordle.de , tôi đã phân tích ở đó các hậu tố được sử dụng thường xuyên nhất của các tên lớp của .NET framework và một số thư viện khác.

Top 20 là:

  • thuộc tính
  • kiểu
  • người giúp đỡ
  • bộ sưu tập
  • chuyển đổi
  • xử lý
  • thông tin
  • các nhà cung cấp
  • ngoại lệ
  • dịch vụ
  • thành phần
  • giám đốc
  • nút
  • Lựa chọn
  • nhà máy
  • bối cảnh
  • mục
  • nhà thiết kế
  • căn cứ
  • biên tập viên

147
Trong một công ty cụ thể từ lâu, tôi biết một kỹ sư đã chán ngấy với vô số các quy tắc hậu tố gây khó chịu cho công ty mà anh ta kiên quyết kết thúc mọi lớp học Thingy.

8
Danh sách các tên này tự nó không hữu ích nếu không áp dụng bối cảnh của hậu tố.
Fred

65

Tôi là tất cả những cái tên hay và tôi thường viết về tầm quan trọng của việc cẩn thận khi chọn tên cho mọi thứ. Vì lý do rất giống nhau này, tôi cảnh giác với những ẩn dụ khi đặt tên cho mọi thứ. Trong câu hỏi ban đầu, "nhà máy" và "bộ đồng bộ hóa" trông giống như những cái tên hay cho ý nghĩa của chúng. Tuy nhiên, "người chăn" và "bảo mẫu" thì không, bởi vì chúng dựa trên phép ẩn dụ . Một lớp trong mã của bạn không thể một người giữ trẻ theo nghĩa đen ; bạn gọi nó là bảo mẫu vì nó chăm sóc một số thứ khác rất giống một bảo mẫu ngoài đời thực chăm sóc trẻ sơ sinh hoặc trẻ nhỏ. Điều đó ổn trong lời nói không chính thức, nhưng không ổn (theo ý kiến ​​của tôi) đối với việc đặt tên các lớp trong mã sẽ phải được duy trì bởi ai biết ai biết khi nào.

Tại sao? Bởi vì ẩn dụ phụ thuộc vào văn hóa và thường phụ thuộc vào từng cá nhân. Đối với bạn, việc đặt tên cho một "bảo mẫu" có thể rất rõ ràng, nhưng có lẽ nó không rõ ràng với người khác. Chúng ta không nên dựa vào điều đó, trừ khi bạn viết mã chỉ dành cho sử dụng cá nhân.

Trong mọi trường hợp, quy ước có thể tạo ra hoặc phá vỡ một phép ẩn dụ. Việc sử dụng "nhà máy" tự nó dựa trên một phép ẩn dụ, nhưng nó đã xuất hiện khá lâu và hiện khá nổi tiếng trong thế giới lập trình, vì vậy tôi sẽ nói rằng nó an toàn khi sử dụng. Tuy nhiên, "bảo mẫu" và "người chăn" là không thể chấp nhận được.


10
Lập luận này thực sự bị phá vỡ trong đó rõ ràng chính Factory là một phép ẩn dụ. Thông thường các phép ẩn dụ sẽ thực sự làm rõ những gì một đối tượng có thể giỏi, trong khi mơ hồ hoặc chung chung tự động đảm bảo rằng cách duy nhất để tìm ra những gì mã làm là bằng cách đọc nó đầy đủ! Trường hợp xấu nhất.
Kzqai

1
+1 để tránh tên 'dễ thương'. Tôi nghĩ thật tuyệt khi được trực tiếp với ngôn ngữ như bạn có thể. (Tất nhiên, không phải lúc nào cũng dễ dàng trực tiếp, cô đọng, chính xác không mơ hồ tất cả cùng một lúc)
andrewf

1
Một sự lựa chọn sáng tạo của động từ + "er" thường sẽ rõ ràng hơn đối với các lớp cụ thể hơn là một sự tương tự đầy màu sắc. Mặt khác, trừu tượng mới - thứ là một khái niệm mới, một "loại vật" mới thay vì chỉ là một "thứ" mới - thường hoạt động tốt như các phép ẩn dụ ("đậu" của Java, "ống kính" của Haskell, GUI "Cửa sổ", nhiều "ngôn ngữ" hứa hẹn. Mặc dù vậy, hầu hết các cơ sở mã sẽ không có bất kỳ phát minh chính hãng nào như vậy.
Maln normalulo

51

Chúng ta có thể làm mà không cần bất kỳ xxxFactory, xxxManagerhoặc xxxRepositorycác lớp nếu chúng ta mô hình hóa thế giới thực một cách chính xác:

Universe.Instance.Galaxies["Milky Way"].SolarSystems["Sol"]
        .Planets["Earth"].Inhabitants.OfType<Human>().WorkingFor["Initech, USA"]
        .OfType<User>().CreateNew("John Doe");

;-)


11
Làm thế nào bạn sẽ có được vũ trụ song song và kích thước thay thế?
chào

23
Điều đó thật dễ dàng: Omniverse.Instance.Dimensions ["Chúng ta"]. Đại học ["Của chúng ta"]. Các thiên hà ... ... được rồi, tôi thừa nhận điều này sẽ cần phải biên dịch lại. ;-)
herzmeister

73
Cập nhật: điều này đã được thêm vào .NET 4.0 : Universe.Instance.ToParallel();)
Connell

2
Phá vỡ luật pháp của demeter!
Jonas G. Drange

13
Đó là các Đối tượng và Thành viên, không phải tên Lớp
Harry Berry

39

Nghe có vẻ như một con dốc trơn trượt đến một cái gì đó sẽ được đăng trên thed Dailywtf.com, "ManagerOfP PeopleWhoHaveMortgages", v.v.

Tôi cho rằng đúng là một lớp Trình quản lý nguyên khối không phải là thiết kế tốt, nhưng sử dụng 'Trình quản lý' không phải là xấu. Thay vì UserManager, chúng tôi có thể chia nó thành UserAccountManager, UserProfileManager, UserSecurityManager, v.v.

'Người quản lý' là một từ tốt vì nó cho thấy rõ ràng một lớp không đại diện cho một 'thế giới thực'. 'AccountClerk' - tôi phải nói như thế nào nếu đó là một lớp quản lý dữ liệu người dùng hoặc đại diện cho ai đó là Thư ký tài khoản cho công việc của họ?


8
Điều gì về UserAccount, UserProfiler và UserSecker? Nếu bạn thoát khỏi Manager, bạn buộc phải đưa ra định nghĩa cụ thể, mà tôi nghĩ là một điều tốt.
Didier A.

10
Điều gì về UserAccount, UserProfile, UserSecurity oO?
clime

3
Tôi sẽ đặt tên nó là "MortageOwnersManager"
volter9

Đôi khi tên miền có tên cụ thể. Giống như "MortageHolder" có thể tốt hơn là "MortageOwner"
borjab


24

Khi tôi nghĩ về việc sử dụng Managerhoặc Helpertrong một tên lớp, tôi coi đó là mùi mã có nghĩa là tôi chưa tìm thấy sự trừu tượng đúng và / hoặc tôi vi phạm nguyên tắc trách nhiệm duy nhất , do đó, tái cấu trúc và nỗ lực nhiều hơn vào thiết kế thường làm cho việc đặt tên dễ dàng hơn nhiều.

Nhưng ngay cả các lớp được thiết kế tốt cũng không (luôn luôn) tự đặt tên cho mình và các lựa chọn của bạn một phần phụ thuộc vào việc bạn đang tạo các lớp mô hình kinh doanh hay các lớp cơ sở hạ tầng kỹ thuật.

Các lớp mô hình kinh doanh có thể khó, bởi vì chúng khác nhau cho mọi miền. Có một số thuật ngữ tôi sử dụng rất nhiều, như Policyđối với các lớp chiến lược trong một miền (ví dụ LateRentalPolicy:), nhưng chúng thường bắt nguồn từ việc cố gắng tạo ra một " ngôn ngữ phổ biến " mà bạn có thể chia sẻ với người dùng doanh nghiệp, thiết kế và đặt tên lớp để chúng mô hình thực thế giới ý tưởng, đối tượng, hành động và sự kiện.

Các lớp cơ sở hạ tầng kỹ thuật dễ dàng hơn một chút, vì chúng mô tả các miền mà chúng ta biết thực sự rõ. Tôi thích kết hợp các tên mẫu thiết kế vào các tên lớp, như InsertUserCommand, CustomerRepository,hoặc SapAdapter.tôi hiểu mối quan tâm về việc truyền đạt triển khai thay vì mục đích, nhưng các mẫu thiết kế kết hợp hai khía cạnh này của thiết kế lớp - ít nhất là khi bạn đang xử lý cơ sở hạ tầng, nơi bạn muốn thiết kế triển khai phải minh bạch ngay cả khi bạn đang ẩn các chi tiết.


1
Tôi thực sự thích ý tưởng sử dụng Policyhậu tố cho các lớp chứa logic kinh doanh
jtate

+1 để đề cập đến mùi mã liên quan đến các tên như "Người quản lý" và "Người trợ giúp". Tôi thấy rằng nếu tôi không có tên rõ ràng cho mọi thứ, nó thường xuất phát ít nhất một phần từ sự hiểu biết của tôi về tên miền, cho dù là kinh doanh hay kỹ thuật. Gần như tương tự, điều đó có thể có nghĩa là tôi chỉ phản ứng phá vỡ các lớp học vì chúng "quá lớn" - mà đối với tôi cũng là một dấu hiệu của mô hình không đầy đủ. Đây phải là câu trả lời bình chọn hàng đầu.
nclark

10

Được biết đến với các mẫu như được định nghĩa bởi (giả sử) cuốn sách GOF và đặt tên các đối tượng theo sau chúng giúp tôi có một chặng đường dài trong việc đặt tên các lớp, sắp xếp chúng và truyền đạt ý định. Hầu hết mọi người sẽ hiểu danh pháp này (hoặc ít nhất là một phần chính của nó).


Fowler là một tài liệu tham khảo tốt cho tôi nhưng GOF là một đề xuất tuyệt vời.
Lazarus

Tha thứ cho sự thiếu hiểu biết của tôi. Bạn đang đề cập đến cuốn sách Fowler nào?
Brian Agnew


19
Hmm, đôi khi điều này hoạt động (ví dụ như Nhà máy hoặc Chiến lược) nhưng trong những lần khác tôi cảm thấy rằng điều này truyền đạt cách thức thực hiện (tôi đã sử dụng một mô hình!) Hơn ý định và công việc của lớp. Ví dụ, điều quan trọng nhất của Singleton là những gì nó thể hiện - và không phải là Singleton. Vì vậy, đặt tên nghiêm ngặt sau khi các mẫu được sử dụng cảm thấy giống như đặt tên nghiêm ngặt sau các loại được sử dụng. Ví dụ, ký hiệu Hungary được nhóm Hệ thống Windows áp dụng sai (mô tả loại dữ liệu C thay vì "loại ý định")
froh42

1
Đối với các lớp cơ sở hạ tầng kỹ thuật, thông thường mong muốn làm cho việc triển khai trở nên minh bạch - và hầu hết các tên mẫu thiết kế chính tắc đều truyền đạt cả việc thực hiện và mục đích. Các lớp mô hình miền là một vấn đề khác, mặc dù.
Jeff Sternal

10

Nếu tôi không thể đưa ra một tên cụ thể hơn cho lớp của mình hơn XyzManager thì đây sẽ là một điểm để tôi xem xét lại liệu đây có thực sự là chức năng thuộc về một lớp hay không, tức là một mùi 'mã' kiến ​​trúc.


8

Tôi nghĩ điều quan trọng nhất cần ghi nhớ là: tên có đủ mô tả không? Bạn có thể nói bằng cách nhìn vào cái tên mà Class phải làm không? Sử dụng các từ như "Manager", "Service" hoặc "Handler" trong tên lớp của bạn có thể được coi là quá chung chung, nhưng vì rất nhiều lập trình viên sử dụng chúng, nó cũng giúp hiểu được lớp học dùng để làm gì.

Bản thân tôi đã sử dụng mô hình mặt tiền rất nhiều (ít nhất, tôi nghĩ đó là tên gọi của nó). Tôi có thể có một Userlớp mô tả chỉ một người dùng và một Userslớp theo dõi "bộ sưu tập người dùng" của tôi. Tôi không gọi lớp là UserManagervì tôi không thích người quản lý ngoài đời thực và tôi không muốn được nhắc nhở về họ :) Đơn giản chỉ cần sử dụng dạng số nhiều giúp tôi hiểu được lớp học làm gì.


Tôi cũng thực sự thích cách tiếp cận này vì nó giúp giảm bớt ý tưởng quản lý từ trên xuống. Một nhóm người dùng có nhiều khả năng ngụ ý rằng công việc được thực hiện giữa những người dùng thay vì từ UserManager trở xuống. Ngoài ra, việc Người dùng sở hữu một tham chiếu đến Người dùng không cảm thấy lạ như sở hữu Người quản lý. Nó cởi mở hơn với suy nghĩ tương đối, thay vì nghiêm túc OOP.
Seph Reed

Vấn đề với cách tiếp cận này là rất khó để tìm kiếm mã của bạn Users, đặc biệt nếu bạn vượt qua đối tượng người quản lý. this.users = new Users()Nhưng sau đó, một nơi khác trong mã của bạn userssẽ đề cập đến một mảng Users.
tuyết

Như bạn nói Người dùng thực sự ngụ ý một "bộ sưu tập người dùng" - một tập hợp các thực thể có trạng thái. Nhưng SRP có nghĩa là bạn sẽ không muốn kết hợp quản lý người dùng (chức năng và logic nghiệp vụ) với dữ liệu người dùng (trạng thái). Không nói bạn sai, chỉ là UserManager phù hợp nếu lớp chịu trách nhiệm quản lý người dùng và không chỉ lưu trữ trạng thái và CRUD cơ bản của họ.
Richard Moore

5

Cụ thể với C #, tôi đã tìm thấy "Nguyên tắc thiết kế khung: Quy ước, thành ngữ và mẫu cho thư viện .NET có thể tái sử dụng" để có nhiều thông tin tốt về logic đặt tên.

Theo như tìm kiếm những từ cụ thể hơn, tôi thường sử dụng từ điển đồng nghĩa và nhảy qua các từ liên quan để thử và tìm một từ tốt. Mặc dù vậy, tôi cố gắng không dành nhiều thời gian cho nó, khi tôi phát triển thông qua việc phát triển những cái tên hay hơn, hoặc đôi khi nhận ra rằng SuchAndSuchManagerthực sự nên chia thành nhiều lớp, và sau đó tên của lớp bị phản đối đó trở thành một vấn đề .


3

Tôi tin rằng điều quan trọng ở đây là phải nhất quán trong phạm vi khả năng hiển thị mã của bạn, tức là miễn là mọi người cần xem / làm việc trên mã của bạn hiểu quy ước đặt tên của bạn thì điều đó sẽ ổn, ngay cả khi bạn quyết định gọi cho họ 'CompanyT Breathamabob' và 'UserDoohickey'. Điểm dừng đầu tiên, nếu bạn làm việc cho một công ty, là để xem liệu có một quy ước công ty để đặt tên. Nếu không có hoặc bạn không làm việc cho một công ty thì hãy tạo ra các thuật ngữ của riêng bạn cho bạn, hãy chuyển nó xung quanh một vài đồng nghiệp / bạn bè đáng tin cậy, ít nhất là mã tình cờ, và kết hợp bất kỳ phản hồi nào có ý nghĩa.

Áp dụng quy ước của người khác, ngay cả khi nó được chấp nhận rộng rãi, nếu nó không nhảy ra khỏi trang của bạn là một chút sai lầm trong cuốn sách của tôi. Trước hết tôi cần hiểu mã của mình mà không cần tham khảo tài liệu khác nhưng đồng thời nó cũng phải chung chung đến mức không thể hiểu được với người khác trong cùng lĩnh vực.


1
Tuy nhiên, một quy ước nhất quán nếu hơi không trực quan sẽ tốt hơn là chỉ bắt đầu quy ước của riêng bạn. Những người làm việc trong một dự án sẽ học được bất kỳ quy ước nhất quán nào rất nhanh và sớm quên rằng chức năng không hoàn toàn như mong đợi trong cái nhìn đầu tiên.
Ông Boy

@ John, đó chính xác là những gì tôi nói. Công ước cần phải được nhóm chấp nhận và nếu bạn đang làm việc trong một công ty thì hãy xem có công ước nào không. Đối với công ty tôi đang nghĩ về bất kỳ nhóm nào, có thể là một nhóm dự án nguồn mở hoặc một bộ sưu tập lập trình viên lỏng lẻo. Nếu mọi người chỉ lấy những gì có sẵn gần như phù hợp với yêu cầu của họ thì tôi nghĩ chúng ta sẽ thiếu sự đổi mới.
Lazarus

2

Tôi sẽ xem xét các mẫu bạn đang sử dụng cho hệ thống của mình, các quy ước đặt tên / phân loại / nhóm các lớp có xu hướng được xác định bởi mẫu được sử dụng. Cá nhân, tôi tuân theo các quy ước đặt tên này vì chúng là cách khả dĩ nhất để người khác có thể nhận mã của tôi và chạy với nó.

Ví dụ, UserRecordsClerk có thể được giải thích tốt hơn khi mở rộng giao diện RecordsClerk chung mà cả UserRecordsClerk và CompanyRecordsClerk đều thực hiện và sau đó chuyên môn hóa, có nghĩa là người ta có thể nhìn vào các phương thức trong giao diện để xem các lớp con của nó thường làm gì.

Xem một cuốn sách như Mẫu thiết kế để biết thông tin, đây là một cuốn sách tuyệt vời và có thể giúp bạn làm rõ nơi bạn đang nhắm đến với mã của mình - nếu bạn chưa sử dụng nó! ; o)

Tôi nghĩ rằng miễn là mô hình của bạn được lựa chọn và sử dụng càng xa càng phù hợp, thì những tên lớp đơn giản khá khó hiểu sẽ đủ!


Tôi đã nhận xét về điều đó trên câu trả lời của Brian Agnew. Tôi không cảm thấy tên mẫu chỉ tạo ra tên lớp tốt trong một số trường hợp (Nhà máy, Chiến lược) chứ không phải ở tên khác (Singleton). Tôi muốn các tên phản ánh công việc của lớp chứ không phải cách tôi thực hiện nó.
froh42
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.