そこで、最近、システム設計に関する 1 つの質問に出くわしました。以下の設計に従って、3 台の車があり、そのうち 2 台はオート パイロット、2 台はオート ローンチが可能です。
問題は、クラス構造をどのように設計するかということです。また、Launch for Suv などのサンプル メソッドを提供し、単体テストを提供します。
だから-それに答えるために、私は以下のようなものを思いつきました:
public class BaseCar
{
// all common properties
int height, width, length;
string color etc.
}
public class Suv : BaseCar
{
LaunchCar LaunchSuv {get; set;}
// Lets say we use DI to inject ctor
Suv(IAutoLaunch autoLaunch)
{
LaunchSuv = autoLaunch;
}
}
Interface IAutoLaunch
{
bool Launch();
}
public class LaunchCar : IAutoLaunch
{
// ctor based on car type
LaunchCar(CarType)
{
}
// Implementation of Launch based on Car Type
bool Launch()
{
// successfully launch car here..
return true;
}
}
最後に、Suv を起動したいとしましょう。その場合、LaunchSuv.Launch(); のようなことができます。
- 私の解決策が正しい方向にあるかどうかはわかりません。もしそうなら、改善の余地はありますか?
参考までに - AutoPilot と AutoLaunch に別々のインターフェイスを用意することにした理由は、常に 3 台のうち 1 台の車が両方の機能要件を備えていないためです。ベース車で両方のメソッドを宣言すると、不要なすべての車に不要な両方のメソッドが含まれます-この理由が良い設計なのか、それほど重要でないのかわかりません!! また、SUV を例に挙げましたが、セダンとクーペについても同様のクラス構造を導き出すことができます。