コードは、コードの作成と管理の新しい方法(私にとっては)の小さな出発点です。私が何週間か緩んで、終わりにはいっていることを前に述べる前に、私は最初にここで "ストレステスト"をする方が良いと思ったばかげた考えでした。C#で異なるクラスバージョンを管理するためにFactoryメソッドのデザインパターンを使用することをお勧めしますか?
ここにその考えがあります。 Client(Envoker)クラスがServer(いくつかのサービスを提供するクラス - 以下の例ではControllerと呼ばれます)を使用するときに、クライアントはタイプの依存性があるたびに、クライアントは静的メソッドを使用して、この名前は変更する必要はありません。たとえば、CreateDynamicTextBox()またはRunProcedureGetDataSet()は、ファクトリが要求されたバージョンのServerクラスを提供する構成オブジェクトを渡します。したがって、十分なバージョンのサーバーが安定している新しい機能を追加する必要がある場合(またはそのロジックを変更する必要がある場合)、新しいサーバークラスのバージョンが記述されます。提案された利点は、一般的な方法によるフローの保存と「設定」オブジェクトの受け渡しになります。
これは悪い考えですか?はいの場合はなぜですか?このアプローチで肯定的なものは何ですか?
using System;
namespace ControllerFactory
{
class ClientEnvoker
{
static void Main (string[] args)
{
Console.WriteLine (" START ");
ClientEnvoker objClientEnvoker = new ClientEnvoker();
ControllerFactory objControllerFactory = new ControllerFactory();
Console.WriteLine (" RUN METHOD 1 WITH CONTROLLER 1 WITH CONFIG 1 ");
objControllerFactory.GenericMethodName (ControllerFactory.CFSetter.First);
Console.WriteLine (" RUN METHOD 2 WITH CONTROLLER 2 WITH CONFIG 2 ");
objControllerFactory.GenericMethodName (ControllerFactory.CFSetter.Second);
Console.WriteLine (" RUN METHOD 3 WITH CONTROLLER 3 WITH CONFIG 3 ");
objControllerFactory.GenericMethodName (ControllerFactory.CFSetter.Second);
Console.WriteLine (" END HIT A KEY TO EXIT ");
Console.ReadLine();
} //eof method
} //eof class
class ControllerFactory
{
public enum CFSetter : int
{
First = 1,
Second = 2 ,
Third = 3
}
public void GenericMethodName (CFSetter objCFSetter)
{
Controller c = this.FactoryMethod (objCFSetter);
c.ConcreteMethod();
} //eof method
public Controller FactoryMethod (CFSetter objCFSetter)
{
Controller controllerReturn = null;
switch (objCFSetter)
{
case CFSetter.First:
controllerReturn = new Controller1();
break;
case CFSetter.Second:
controllerReturn = new Controller2();
break;
case CFSetter.Third:
controllerReturn = new Controller3();
break;
default:
controllerReturn = new Controller1();
break;
}
return controllerReturn;
}
} //eof class
#region Controllers
public abstract class Controller
{
public abstract void ConcreteMethod();
}
public class Controller1 : Controller
{
public override void ConcreteMethod()
{
Console.WriteLine ("Controller1 screams according to version 1 logic");
}
} //eof class
public class Controller2 : Controller
{
public override void ConcreteMethod()
{
Console.WriteLine ("Controller2 screams according to version 2 logic");
}
} //eof class
public class Controller3 : Controller
{
public override void ConcreteMethod()
{
Console.WriteLine ("Controller3 screams according to version 3 logic");
}
} //eof class
#endregion Controllers
} //eof namespace
ありがとうございました。私はあなたが答える意味のコードを貼り付けなければなりませんでした(コメントにも構文強調があるはずです。) –