2011-09-15 22 views
5

Tôi đã xem xét một số mã được phát triển bởi một nhóm ngoài khơi. Tôi thấy ít nhất một "giao diện không đổi" cho mỗi mô-đun được xác định. Ví dụ (không thực thế giới):Lựa chọn thay thế duyên dáng nhất cho giao diện không đổi là gì?

public interface RequestConstants{ 
    //a mix of different constants(int,string,...) 
    public static final int MAX_REQUESTS = 9999; 
    public static final String SAMPLE_REQUEST = "Sample Request"; 
} 

mỗi sự hiểu biết của tôi nó là một mô hình chống như những không bất kỳ tiện ích trong thời gian chạy, và nên tránh hoặc giải quyết theo một cách khác. Cách thanh lịch để đại diện cho điều này là gì? Có thể sử dụng enums thay thế không?

+0

Wow! bỏ phiếu xuống. nhưng tại sao? –

+0

Tôi khuyên bạn nên kiểm tra nghiêm ngặt chức năng lập trình của họ và không phải lo lắng về các vấn đề như thế này cho đến khi bạn tìm thấy chức năng bị hỏng. – emory

Trả lời

1

En enum có lẽ không phải là một ý tưởng hay trừ khi tất cả các tham số đều liên quan chặt chẽ. Với hai tham số trong ví dụ của bạn, tôi muốn nói rằng chúng không đủ chặt chẽ liên quan đến việc đủ điều kiện như là một enum.

Nhưng không nhất thiết phải là một ý tưởng tồi để bao gồm lớp/giao diện hằng số như thế này. Nó có lợi thế là được tập trung, có nghĩa là công cụ cấu hình này có thể dễ dàng được chuyển ra ngoài chương trình - ví dụ như một tệp thuộc tính, bộ giải mã dòng lệnh, cơ sở dữ liệu hoặc thậm chí giao diện socket - với tác động tối thiểu các lớp khác. Nó thực sự là một câu hỏi về hướng thiết kế sẽ thực hiện. Trừ khi bạn đang nghĩ đến việc đi xuống con đường đó, tuy nhiên, tôi muốn nói kết thúc tĩnh trong các lớp học, nơi các thông số tương ứng được sử dụng là con đường để đi, như đã được đề xuất rồi.

+0

Tôi đồng ý. Sử dụng enums và hoặc các lớp thay vì giao diện có thể phá vỡ mã hiện có. Tôi không nhìn thấy nó như là nghiêm trọng của một mô hình chống. – emory

0

Chuyển giao diện thành lớp final với hàm tạo private.

+1

Nó sẽ là tốt đẹp ... –

6

Tôi thích đặt hằng số trong lớp học, nơi họ làm cho chúng thích hợp nhất, và sau đó nếu tôi để chỉ cho họ ở nơi khác, chỉ cần làm như vậy - thể sử dụng nhập khẩu tĩnh nếu có ý nghĩa (ví dụ cho Math.PI).

Lý do thực sự duy nhất để đặt hằng số trong giao diện là cho phép bạn "triển khai" giao diện không có phương pháp và truy cập vào các hằng số thông qua tên đơn giản của chúng mà không cần bất kỳ chứng chỉ nào khác. Nhập tĩnh sẽ xóa lý do đó.

+1

Nhập khẩu tĩnh không chính xác đạt được hiệu quả mong muốn trong một số trường hợp. Nếu tôi có nhiều lớp trong tệp .java (ví dụ: tệp lồng nhau), mỗi lớp có thể có các hằng số riêng và một số có thể có các tên trùng lặp. Sử dụng nhập tĩnh sẽ có nghĩa là xung đột. – emory

+0

@emory: Đúng. Mặt khác, tôi sẽ không muốn sử dụng giao diện lừa trong trường hợp đó anyway - có cùng một tên liên tục có nghĩa là những thứ khác nhau trong cùng một tập tin âm thanh như một ý tưởng tồi với tôi. –

+0

@Jon Skeet - "Lý do thực sự duy nhất để đặt hằng số trong giao diện là cho phép bạn" triển khai "giao diện không có phương pháp và truy cập vào các hằng số thông qua tên đơn giản của chúng" - Âm thanh rất thú vị. Nhưng đó không phải là một thực tế tồi tệ hơn từ một quan điểm của OO - nó có liên quan như thế nào trong thế giới thực? - cảm ơn câu trả lời của bạn. –

0

Sử dụng lớp không thể giải thích cuối cùng, tức là một lớp có hàm tạo riêng.

+1

... nếu các downvotes trên những câu trả lời đã được giải thích. –

Các vấn đề liên quan