1

オブジェクトが必要とする構成のタイプに応じて、パラメーターのさまざまな組み合わせを渡すコードをリファクタリングしようとしています。例えば:

public MyWidget(string server, string port)
{
...
}

public MyWidget(string server)
{
...
}

public MyWidget(bool createAThing, 
                string nameOfThingToBeCreated, 
                string server, 
                string port)
{
...
}

public MyWidget(bool createAThing, string nameOfThingToBeCreated)
{
...
}

...等

プロパティを使用したくありません。たとえば、ポート プロパティが割り当てられている場合、オブジェクトにサーバーを渡す必要があるなど、いくつかの可能な依存関係を隠しているように感じるからです。パラメータの例にとらわれないでください。これは、私が思いついたものです。

Builder パターンを見ましたが、必要なものではありません。どんな提案も素晴らしいでしょう!

.NET 2.0 を使用しています

4

2 に答える 2

0

構成オブジェクトを使用して、それをコンストラクターに渡すことができます。このようなもの:

public class WidgetOptions
{
    public string Server { get; set; }
    public string Port { get; set; }
    ... 
}

public class MyWidget
{
    public MyWidget(WidgetOptions options)
    {
         Server = options.Server;
         Port = options.Port;
         ...
    }
}
于 2012-07-31T20:16:32.663 に答える
0

実際、オブジェクトが半分構成された状態にならないように常に「有効な」オブジェクトを作成することが目的である場合は、Builderパターンが適切です。ビルダーは、すべてが割り当てられるまでデータポイントを保持し、その後、完全に構成されたオブジェクトを一度に作成できます。

しかし、開発者がドキュメントを読んで何を構成するかを知っているとは思わないようです...ドキュメントを提供しますよね;)

その場合、おそらく、最終的なオブジェクトが必要とする「モード」に関連するプロパティのみを公開するビルダーのセットを提供します。

したがって、このようなもの(実際にモデル化しようとしているものについてのヒントを提供しなかったため、擬似コードと構成)

WidgetBuilder
+ whatever properties are common to all widget creation
+ MakeWidget

VectorWidgetBuilder : WidgetBuilder
+ get/set Lines
+ MakeWidget 

BitmapWidgetBuilder : WidgetBuilder
+ get/set Image
+ MakeWidget 

AnimatedWidgetBuilder : WidgetBuilder
+ get/set Images
+ get/set FrameRate
+ MakeWidget 

これのバリエーションは、マスターモラリティがそれらを呼んだように、これらの順列をさまざまなものとして定義することWidgetOptionsですが、オプションの各異なるセットは独自のクラスです。したがって、、、を持っている可能性があり、VectorWidgetOptionsそれは関連するプロパティのセットを公開するだけです。BitmapWidgetOptionsAnimatedWidgetOptions

于 2012-08-01T13:29:53.213 に答える