最近,我正在构建一个复杂的逻辑控制器,并希望根据“单一责任”原则对其进行重构。所以我读到了关于服务业的文章。但有时后来我看到了担忧。我认为它是ruby中服务的替代品(因为没有默认的服务文件夹等等),但是找不到任何好的文章,比如“关注点vs服务”等等。
我听说关注的是控制器的模型和服务,但仍然找不到任何主题或文章来证明这一点。
有谁能解释一下服务和关注点的区别以及何时使用它们?

最佳答案

关注点和服务是用于完全不同目的的非常不同的抽象模式。
服务是转换为类的操作/函数。
问题是mixins
假设我想验证一个用户。我可以很容易地编写一个authenticate(username, password)函数,但是将该函数的逻辑封装到一个类中可能会很有用:

class AuthenticationService
  def initialize(username, password); end
  def run(); end
end

除了帮助我将所有用于身份验证的逻辑封装在一个类中之外,这还允许我创建其他身份验证类。
class GoogleAuthenticationService
  def initialize(username, password); end
  def run(); end
end

class FacebookAuthenticationService
  def initialize(username, password); end
  def run(); end
end

另一方面,关注点是将模块中的功能混合到另一个类中。假设您有一个rails控制器,负责授权用户。您可能会编写一个实现before_action的关注点,该关注点检查用户是否获得授权。然后,您可以将该关注点混合到要强制执行授权检查的任何控制器中。

关于ruby-on-rails - 关注与服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46457227/

10-13 04:44