业务逻辑依赖于模型属性

时间:2015-12-04 14:30:36

标签: ruby-on-rails ruby model-view-controller

我的User模型具有introduced_by属性。根据该属性值,我以不同的方式计算我的佣金。什么是最好,最灵活的方式?

我应该进行切换,还是将所有内容放在平面文件中?另外,我应该创建一个Commission模型吗?

1 个答案:

答案 0 :(得分:5)

这是一个非常广泛的问题,因为没有代码也没有例子。但是,它似乎是Strategy设计模式的完美案例。

我要做的是创建一个表示每个特定属性值范围的策略的类。

E.g

PersonalCommission
CompanyCommission
HighValueCommission
DefaultCommission

每个类都有一个方法,假设您可以调用calculate来传递对象的实例并返回佣金的值。

只要您需要执行计算,只需根据用户属性初始化新的Commission策略对象,然后在其上调用calculate

您甚至不必使用开关,因为您可以动态初始化类。

strategy = "#{user.introduced_by}Commission".constantize
strategy.new.compute(whatever)

当然,这只是一个非常简单的例子,你必须适应你的需要。