我的User
模型具有introduced_by
属性。根据该属性值,我以不同的方式计算我的佣金。什么是最好,最灵活的方式?
我应该进行切换,还是将所有内容放在平面文件中?另外,我应该创建一个Commission
模型吗?
答案 0 :(得分:5)
这是一个非常广泛的问题,因为没有代码也没有例子。但是,它似乎是Strategy
设计模式的完美案例。
我要做的是创建一个表示每个特定属性值范围的策略的类。
E.g
PersonalCommission
CompanyCommission
HighValueCommission
DefaultCommission
每个类都有一个方法,假设您可以调用calculate
来传递对象的实例并返回佣金的值。
只要您需要执行计算,只需根据用户属性初始化新的Commission
策略对象,然后在其上调用calculate
。
您甚至不必使用开关,因为您可以动态初始化类。
strategy = "#{user.introduced_by}Commission".constantize
strategy.new.compute(whatever)
当然,这只是一个非常简单的例子,你必须适应你的需要。