Cách xử lý các Lớp có cùng tên (các gói khác nhau)


9

Tôi và nhóm R & D của tôi duy trì một cơ sở mã lớn. Chúng tôi đã chia logic kinh doanh của chúng tôi thành nhiều gói. một số trong đó có các lớp với tên giống hệt nhau .

Như bạn có thể đoán, các tên xung đột khi cả hai lớp được tham chiếu trong cùng một tệp Java.


Ví dụ:

com.myapp.model (package)
 - Device (class)
 - ...

com.myapp.data (package)
 - Device (class)
 - ...

Chúng tôi đã có một cuộc tranh luận về những gì thực hành tốt nhất để điều trị những trường hợp này và các lựa chọn sau đây đã đưa ra:

Lựa chọn thứ 1

  • Đổi tên lớp, thêm tiền tố

    ModelDevice
    DataDevice

Lựa chọn thứ 2

  • Sử dụng gói đầy đủ + tên lớp khi cả hai được tham chiếu

    com.myapp.model.Device
    com.myapp.data.Device

Điều gì chính xác hơn về mặt quản lý mã và khả năng mở rộng?

chúng tôi hiện đang trộn lẫn cả hai cách tiếp cận và bắt đầu có sự không nhất quán


Nếu đôi khi nó có thể không thành vấn đề - nếu đó là một mẫu lặp lại, tôi có thể đặt tên cho các lớp chính xác hơn để ngăn nó trở thành một mớ hỗn độn.
assylias

Bạn không biết tôi ghê tởm đến mức nào java.util.Datejava.sql.Date- đặc biệt là vì java.sql.Datelà một lớp con java.util.Datevà rất độc đáo trong các lớp dữ liệu (và không tuần tự hóa độc đáo với JSON).

Tùy chọn 2.1 Luôn sử dụng tên đủ điều kiện, ngay cả khi tên khác không được tham chiếu
Caleth

Câu trả lời:


16

Sử dụng tên gói. Loại vấn đề này chính xác là lý do tại sao Java sử dụng quy ước đặt tên gói mà nó thực hiện. Nó ngăn chặn các loại vấn đề này, cho dù đó là hai đội trong cùng một công ty hay hai đội ở hai phía đối diện trái đất.


1

Cho đến bây giờ bạn có một lớp ModelDevice (Thiết bị trong gói mô hình). Điều gì nếu bạn có một ModelDevice khác cho một phân loại khác? Vấn đề có thể vẫn còn tồn tại và chi phí cũng sẽ tiếp tục tăng.

Mặc dù hiện tại bạn có thể thấy rằng việc đổi tên các lớp sẽ giúp ích rất nhiều, nhưng về lâu dài, sự thay thế được đề xuất là đi trước bằng cách đặt tiền tố cho các tên gói, đó là tiêu chuẩn Công nghiệp.


0

Chỉ cần thêm một khía cạnh chưa được đề cập:

Hãy xem các mẫu sử dụng, tức là các nguồn Java tham chiếu một hoặc cả hai lớp.

IMHO, trong phần lớn các trường hợp, các tệp nguồn chỉ nên tham chiếu một trong các lớp xung đột và từ ngữ cảnh, rõ ràng liệu chúng có xử lý mô hình hoặc thế giới dữ liệu hay không. Nếu khó vì bất kỳ lý do gì, tôi sẽ đổi tên các lớp, vì tôi thường không thích các tên lớp tiền tố gói trong mã nguồn (nó làm giảm khả năng đọc).

Nếu bạn có các tệp nguồn liên quan đến cả hai thế giới, chúng có thể là cầu nối các lớp có khả năng dịch lại giữa hai chế độ xem khác nhau về thế giới và ở đây tôi muốn tìm tên lớp có tiền tố gói.

Nhưng nhìn thấy cả hai lớp Thiết bị trong một nguồn cũng có thể là một gợi ý rằng nguồn đó vi phạm nguyên tắc trách nhiệm đơn lẻ bằng cách trộn các tác vụ từ mô hình và thế giới dữ liệu.

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.