[英]The C# namespace and class/sub-class naming conventions when the top namespace contains the base class and inner namespaces contain sub-classes
我正在嘗試為特定的工程應用程序設計一個類庫,我正在努力確保我的類和命名空間命名約定有意義。
我有以下情況:
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
...
}
...
}
代碼的使用方式是需要在同一范圍內引用所有這些類。 可能存在以下情況:
...
Vehicle.Wheel.DoSomething();
Vehicle.Truck.Wheel.DoSomething();
Vehicle.Car.Wheel.DoSomething();
...
在這種情況下,我最好給這些課程更具體的名字
namespace Car{
class CarWheel: Vehicle.Wheel{...} //Car specific Wheel object
...
}
或保留第一個示例中所示的命名,並依賴於命名空間中編碼的信息以便清楚起見? 在后一種方法下,我假設我想在使用這個庫的代碼中明確地使用alaising,對嗎?
擁有以下內容似乎更令人不滿:
Vehicle.Car.CarWheel
要么
Vehicle.Truck.TruckEngine
但我也希望有非常具有描述性和特定性的類名。
從哲學上講,我在問的是,在考慮類名是否足夠描述時,是否將名稱空間作為類名的一部分。
通常,名稱空間是多元化的,以免與類名沖突(例如,您可能需要名為Vehicle
和Car
類),因此我傾向於使用名稱空間,如下所示:
namespace Vehicles;
namespace Vehicles.Cars;
namespace Vehicles.Trucks;
至於類的名稱,通常在類名前加上特化,特別是如果它們可能一起使用,那么你最終會得到類似的東西:
class CarWheel : Wheel
class TruckWheel : Wheel
您可以在.NET Framework中的任何位置看到這種類型的“冗余”,例如在System.Xml
命名空間中,幾乎所有類都以Xml
為前綴,或者在System.Data.SqlClient
命名空間中,大多數類都以Sql
為前綴。 這意味着您可以using
指令導入名稱空間,然后不必在整個代碼中對類名稱進行完全限定,例如,以下哪個更具可讀性?
Vehicles.Cars.Wheel wheel = new Vehicles.Cars.Wheel();
要么
CarWheel wheel = new CarWheel();
兩者都做得很明顯,但第二個要短得多。
請注意,如果您在名稱中包含特化,那么您可能會發現您不需要所有嵌套的命名空間( .Cars
, .Trucks
等),如果它們通常一起使用會變.Trucks
痛苦,所以每個使用它們的文件必須導入所有名稱空間,例如
using Vehicles;
using Vehicles.Cars;
using Vehicles.Trucks;
using Vehicles.SomethingElse;
using Vehicles.YetAnotherThing;
如果您發現同一堆using
指令位於每個文件的頂部,則將這些類折疊為單個命名空間。 您通常包括預期在單個命名空間中一起使用的所有相關功能,並且僅將嵌套的功能用於擴展基本命名空間但不常使用的功能。
我會盡量避免在不同的命名空間中重用名稱,特別是如果客戶端可能想要在同一個程序中使用這兩個名稱。
你真的需要Car
, Truck
等命名空間嗎? 所有這些命名空間聽起來更像是應該是類而不是命名空間。 也許在你的真實情況下,它更有意義......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.