Tôi đang tạo một chương trình sử dụng một vài hằng số. Lúc đầu, mỗi khi tôi cần sử dụng hằng số, tôi muốn xác định nó làSingletons và hằng số
//C#
private static readonly int MyConstant = xxx;
//Java
private static final int MyConstant = xxx;
trong lớp mà tôi cần đến. Sau một thời gian, tôi bắt đầu nhận ra rằng một số hằng số sẽ là cần thiết trong nhiều hơn một lớp.
Tại thời điểm này, tôi đã có 3 choises:
- Để xác định chúng trong các lớp khác nhau mà cần nó. Điều này dẫn đến sự lặp lại. Nếu bởi một số lý do sau này tôi cần phải thay đổi một trong số họ, tôi sẽ phải kiểm tra trong tất cả các lớp để thay thế chúng ở khắp mọi nơi.
- Để xác định một lớp tĩnh/singleton với tất cả các hằng số là công khai.
- Nếu tôi cần một hằng số X trong ClassA, ClassB và ClassC, tôi chỉ có thể xác định nó trong ClassA là công khai, và sau đó có ClassB và ClassC tham chiếu đến chúng. Giải pháp này dường như không tốt cho tôi vì nó giới thiệu nhiều sự phụ thuộc hơn khi các lớp đã có giữa chúng.
Tôi đã kết thúc triển khai mã của mình với tùy chọn thứ hai. Đó có phải là giải pháp thay thế tốt nhất? Tôi cảm thấy tôi có thể thiếu một số lựa chọn khác tốt hơn.
Điều gì khiến tôi lo lắng về việc sử dụng singleton ở đây là nó không rõ ràng đối với người dùng của lớp mà lớp này đang sử dụng singleton. Có lẽ tôi có thể tạo ra một ConstantsClass mà giữ tất cả các hằng số cần thiết và sau đó tôi sẽ vượt qua nó trong constructor cho các lớp học cần nó?
Cảm ơn
chỉnh sửa: Tôi đang sử dụng chủ yếu cho các loại phức tạp, không phải là int và chuỗi. Ít nhất trong trường hợp C# tạo sự khác biệt vì nó có nghĩa là tôi không thể sử dụng từ khóa const
.
Nếu nó ở trong một singleton, họ sẽ không được tuyên bố là tĩnh, tất nhiên. Chúng chỉ được khai báo tĩnh nếu ở trong một lớp tĩnh hoặc đặt bên trong mỗi lớp cần nó. –
Sau đó, các giá trị đó thực sự không phải là ** hằng số ** nữa. Không, quên ý tưởng đơn lẻ. – BalusC