1

最近、システム設計に関して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; 
    } 

} 

をので:下記のようにのようにそれに答えるために、私は何かを思い付いた - また は

enter image description here

がそう言うことができますのSUVのために起動し、サンプルの方法を提供し、ユニットテストを提供します最後にSuvを起動したいと言うと、 その場合はLaunchSuv.Launch()のようなことができます。

  • 解決策が正しいかどうかわかりません。それがあれば、改善の余地はありますか?

FYI - AutoPilotとAutoLaunchのインターフェースを別にすることに決めた理由は、機能要件が両方ともない3台のうち1台が常に存在するからです。もし私が両方の方法を宣言すれば、ベースカーでは、不要なすべての車に、私が望んでいない両方の方法があるでしょう - この理由が良いデザインか重要でないかはわかりません!! また、私はちょうどSUVを撮ったばかりです。類似のクラス構造はセダンとクーペのために導き出すことができます。

答えて

1

本当にこの文脈では「正しい」答えはありません。アーキテクチャ上の決定は、スケーラビリティ、アジャイルなどがあれば、問題があればうまくいくと考えられます。同じデザインが別の問題に悪影響を与える可能性があります。

したがって、「ソフトウェアにはどんな機能が期待されていますか、また、指定されたデザインを使用して実装するのはどれくらい難しいのですか?」という質問になります。あなたの問題の文脈がないので(私は「もっと大きな絵」を意味する)、この質問に答えることはできません。

+0

の基底クラスのサブクラス - しかし、ここで議論するという考えは、知識の交換をすることです。あなたが持っている絵が問題文になっていて、デザインをお願いしました。 :) – vran

+0

@vran申し訳ありませんが、明示的に言及しておく必要があります、私は私の答えに留意してあなたのデザインに同意することを暗示してきました。もう少し複雑な使用例を望んでいたら、デザインに関する意見がちょっと違うかもしれません。 –

0

提案、AutoLaunchおよびAutoPilotは、BaseCarの '機能'と見なすことができ、デフォルト値をfalseとして、その一部にすることができます。 CarTypeがこれらのいずれかを持っていれば、デフォルト値を上書きするインターフェースを実装することができます。 休憩それはデザイナー/建築家、彼/彼女が進めたいとどのくらいの柔軟性を望むかによって異なります。

+0

BaseCareでAutoLaunch&AutoPilotを使用すると、柔軟でスケーラブルなデザインが得られません。何が起きるかというと、他の 'N' diff機能を追加したいとします。また、私は2つのセント、 'フラッグ'ベースのデザインを受け入れる必要があるかどうかはわかりません! – vran

1

私はあなたのアプローチに同意します。

  • 基底クラス、現在範囲外であるコア機能
  • 各機能(自動起動するためのインターフェイスは、同様に船の想像ですが、実装しますが、中にここで、レシピは持っていることです私は「正しい」は主観的であるという事実に同意するあなたは賢明なあなたのインターフェイスを定義した場合、あなたのデザインが同様に非自動車をサポートする未来)
  • 有効な各機能の組み合わせ
+0

私のアプローチはデコレータパターンを活用する方向に向かっていましたが、私はそれが必須ではないかもしれないと思っていました。しかし、私たちはどちらも同じページにいると思います!! – vran

+0

@vran、はい、そうです。この投稿があなたの質問に答えると思うなら、あなたは矢印の下にあるチェックボックスをクリックしてそれを受け入れることができます。 –

関連する問題