最近、システム設計に関して1つの質問が出ました。 以下のデザインでは、3台のうち2台がオートパイロットを持ち、2台がオートパイロットを持つことができます。システム設計 - 自動車用のクラス構造を作成する - オブジェクト指向
したがって、どのようにクラス構造を設計しますか?
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のために起動し、サンプルの方法を提供し、ユニットテストを提供します最後にSuvを起動したいと言うと、 その場合はLaunchSuv.Launch()のようなことができます。- 解決策が正しいかどうかわかりません。それがあれば、改善の余地はありますか?
FYI - AutoPilotとAutoLaunchのインターフェースを別にすることに決めた理由は、機能要件が両方ともない3台のうち1台が常に存在するからです。もし私が両方の方法を宣言すれば、ベースカーでは、不要なすべての車に、私が望んでいない両方の方法があるでしょう - この理由が良いデザインか重要でないかはわかりません!! また、私はちょうどSUVを撮ったばかりです。類似のクラス構造はセダンとクーペのために導き出すことができます。
の基底クラスのサブクラス - しかし、ここで議論するという考えは、知識の交換をすることです。あなたが持っている絵が問題文になっていて、デザインをお願いしました。 :) – vran
@vran申し訳ありませんが、明示的に言及しておく必要があります、私は私の答えに留意してあなたのデザインに同意することを暗示してきました。もう少し複雑な使用例を望んでいたら、デザインに関する意見がちょっと違うかもしれません。 –