私たちのアプリでは、ボタンなどの UI 要素の画像を読み込む必要があることがよくあります。各画像には、横/縦、無効/有効、プッシュ/通常、さらには白/赤/グレーなどの色など、いくつかのバリエーションがあります。読み込みコードには、どのバリアントを読み込むかを指示するいくつかの変数があります。例として、次のサンプル ボタン クラスを見てください。
enum {
SampleImageButtonRed,
SampleImageButtonWhite
} SampleImageButtonStyle;
@interface SampleImageButton : NSObject
@property(assign) SampleImageButtonStyle style;
@property(assign) BOOL landscape;
@property(assign) BOOL disabled;
@property(assign) BOOL pushed;
@end
ここで、読み込みコードは、ボタンの種類に応じて、プロパティと loadbutton_white_pushed.png
などを確認する必要があります。button_red_landscape.png
コードは概念的には単純です (文字列の書式設定と[UIImage imageNamed:]
呼び出しのみ) が、同時に多くのノイズとボイラープレートがあります。
これを簡単にする単純なヘルパー クラスを考えてみました。クラスは、プロパティを結果の画像名にマッピングするルールを取得し、実際のプロパティ値を取得して、適切な画像を返します。何かのようなもの:
ImageBuilder *builder = [[ImageBuilder alloc] init];
[[[builder record] setPathTag:@"button_red"] setButtonStyle:SampleImageButtonRed];
[[[builder record] setPathTag:@"button_white"] setButtonType:SampleImageButtonWhite];
[[[builder record] setPathTag:@"disabled"] setDisabled:YES];
[[[builder record] setPathTag:@"enabled"] setDisabled:NO];
[[[builder record] setPathTag:@"landscape"] setLandscape:YES];
[[[builder record] setPathTag:@"portrait"] setLandscape:NO];
そして、私は次のように呼びます:
// would load “button_red_enabled.png”
UIImage *texture = [[[builder image]
setButtonStyle:SampleImageButtonRed]
setDisabled:NO];
現時点では、追加された複雑さに見合う価値があるかどうかには関心がありません。API の設計と実装に関心があります。「記録」API は機能すると思いますが、「クエリ」API は機能しないため、呼び出しをチェーンしたり、画像をsetButtonStyle:
返しvoid
たりすることはできません。
この問題に有効な汎用 API のアイデアはありますか?