Trước hết, không có gì là sai bằng cách thực hiện theo cách đó. Nhiều người thích đặt một lớp cho mỗi tiêu đề, nói chung. Nếu bạn không thích xem nhiều tiêu đề, bạn có thể sắp xếp chúng theo thư mục hoặc bộ lọc cây dự án, v.v.
Đây là một câu hỏi về phong cách. Miễn là chức năng bị ảnh hưởng, tùy chọn tốt nhất là chức năng của cảm giác vui nhộn mà bạn có và cũng giống như vậy đối với những người hỗ trợ mã của bạn trên đường. Có lẽ câu trả lời này có thể làm cho cảm giác buồn cười đó đi xuống cho bạn, hoặc có thể không.
Thứ hai, điều này phụ thuộc rất nhiều vào việc sử dụng từng lớp. Nếu các lớp Foo
và Bar
nhỏ, chúng có thể được đặt trong tiêu đề chứa lớp đóng gói. Có lẽ thêm một tuyên bố về phía trước vì lợi ích của lớp cha, và kết thúc khai báo nó ở dưới cùng của tiêu đề. Điểm thưởng nếu tất cả chúng đều liên quan (ví dụ: FooConnection
là một lớp con của Foo
) bởi vì điều này rút ngắn không gian khai báo.
Nếu chúng là các lớp tương đối nhỏ, có thể không có hại trong việc khai báo các lớp học Foo
và Bar
trong định nghĩa lớp cơ sở của chúng. Sau đó, không có FooConnection
- thực tế là Connection::FooConnection
. Trong trường hợp này Connection
không chỉ xác định cơ sở cho FooConnection
, nó sở hữu định nghĩa của nó. Điều đó có nghĩa là mỗi khi bạn sử dụng mã FooConnection
trong mã của mình, bạn đang suy nghĩ trong ngữ cảnh của Connection
.Tôi hiếm khi tự làm, chủ yếu là vì tôi không thích gõ Connection::
mọi lúc, nhưng cũng vì có quá ít trường hợp tôi chỉ sử dụng một lớp trong một ngữ cảnh.
Nếu các lớp được đóng gói là protected
hoặc private
, thì chúng chỉ được sử dụng bởi chính lớp cha mẹ (và friend
lớp và có thể là lớp con, bạn có gì). Sau đó, vì bối cảnh hạn chế được thiết lập và nếu khai báo lớp nhỏ (< 50 hoặc < 100 dòng), bạn có thể khai báo FooConnection
và BarConnection
trong phạm vi Connection
và vẫn duy trì khả năng đọc.
Điểm thưởng: nếu bạn kết thúc khai báo lớp bên trong lớp học, bạn có thể tận dụng việc tách biệt không gian tên. Tôi không biết sử dụng các lớp này, nhưng tôi đoán rằng FooConnection
không phải là kết nối, mà là một số Foo
thuộc về một số Collection
. Vì vậy, bạn có thể khai báo một lớp Foo
và một lớp Bar
cho mỗi số Widget
, Connection
và Config
.
Trong hầu hết các mẫu phổ biến, trông giống như 'Cầu' khi bạn cố gắng tách giao diện của đối tượng ra khỏi triển khai. Liên kết: http://www.dofactory.com/net/bridge-design-pattern. Tôi không biết nếu nó sẽ cải thiện thiết kế, nhưng ít nhất nó có thể cho thấy rằng mô hình của bạn là phổ biến hơn bạn có thể nghĩ. Trừ khi bạn quan tâm đến việc tạo ra các đối tượng, thì bạn cũng nên xem xét Nhà máy Tóm tắt. – Pieter21
Bạn không thể đưa ra lời khuyên, chỉ cần nhìn vào cấu trúc. Chúng ta cần một số thông tin về vai trò của các lớp này và những gì chúng được cho là phải làm và cách chúng tương tác. Nếu đây là một mẫu MVC, tôi không thể nhìn thấy bất cứ điều gì sai với nó từ góc độ này. –
Cầu thang lên thiên đàng. –