2009-08-19 27 views
5

Tôi đang cố gắng thiết kế một thư viện lớp cho một ứng dụng kỹ thuật cụ thể và tôi đang cố gắng đảm bảo rằng lớp học của tôi & quy ước đặt tên không gian tên có ý nghĩa.Không gian tên C# và quy ước đặt tên lớp con và lớp con khi vùng tên trên cùng chứa lớp cơ sở và không gian tên bên trong chứa các lớp con

Tôi có tình huống sau đây:

namespace Vehicle{ 

    class Wheel{...} //base class for Wheel objects 
    class Engine{...} //base class for Engine objects 
    ... 
    namespace Truck{ 
     class Wheel: Vehicle.Wheel{...} //Truck specific Wheel object 
     class Engine: Vehicle.Engine{...} //Truck specific Engine object 
     ... 
    } 

    namespace Car{ 
     class Wheel: Vehicle.Wheel{...} //Car specific Wheel object 
     class Engine: Vehicle.Engine{...} //Car specific Engine object 
     ... 
    } 
    ... 
} 

Mã này được sử dụng theo những cách mà tất cả các lớp này sẽ cần phải được tham chiếu từ trong phạm vi tương tự. Tình hình sau đây sẽ có khả năng:

... 
Vehicle.Wheel.DoSomething(); 
Vehicle.Truck.Wheel.DoSomething(); 
Vehicle.Car.Wheel.DoSomething(); 
... 

Trong những trường hợp, tôi khấm khá hơn cho các lớp tên cụ thể hơn

namespace Car{ 
    class CarWheel: Vehicle.Wheel{...} //Car specific Wheel object 
    ... 
} 

hoặc để lại việc đặt tên như trong ví dụ đầu tiên và dựa vào các thông tin được mã hóa trong không gian tên để làm rõ? Theo cách tiếp cận thứ hai, tôi cho rằng tôi muốn sử dụng sự tăng cường cho sự rõ ràng trong mã mà sử dụng thư viện này, sửa chữa?

Dường redundent phải có:

Vehicle.Car.CarWheel 

hoặc

Vehicle.Truck.TruckEngine 

nhưng tôi cũng muốn có tên lớp rất mô tả và cụ thể. Về mặt lý thuyết, điều tôi đang hỏi là có bao gồm không gian tên như là một phần của tên lớp khi xem xét liệu một tên lớp có đủ mô tả hay không.

Trả lời

17

Điển hình không gian tên được số nhiều, như vậy là không để va chạm với tên lớp (ví dụ như nó có khả năng bạn sẽ muốn lớp tên VehicleCar) vì vậy tôi muốn được xu hướng sử dụng không gian tên như sau:

namespace Vehicles; 
namespace Vehicles.Cars; 
namespace Vehicles.Trucks; 

Đối với tên của các lớp, nó sẽ là điển hình cho tiền tố tên lớp với chuyên môn, đặc biệt là nếu chúng có khả năng được sử dụng với nhau, vì vậy bạn sẽ kết thúc với một cái gì đó như:

class CarWheel : Wheel 
class TruckWheel : Wheel 

Bạn có thể xem loại này o f 'dự phòng' ở khắp mọi nơi trong Khuôn khổ .NET, ví dụ như trong không gian tên System.Xml hầu như tất cả các lớp đều có tiền tố là Xml hoặc trong không gian tên System.Data.SqlClient nhất có tiền tố Sql. Điều đó có nghĩa là bạn có thể nhập không gian tên bằng chỉ thị using và sau đó không phải đặt tên lớp đủ điều kiện trong suốt mã của bạn, ví dụ: Điều nào sau đây dễ đọc hơn?

Vehicles.Cars.Wheel wheel = new Vehicles.Cars.Wheel(); 

hoặc

CarWheel wheel = new CarWheel(); 

Rõ ràng những gì cả hai đang làm, nhưng thứ hai là ngắn hơn đáng kể.


Lưu ý rằng nếu bạn làm bao gồm các chuyên môn hóa trong tên, sau đó bạn có thể thấy rằng bạn không cần tất cả namespace lồng nhau (.Cars, .Trucks, vv) mà có thể trở nên đau đớn nếu họ thường được sử dụng cùng nhau, và vì vậy mọi tệp sử dụng chúng sẽ phải nhập tất cả các không gian tên, ví dụ

using Vehicles; 
using Vehicles.Cars; 
using Vehicles.Trucks; 
using Vehicles.SomethingElse; 
using Vehicles.YetAnotherThing; 

Nếu bạn thấy chồng này cùng using chỉ là ở phía trên cùng của mỗi tập tin, sau đó sụp đổ các lớp học xuống thành một không gian tên duy nhất. Bạn thường bao gồm tất cả các chức năng liên quan được dự kiến ​​sẽ được sử dụng cùng nhau trong một không gian tên duy nhất và chỉ sử dụng các hàm lồng nhau cho chức năng mở rộng vùng tên cơ sở nhưng ít được sử dụng hơn.

+0

Bit "không gian tên thường được nhiều số nguyên" giúp tôi rất nhiều - cảm ơn! – mskfisher

3

Tôi sẽ thử để tránh sử dụng lại tên trên các không gian tên khác nhau, đặc biệt nếu khách hàng có thể muốn sử dụng cả hai trong cùng một chương trình.

Bạn có thực sự cần không gian tên cho Car, Truck không? Tất cả các không gian tên này nghe có vẻ giống như chúng phải là các lớp so với các không gian tên. Có lẽ trong tình huống thực tế của bạn, điều này có ý nghĩa hơn ...

+0

Vâng, tôi thấy quan điểm của bạn. Tôi nghĩ rằng tình hình mà tôi thực sự có hơi khác một chút nhưng tên miền tôi đang làm trong đó có thuật ngữ rất khó hiểu mà không có nhiều kiến ​​thức cơ bản. Trong trường hợp của tôi, các không gian tên có ý nghĩa như các không gian tên thay vì các lớp. –

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