如何仅向少数几个用户推出功能


11

我想问的一个很好的例子是Facebook的新时间轴功能。开始时,只有少数几个被允许访问时间轴。随着该功能在其工作方式上变得更加牢固并修复了一些错误,允许其他用户访问该功能。后来,允许大量用户访问该功能,现在,所有用户都可以使用该功能。开发团队如何管理这种功能?

我一直在考虑使用配置设置来通过配置文件和代码中的条件if语句有选择地控制访问(如果正在测试或生产中)。现在,尽管可以使用简单的功能,但我相信,如果我们尝试在更大的功能集中实现这一点,将变得难以管理。

以这种方式管理功能推出的最佳方法是什么?


3
ACLRBAC是完成所需内容的两种(非常相似)方法。
扬尼斯

@YannisRizos:当然,这是一个小/简短的答案,但是我认为这是合法有用的。您应该将其发布为答案。
史蒂文·埃弗斯

对于所有功能(不仅仅是新功能),这是否基本相同?根据凭证,用户有权访问x个选项?例如,管理员级别可以更改设置,而管理员级别只能输入数据?
Pieter B

Answers:


2

开发团队如何管理这种功能?

很容易猜测,像Facebook这样的系统主要是由数据库驱动的。所有用户数据显然都存储在数据库中,并且可能包括有关如何呈现用户数据的信息。不可能确切知道Facebook的数据库是如何设置的,但在某些情况下,必须通过定期根据一些条件在数据库中选择用户并更改值来逐步向用户推出类似Timeline之类的功能(某些领域的。

例如,或许它们在用户表中的字段等timeline_status具有值,例如not offeredofferedpreview,和public。仅基于此,Facebook的系统就可以决定如何呈现用户的信息页面。然后,FB团队可以通过选择一组用户并更改该字段的值来试用“时间轴”功能。

在实践中,我敢肯定它要复杂得多,但是核心思想是用户帐户只是数据,其中一些数据可以确定哪些功能可用。推出新功能仅是更新数据库中的用户记录。


9

...和条件if语句在代码中。

是的,那是错误的方法。无论X是什么功能,只要它是可配置的,它都必须扩展或替换。在代码中执行该操作。例如,FB事物可能具有以下内容:

class UserPageView;
class HatedTimelineView : UserPageView;
class OldViewEveryoneLikes : UserPageView;

然后,您将构建一个工厂,该工厂根据配置访问用户页面时将创建UserPageView对象。您将激活该视图。没有愚蠢的分支。

您想要这样做,因为如果有人要您更改一次,他们会再次要求。此外,他们会要求更改另一件事。特殊情况使您的体系结构混乱,如果到处都是,那么您将拥有一大碗无法维修的发霉意大利面,而不是功能丰富的成熟产品。


您需要使用条件if语句。否则,工厂如何知道要返回哪个UserPageView?就是说,我同意将if语句放在整个代码中是一个坏主意,您希望将它们集中化。
Briddums 2012年

1

以相同的方式来考虑功能,就像对待网站上的管理功能一样。

加载页面时,请检查用户是否具有该功能的正确特权(如果有)。

在推出新功能时,Facebook似乎使用基于位置的方法。这可能很简单,只需查看用户的ip地址以找到他们的位置即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.