Ví dụ bạn đưa ra thực sự tốt theo quan điểm của tôi. Bạn đang khai báo các lớp bên trong , vì vậy việc giữ chúng trong cùng một tệp là hoàn toàn hợp lý . Cách duy nhất để làm điều này là làm cho Items
lớp của bạn thành một lớp một phần và chia nó thành nhiều tệp. Tôi sẽ xem xét thực hành xấu này. Chính sách chung của tôi cho các lớp lồng nhau là chúng phải nhỏ và riêng tư. Có hai trường hợp ngoại lệ:
- bạn đang thiết kế một cụm lớp (phổ biến hơn trong object-c), do đó có thể hợp lý khi sử dụng cách tiếp cận lớp một phần
- bạn cần một enum chỉ được sử dụng với API công khai của lớp cha. Trong trường hợp này, tôi thích có một enum công khai được khai báo bên trong lớp cha thay vì làm ô nhiễm không gian tên của tôi. Enum là một "enum bên trong" có hiệu quả dẫn đến việc cung cấp cho nó một phạm vi được xác định rõ.
Nếu bạn đặt câu hỏi khác một chút và hỏi về "Tôi có nên đặt từng lớp không gian tên vào tệp riêng của mình không" thì câu trả lời của tôi sẽ là "có".
Khi thiết kế các lớp học, chúng tôi tôn trọng Nguyên tắc Trách nhiệm duy nhất. Đọc mã trở nên dễ dàng hơn rất nhiều nếu hình dạng của nó tuân theo ngữ nghĩa của nó, do đó việc chia tệp theo lớp là hợp lý.
Từ quan điểm cơ học, có một tệp cho mỗi lớp có một số lợi thế. Bạn có thể mở nhiều lớp cùng một lúc trong các cửa sổ khác nhau. Điều này đặc biệt quan trọng vì không có nhà phát triển nghiêm túc nào làm việc với ít hơn hai màn hình. Có thể có bối cảnh ở phía trước đầu của tôi có nghĩa là tôi có thể giữ bối cảnh nhiều hơn trong đầu tôi. (Hầu hết các IDE sẽ cho phép bạn mở cùng một tệp hai lần, nhưng tôi thấy điều này thật bất tiện).
Khía cạnh quan trọng tiếp theo là kiểm soát nguồn và sáp nhập. Bằng cách giữ các lớp riêng biệt, bạn tránh được nhiều rắc rối khi thay đổi cùng một tệp được thực hiện vì các lớp riêng biệt cần được thay đổi.