我们有一个用ASP.NET 2.0编写的糟糕的系统,我们需要向其中添加一些功能。问题在于,某个产品具有UI功能,对于在特定日期(其他时间已关闭)之后启动的业务,必须打开该UI功能,而页面必须与现有业务的外观相同。
我本能地发现基于日期的JavaScript UI开关的想法,而将新老业务的Web控件混合在一起是“不统一的”(因为想要一个更好的词),所以我努力为新业务重写页面)。
使用基于时间的UI的做法是否已被广泛接受,如果没有,采取该措施的已知风险是什么?
我们有一个用ASP.NET 2.0编写的糟糕的系统,我们需要向其中添加一些功能。问题在于,某个产品具有UI功能,对于在特定日期(其他时间已关闭)之后启动的业务,必须打开该UI功能,而页面必须与现有业务的外观相同。
我本能地发现基于日期的JavaScript UI开关的想法,而将新老业务的Web控件混合在一起是“不统一的”(因为想要一个更好的词),所以我努力为新业务重写页面)。
使用基于时间的UI的做法是否已被广泛接受,如果没有,采取该措施的已知风险是什么?
Answers:
根据为客户启用了哪些功能或他们选择的部署类型来调整UI并没有错,但是更改应该
(需要注意的是相反的- DIS一定时间后abling功能-是一个重大的没有没有,除非你已经清楚地传达,你卖的限时试用版本创建这样。定时炸弹在其他情况下会让人讨厌你比其他任何东西都快。)
The UI has no business knowing the business rule about what was published when
-好的,但是即使Stack Exchange也有这样的UI规则。例如,对于已关闭问题的其他用户,直到两天后才会显示“删除”链接,并且60天后禁用“迁移”选项。
if (showDelete) { <button>delete</button> }
还是if ((post.date - today).days > 2) { <button>delete</button> }
?
需求本身没有问题,但是实现它有好有坏的方法。如果您将代码复制并粘贴到整个地方,如下所示:
if (businessInitiationDate > cutoffDate)
enableNewControlsForThisOneLittlePiece();
else
enableOldControlsForThisOneLittlePiece();
即使现在看起来更快,也很难维护。例如,也许某些时候一些老客户会想要新外观。也许在某个时候会有第三个配置有其截止日期。
理想情况下,您希望此if语句在您的代码中恰好出现一次,最好在服务器端。但是,您还希望避免仅复制整个应用程序并进行更改。找到通用代码并将其分解,然后为不同的部分创建小的单独的函数。然后从一个中央位置启用或禁用这些功能。
这是一个要求,尽管看起来很臭-基本上是基于datetime值的配置-没有理由不能使用时间来更改UI。经典案例是卫星导航显示,从白天的明亮颜色变为晚上的深色主题(如果您真的很专注,则介于两者之间)。
但是,我可以提出的一项改进建议是删除启用控件的日期的概念,而不是版本号。该版本设置UI配置(即您有一个标记要为NewCustomer配置,并且将来可以扩展以适应NewNewCustomer所需的其他控件,依此类推)。这在代码中更容易处理,并且闻起来更好。
那么,您只有1个问题,它会根据某些条件设置版本号,这可以通过今天的日期检查(可能是稍后的服务器端配置选项,甚至是用户登录一段时间后设置的Cookie)来完成。未来。
如果更改与某些对日期敏感的特定业务目的有关,那么这是必不可少的。
如果这是要对程序进行修订以永久更改程序,而旧的设计将不再使用,那么最好在正确的时间简单地部署更新。
听起来不错。使UI适应不同用户是很普遍的,例如,在stackoverflow上,根据单个用户的业力启用或禁用不同的功能。
您不喜欢它的原因是,相对于每个人都看到相同UI的解决方案,它显然增加了复杂性。但是,复杂性似乎是必不可少的复杂性,即。这是一项业务需求,而不是错误的架构决策的产物。当然,这会有一定的成本(您应该与企业沟通),但是如果企业认为值得,那么您就可以实施它。
已知风险:最大的风险可能是在各种配置下对UI进行测试。如果您开始着手为各种用户组启用/禁用UI功能,则可以快速获得各种可能的配置。
您还应该确保在业务逻辑层中实施限制,以便验证客户不能执行他们不允许执行的操作,即使UI最初不应该允许这样做:
这是一个基于日期进行激活的功能切换-完全有效。想象一下该功能是仅在促销期内使用,还是在某个新日期开始实施新的政府法规时必须终止。
您正在使用APS.NET和JavaScript,但是Java功能切换框架Togglz特别具有基于日期(和时间!)的激活规则。