依赖于模型属性的业务逻辑



我有一个具有introduced_by属性的User模型。根据这个属性值,我计算佣金的方式不同。做这件事最好、最灵活的方式是什么?

我应该转换一下,还是把所有东西都放在一个平面文件里?此外,我应该创建一个Commission模型吗?

这是一个非常宽泛的问题,因为没有代码也没有示例。然而,这似乎是Strategy设计模式的完美案例。

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

E.g

PersonalCommission
CompanyCommission
HighValueCommission
DefaultCommission

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

无论您在哪里需要执行计算,只需根据User属性初始化一个新的Commission策略对象,并在其上调用calculate

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

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

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

最新更新