Sử dụng động từ với chức năng, danh từ với các lớp - còn giao diện thì sao? [đóng cửa]


23

Ok, tôi hiểu các quy ước thông thường của việc sử dụng các động từ có chức năng và danh từ với các lớp. Còn giao diện thì sao? Có phương pháp nào khi đưa ra các tên giao diện có thể không rõ ràng không?

Để làm cho rõ ràng, tôi không nói về việc nên đặt một "tôi" trước tên hoặc nếu sử dụng camelCase hoặc PascalCase. Tôi đang tự hỏi về phương pháp tìm ra một tên ngữ nghĩa rõ ràng cho một giao diện.

EDIT Tôi đang bị ám ảnh về cách đặt tên một giao diện theo cách rõ ràng nhất. Tôi đoán nó chỉ cần là một danh từ vì khi tôi nghĩ về việc đặt tên các lớp tôi nghĩ về đối tượng thế giới "thực" gần nhất mà nó có thể liên quan. Tôi cho rằng giao diện trong thế giới thực là những thứ như bàn phím, chuột, điều khiển từ xa, màn hình ATM. Đó là tất cả các danh từ. Dù sao đi nữa, bất kỳ cái nhìn sâu sắc bổ sung nào về một cách tốt để hình thành tên giao diện sẽ được đánh giá cao.


2
Hừm .. Dựa vào tiêu đề, tôi nghĩ rằng đây sẽ là về việc đánh đồng các phần của lời nói giữa lập trình và tiếng Anh. Trong trường hợp đó, madlibs dường như có thể.
Izkata

Hãy nhớ rằng, khi bạn tạo một lớp, bạn cũng đang tạo một giao diện cho các đối tượng được tạo bởi lớp đó ... Hoặc để nói theo cách khác, các lớp là các giao diện được nhận ra . Vì vậy, họ nên sử dụng quy ước đặt tên tương tự.
Daniel T.

Ngoài ra, IMHO "sử dụng động từ có chức năng" quá chung chung. Bạn nên sử dụng động từ với các lệnh và danh từ với các truy vấn .
Daniel T.

Câu trả lời:


21

Tôi muốn nói rằng nó phụ thuộc vào những gì giao diện xác định. Trong một số trường hợp khi giao diện khá cụ thể và chi tiết, tôi nghĩ một danh từ là tốt nhất. Ví dụ như IList, ICollection.

Đôi khi, mặc dù một giao diện liên quan nhiều hơn đến việc thêm các tính năng chung nhất định vào một lớp. Trong trường hợp đó tôi nghĩ một tính từ là tốt nhất. Ví dụ như IDisposable, IEnumerable, ...

Có lẽ một cách khác để suy nghĩ về điều này là có bao nhiêu "khả năng" giao diện của bạn xác định.

Ví dụ: IList<T>giao diện xác định các khả năng này: Thêm, Xóa, Chứa, Chèn, Xóa, ... Đây là tất cả các thuộc tính của danh sách vì vậy IListlà một tên hay.

IDisposablemặt khác chỉ xác định một khả năng: Vứt bỏ. Vì vậy, nó là phù hợp cho bất cứ điều gì là dùng một lần. Do đó tên IDisposable.


10
Tôi khuyên bạn nên sử dụng tính từ "_able" nếu giao diện của bạn sẽ được đặt tên theo những thứ có thể được thực hiện cho đối tượng của bạn (ví dụ IEnumerable), một danh từ "_er" nếu giao diện của bạn sẽ được đặt tên theo những thứ mà đối tượng của bạn làm cho các đối tượng khác ( ví dụ IEqualityComparer) và một danh từ chung nếu giao diện của bạn được đặt tên theo một loại sự vật có hành vi mà nó bắt chước (ví dụ IList<T>).
supercat

Nhận xét của @supercat nên thực sự được đưa vào câu trả lời này. Nó rất có ý nghĩa.
Nikhil Vartak

Trên thực tế, tiền tố tên giao diện Ilà dư thừa.
dùng1870400

5

Một giao diện mô tả hành vi để các tên nên nói như vậy. Tôi không chắc chắn về một quy tắc cho điều này nhưng bạn sẽ biết tên khi bạn nghe nó.

Vài ví dụ:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

Tôi nghĩ việc đặt tên cho các giao diện Ivà gọi Setvới nó là không phù hợp ISetbởi vì, với tư cách là một nhà phát triển, bạn không nên lo lắng liệu đó là giao diện hay lớp. Tôi thấy thực tế này không tồn tại trong Java bây giờ.


+1 cho "với tư cách là nhà phát triển, bạn không nên lo lắng về việc đó là giao diện hay lớp."
Kazark

"Là một nhà phát triển, bạn không nên lo lắng rằng đó là giao diện hay lớp" - không đồng ý vì nếu đó là giao diện thì bạn cần biết thành viên nào bạn nên thực hiện.
Maximus Minimus

@MaximusMinimus có tiền tố Ilà không cần thiết. Vậy thì tại sao không tiền tố các lớp trừu tượng với A, các lớp thông thường với Cvv ??
dùng1870400

@ user1870400 - đúng, nhưng đó không phải là phần tôi không đồng ý.
Maximus Minimus

4

Vì một giao diện thực sự chỉ là một biểu thức của "cái gì" chứ không phải "làm thế nào" của một loại, tôi sẽ đặt tên chúng theo cùng cách mà bạn đặt tên cho các lớp, ít nhất là từ một phần của phối cảnh lời nói. Điều duy nhất tôi có thể thêm vào đó là họ thường sẽ chung chung hơn những người triển khai cụ thể (ví dụ: giao diện "Khách hàng" có thể có người triển khai "ProspectiveCustomer" và "PayingCustomer").


0

Một giao diện được sử dụng như một lớp. Do đó, nó cũng nên được đặt tên bằng một danh từ khi bạn đặt tên lớp với danh từ. Thích các danh từ trừu tượng, ví dụ "Xe" khi các lớp là "Xe hơi" và "Xe tải".


0

Nhanh Trả lời: Giao diện là thêm về bổ sung một SET khả năng, tính năng, ranh giới thông thường hay mối liên kết giữa các đơn vị, các lớp học, các mô hình, khái niệm, vv ..

Điều về việc thêm hành vi phổ biến vào các lớp và thực thể, và sau đó một tên có ý nghĩa tốt sẽ xuất hiện để xác định tập hợp các tính năng được thực hiện.

Giao diện Đặt tên như: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.có thể giải thích khái niệm.


1
Có, giao diện đại diện cho hợp đồng, hoặc khả năng; rất nhiều điều được biết đến Nhưng làm thế nào để trả lời câu hỏi làm thế nào để đặt tên cho họ? Tất cả những gì bạn thực sự nói về vấn đề đó là "Hãy nghĩ về nó và cảm hứng sẽ tấn công bạn." Điều này không đưa ra bất kỳ khuyến nghị nào, ví dụ, nên chọn tên nào sau đây, bất kỳ lý do nào: IStateMachineBuilder(danh từ), IBuildStateMachine(được đặt tên theo một hành động), ICanBuildStateMachine(được đặt tên theo một khả năng), v.v.
stakx

0

Nó phụ thuộc, nếu giao diện chỉ chứa các phương thức, sẽ rất tốt để đặt tên cho nó bằng cách sử dụng các động từ như "Hành động" trong đó nếu nó đại diện cho một lớp chung wchich chứa các trường tĩnh, cuối cùng thì chúng ta có thể sử dụng một Danh từ chung giống như "Xe"

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.