Trong Java, những người trợ giúp riêng nên đi trên hay dưới các phương thức công khai? [đóng cửa]


24

Tôi đã nhận thấy rằng một đồng nghiệp và tôi có các thực tiễn trái ngược nhau về việc sắp xếp các phương thức trong các lớp Java của chúng tôi. Một người trong chúng tôi bắt đầu một lớp học với các phương thức công khai chính của mình, và sau đó đặt tất cả những người trợ giúp riêng sau đó. Một người khác trong chúng ta đảm bảo rằng các phương thức công khai đang ở cuối cùng.

Rõ ràng, đây chỉ là một vấn đề phong cách và không có câu trả lời đúng. Tuy nhiên, trước khi chúng tôi quyết định rằng vấn đề này chỉ là một cuộc chiến Yooks vs Zooks khác và chỉ chọn một hoặc tùy ý, tôi đã tự hỏi liệu có lẽ có một khuyến nghị hướng dẫn phong cách Java tiêu chuẩn hoặc một số lý do thực tế tại sao một cách tiếp cận tốt hơn cách tiếp cận khác.


13
Nó không thành vấn đề. Lật một đồng xu. Chọn một. Gắn bó với nó.

bản sao có thể có của Vị trí phương thức trợ giúp
Kilian Foth

@KilianFoth - Câu hỏi này đã được hỏi 3 tháng trước và có nhiều câu trả lời hơn. Điều đó có làm cho câu hỏi trong câu hỏi trở thành một bản sao của câu hỏi này không?
Brandon Yarbrough

Câu trả lời:


25

Mặc dù nó được ưu tiên thông thường, bạn chắc chắn nên cố gắng tuân thủ một tiêu chuẩn chung trong tổ chức của mình. Vì vậy, bất cứ điều gì bạn quyết định, chọn một tiêu chuẩn và phổ biến nó.

Đối với việc chọn, nếu bạn tuân theo các đề xuất như được cung cấp trong Clean Code , bạn sẽ có thể đọc tệp từ trên xuống dưới như một bài báo, điều này sẽ gợi ý một cách tự nhiên rằng các phương thức trợ giúp xuất hiện sau các phương thức mà chúng là giúp đỡ Điều này sẽ dẫn đến khả năng đọc tối đa của cấu trúc mã. Vì vậy, nếu bạn đã có

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

Tập tin của bạn sẽ được cấu trúc như

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

Một tác dụng phụ khác của việc này là bạn phát hiện ra những người trợ giúp của bạn có những người trợ giúp riêng của họ và nó giúp bạn tìm ra những gì bạn thực sự có là một lớp khác sống trong tệp của bạn và bạn có thể tái cấu trúc sạch để trích xuất nó vào lớp của chính nó vì các phương thức đó là đã được nhóm lại với nhau theo thứ tự. Nhưng đó là một lợi ích thứ cấp.


Vui mừng bạn nói điều này nếu không tôi sẽ có. Tôi đã tự hỏi Bob Martin cách anh ta đặt hàng mọi thứ nếu mỗi phương thức sử dụng phương pháp thứ 3. Trong trường hợp đó, anh ta đặt thứ 3 dưới hai người kia.
Daniel Kaplan

1
Ví dụ của bạn không hiển thị nó, nhưng điều này dẫn đến các phương thức công cộng được trộn lẫn giữa các phương thức riêng tư. Tôi sử dụng kỹ thuật này, nhưng thường thì tôi cảm thấy bị rách nát và muốn đẩy tất cả các phương thức công khai lên hàng đầu, bởi vì cũng có nhiều điều để nói về việc đọc giao diện công cộng một cách dễ dàng.
Sean

@Sean, tốt, tôi thường cố gắng giới hạn API công khai của lớp hoặc để nó làm mặt tiền nếu thích hợp nhưng sau đó chuyển người trợ giúp triển khai thành cộng tác viên. Kiểm tra, tái cấu trúc, giải nén, lặp lại. Nhưng tất nhiên nó phụ thuộc vào việc bạn muốn đi bao xa. Tôi thích lớp học của tôi nhỏ.
Anthony Pegram

11

Phương thức công khai là giao diện của lớp. Ai đó quan tâm đến việc sử dụng lớp học của bạn sẽ chỉ quan tâm đến giao diện. Từ quan điểm của một người dùng lớp, sẽ rất hữu ích khi có các phương thức công khai trước tiên để giảm việc cuộn.


5

Trong C và C ++, các phương thức trợ giúp thường được đặt lên hàng đầu vì sau đó bạn không cần khai báo. Rất nhiều người mang thói quen đó sang các ngôn ngữ khác, nơi nó không thành vấn đề.

Tôi thích các phương thức công khai trên đầu vì thông thường khi tôi mở tệp tôi đang tìm giao diện chung. Tôi không muốn phải cuộn qua tất cả các chi tiết thực hiện. Nó cũng là phong cách phổ biến nhất mà tôi từng thấy, vì vậy có thể nói đó là quy ước.


2

Tôi thích thứ tự các phương thức trong một lớp dựa trên khả năng đọc và ngữ cảnh, không phải khả năng hiển thị.

tức là phương thức 'mở' có thể thuộc về trước khi 'đóng'. Nếu hai phương thức công khai 'a' và 'b' gọi một 'c' riêng tư và chúng là những phương thức duy nhất gọi nó - thì tôi muốn 'c' ở bên cạnh chúng.

Tôi không nghĩ rằng một quy ước đặt hàng phương pháp dựa trên khả năng hiển thị là một điều tốt.


1

Tôi có xu hướng thích nắm bắt các lớp học của mình, nơi các thành viên được liệt kê theo thứ tự quan trọng / khả năng hiển thị (ở đây theo tầm quan trọng tôi có nghĩa là có tác động trực tiếp đến giao diện công cộng).

Do đó, các chức năng riêng tư có xu hướng bị đẩy xuống.

Có những trường hợp ngoại lệ, trong đó tôi cũng sẽ có xu hướng nhóm các chức năng tương tự lại với nhau để có thể tìm thấy các chức năng riêng tư nhỏ xen kẽ với các công cụ công cộng.

Đây là, như bạn đã nói, một vấn đề của hương vị.

Tuy nhiên, khi làm việc với mã không phải của tôi, tôi sẽ thử làm theo bất kỳ quy ước nào được sử dụng trong dự án.

Một cách hay mà tôi thấy để theo dõi điều này là (giả sử ở đây bạn làm việc với Eclipse) tạo một cấu hình định dạng mã và xuất nó với nguồn dự án và cam kết điều khiển nguồn. Theo cách đó, quy ước mã mới nhất và lớn nhất cho dự án chỉ là một vài cú nhấp chuột để thiết lập và tạo ra một mánh khóe của CTRL-SHIFT-F mà bạn cam kết sẽ ngăn chặn rất nhiều tranh luận.

Phần thưởng thêm vào khi sử dụng trình định dạng tự động là bạn có thể thực hiện mọi việc theo bất kỳ quy ước nào khiến bạn hài lòng và chỉ cần định dạng mã trước khi cam kết. YMMV tùy thuộc vào quy ước và công cụ định dạng.

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.