私は非常に単純なシナリオを持っています。私のサイトのユーザーは、月額会員または年会費のいずれかになります
public class User
{
public string UserName { get; set; }
public MembershipType MembershipType { get; set; }
}
public enum MembershipType
{
MONTHLY,
ANNUALLY
}
メンバーシップに応じて、異なる課金戦略を適用します。
public interface IBillingStrategy
{
void Bill(User user);
}
if (user.MembershipType == MembershipType.ANNUALLY)
{
_billingStrategy = new AnnualBillingStrategy();
}
else if (user.MembershipType == MembershipType.MONTHLY)
{
_billingStrategy = new MonthlyBillingStrategy();
}
これは非常に単純明快です。今度はビジネスがやって来て、「友人のボブの面倒を見たいので、彼の請求書を他の人とは少し違った方法で計算してほしい!」と言います。
したがって、このパターンを続ければ、BobBillingStrategy を作成できます。次に、いくつかのロジックを追加できます。ボブを識別する方法が 2 つあります。
if (user.UserName.Equals("bob"))
{
_billingStrategy = new BobBillingStrategy();
}
ユーザー名をハードコーディングしているため、これは汚いと感じます。運が良ければ、新しいユーザーが作成されます。したがって、IsBob というブール値のプロパティをユーザーに追加できます。
if (user.IsBob)
{
_billingStrategy = new BobBillingStrategy();
}
どちらも私には面白いにおいがするようです。最終的にはフレッドとテッドのテストを開始する予定です。上記のコードは機能しますが、よりクリーンなソリューションが必要であると確信しています。
ありがとう