2016-10-07 5 views
-1

こんにちは この例のベストプラクティスコードがあるかどうか、またはより簡単にするためのヒントを知りたい。 すべてのクラスはChoixの子クラスですが、すべてのメソッドは子クラスでオーバーライドされます。 私はこれ以上の助けをありがとう/クラスがChoixのとメソッドの子クラスを適切に上書きされている場合は、何を提案することは動作するはず同じ親クラスの子クラス間の切り替えを最適化する

string arguments = args[0].ToLower(); 
bool load; 
bool lauch; 
bool result; 
switch (arguments) 
{ 
case "AddTenant": 
    AddTenant AddTenant = new AddTenant(); 
    load = AddTenant.Load(); 
    lauch = AddTenant.Lauch(); 
    result = AddTenant.Result(); 
    break; 
case "BackupDb": 
    BackupDb BackupDb = new BackupDb(); 
    load = BackupDb.Load(); 
    lauch = BackupDb.Lauch(); 
    result = BackupDb.Result(); 
    break; 
case "ExtractTenant": 
    ExtractTenant ExtractTenant = new ExtractTenant(); 
    load = ExtractTenant.Load(); 
    lauch = ExtractTenant.Lauch(); 
    result = ExtractTenant.Result(); 
    break; 
case "InstallDb": 
    InstallDb InstallDb = new InstallDb(); 
    load = InstallDb.Load(); 
    lauch = InstallDb.Lauch(); 
    result = InstallDb.Result();; 
    break; 
case "RestoreDb": 
    RestoreDb RestoreDb = new RestoreDb(); 
    load = RestoreDb.Load(); 
    lauch = RestoreDb.Lauch(); 
    result = RestoreDb.Result(); 
    break; 
case "UpgradeTenant": 
    UpgradeTenant UpgradeTenant = new UpgradeTenant(); 
    load = UpgradeTenant.Load(); 
    lauch = UpgradeTenant.Lauch(); 
    result = UpgradeTenant.Result(); 
    break; 
default: 
    Help Help = new Help(); 
    load = Help.Load(); 
    lauch = Help.Lauch(); 
    result = Help.Result(); 
    break; 
} 
Console.WriteLine(load+" "+lauch+" "+result); 
+0

は、など様々なIMPL 'ExtractTenant'、' InstallDb'を行います同じインタフェースを使用できますか?または、それらに 'Load'、' Lau(n)ch'、 'Result'メソッドと同じインターフェースを実装させることができますか? – MAV

答えて

0

に答えるChoixのChoixの=新しいAddTenantと試みたが、成功 なしの場合:

string arguments = args[0].ToLower(); 

Choix choix; 
switch (arguments) 
{ 
    case "AddTenant": 
     choix = new AddTenant(); 
     break; 
    case "BackupDb": 
     choix = new BackupDb(); 
     break; 
    case "ExtractTenant": 
     choix = new ExtractTenant(); 
     break; 
    case "InstallDb": 
     choix = new InstallDb(); 
     break; 
    case "RestoreDb": 
     choix = new RestoreDb(); 
     break; 
    case "UpgradeTenant": 
     choix = new UpgradeTenant(); 
     break; 
    default: 
     choix = new Help(); 
     break; 
} 

bool load = choix.Load(); 
bool lauch = choix.Lauch(); 
bool result = choix.Result(); 

Console.WriteLine(load + " " + lauch + " " + result); 

これは、あなたのクラスは次のように見ているべきであるかのオプションです:

abstract class Choix 
{ 
    public abstract bool Load(); 
    public abstract bool Lauch(); 
    public abstract bool Result(); 
} 

class AddTenant : Choix 
{ 
    public override bool Load() 
    { 
     // Load ... 
     return true; 
    } 

    public override bool Lauch() 
    { 
     // Lauch ... 
     return true; 
    } 

    public override bool Result() 
    { 
     // Result ... 
     return true; 
    } 
} 
+0

ありがとうございます。 私は要約を書いていません。だからそれは良いです。 –

+0

必ずしも抽象的である必要はありませんが、少なくとも仮想メソッドでなければならないので、それらをオーバーライドすることができます。 –

関連する問題