【问题标题】:Business logic dependent on model attribute依赖模型属性的业务逻辑
【发布时间】:2015-12-04 14:30:36
【问题描述】:

我有一个具有introduced_by 属性的User 模型。基于该属性值,我以不同的方式计算我的佣金。最好、最灵活的方法是什么?

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

【问题讨论】:

  • 嘿,迈克,有解决您问题的答案,请通过接受将其作为正确答案进行检查(答案左侧的复选标记)。

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


【解决方案1】:

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

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

例如

PersonalCommission
CompanyCommission
HighValueCommission
DefaultCommission

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

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

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

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

当然,这只是一个非常简单的示例,您必须根据自己的需要进行调整。

【讨论】:

  • 我自己说得再好不过了。不使用开关符合“告诉不问”的理念。
  • 好东西,好答案!嘿 Simone,如果您有时间,请看一下my question here。这不紧急,只是我不明白的事情。提前谢谢!
  • 其实我还有两个问题。我应该在哪个文件夹中放置不同的策略?如果我有一个默认的佣金策略,我还应该有一个佣金接口,还是可以让我的 defaultCommission 作为基础实现?
  • 请打开不同的问题。
  • 非常感谢 Simone,我刚刚做到了。 stackoverflow.com/questions/34121051/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2012-04-25
  • 2016-06-28
  • 1970-01-01
  • 2010-10-02
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多