有一个接口IRule带有一个方法Validate()和它的几个实现此方法的派生类。类有不同的参数(类型和参数个数)。此外,还有一个名为IPaymentProcessor的核心接口,它必须验证所有现有的规则。 我目前的任务是实现像工厂或容器这样的高级抽象,它理想地使用不同的构造函数创建所有规则,然后将它们作为IEnumerable返回以迭代并应用每个规则进行卡验证。具有不同构造函数的对象的工厂
是否有可能在.NET中使用Ninject或任何其他基于反射的库来完成任务? (AutoFixture,Moq等)
这是一个当前的解决方案,我想改进。
public interface IRule
{
bool Validate();
}
class Rule1 : IRule
{
public Rule1(string name) { ... }
bool Validate() { ... }
}
class Rule2 : IRule
{
public Rule1(int month, int year) { ... }
bool Validate() { ... }
}
interface IPaymentProcessor
{
bool MakePayment(CreditCard card);
}
class MyPaymentProcess : IPaymentProcessor
{
public bool MakePayment(CreditCard card)
{
// Here is pitfall. If we need to add/remove another rule or one of
// ctors changed, then we have to edit this place, which isn't flexible
var rules = new List<IBusinessRule>() { new Rule1(card.Name), new Rule2(card.Month, card.Year) };
foreach(var r in rules) if(!r.Validate()) { return false; }
return true;
}
}
也许你需要的是与bool验证(CreditCard卡)规则的接口,而不仅仅是验证()。 – Evk
是的,它应该是非常方便的,但我已经从其他人那里得到这个代码作为一个任务,并且不能修改它。 –
无论如何将名称和其他数据传递给构造函数都不行,您需要传递整个CreditCard来以一种或另一种形式进行管理。 – Evk