2014-11-21 205 views
7

我对面的特征标记概念迷迷糊糊的,一个流行的开源Java的lib这个叫Togglz,其中引用了Martin Fowler的博客文章:功能检举VS授权

的基本思想是有一个配置文件,它定义了你有待处理的各种功能的一组切换。正在运行的应用程序然后使用这些切换来决定是否显示新功能。

但对我来说,这真的听起来像授权被授权查看该内容的用户?

例如,用户应该能够看到FizzBu​​zz菜单吗?

在Togglz我会实现这个检查,像这样:

if(MyFeatures.ShowFizzBuzz.isActive()) { 
    // Show the FizzBuzz menu. 
} 

,比方说,阿帕奇四郎,我可以做同样的事情:

ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission(); 
if(currentUser.isPermitted(showFizzBuzz) { 
    // Show the FizzBuzz menu. 
} 

再次,功能标记只是感觉与角色或许可检查一样具有相同的确切问题。

我敢肯定我错了,但我看不出如何。所以我问:功能标记与授权和角色/权限检查有什么不同,以及具体用例的哪种类型可以说明这种差异?换句话说:何时应该使用授权/角色/权限检查,以及何时应使用功能标志?

回答

2

我将使用Mr. Fowlers terminology对于两种类型的功能切换的:

  • 业务切换:将是所有国家都支持长期配置功能。
  • 发布切换:意味着帮助从旧的或不存在的实现过渡到“新”实现。与此相关的意图是在工作完成后退休的老工作方式。这使您可以在“新”方式未完成时保留当前的工作方式。大多数人同意这些应尽可能避免。

如何标记功能比授权和角色/权限检查不同,以及什么类型的具体使用情况举例说明这种差异?

我认为授权和角色/权限检查是商业切换实施下的配置。身份验证是您的业务切换功能,Shiro可以帮助您配置和执行身份验证功能。 Togglz是用于实现业务切换或版本切换的框架。它可以用于认证特征

如果使用Togglz来开启/关闭身份验证,然后四郎执行用户的配置,你的代码应该是这样的:

if(MyFeatures.ShowFizzBuzz.isActive()) { 
    ShowFizzBuzzPermission showFizzBuzz = new ShowFizzBuzzPermission(); 
    if(currentUser.isPermitted(showFizzBuzz) { 
    // Show the FizzBuzz menu. 
    } 
} 

您可能选择忘记功能切换,因为您总是要验证开启。切换只是引入额外的支票和技术债务。

什么时候应该使用授权/角色/权限检查,以及何时应该使用功能标志?

我认为这个决定取决于你。我会说授权是一项功能,您可以使用Shiro来实现它。您的应用程序可能有许多其他功能超出Shiro的范围,并使您想使用Togglz打开和关闭它们。我认为任何复杂的功能仍然需要配置来驱动业务逻辑。

0

切换与用户无关,全部是关于启用或不启用每个人的功能。

它允许您开发新功能,测试它们,将它们发送到生产而不被激活(请参阅持续集成,持续交付)。其中一个兴趣是尽早整合新代码,并避免从生产中看到正在进行的工作。

1

我不会回答Togglz背后的逻辑。在FF4J文档(针对Java的功能翻转)中,您可以找到一个清晰的架构来解释不同之处。

Feature Toggle vs Authorization

一个特征是一个处理,其可启用和通过专用网络控制台的运行时禁用的功能。这应该是主要驱动程序切换您的代码:我需要通过配置激活/禁用?

一旦您确定Feature Toggle机制将具有很大价值(您可以在ff4J.org页面的底部找到一些用例),您可以检查权限。

检查功能切换上下文的权限切换上下文旨在执行“加纳利版本”:在为所有人开放之前,为有限的用户子集打开一项新功能。