我目前正在研究我所编写的代码,并试图提高其可读性和质量。下面是一个我如何处理一个简单问题的例子,我一直觉得这是一个糟糕的解决方案。
在本例中,具有以下“状态”或标高的用户表
雇员
监督人
管理员
(这些可以是任何东西,例如,项目可以具有“未完成”、“暂停”和“完成”状态)
在过去,我总是将其存储为int值,然后在打印出帐户及其状态时,我将编写一个函数将其转换回文本,以便打印在页面上,例如。 if userLevel === 3 { return "Admin"; };
这一直感觉是一个糟糕的解决方案,它不是很灵活。添加任何新类型的帐户都需要更新该功能。这种格式也使得阅读页面限制变得非常困难。
如果我加上一行: if userLevel !== 2 OR 3 { // Redirect to error page };
你可以看到这会让人困惑。
最近我开始将这些“状态”存储为一个字符串,这样就更容易阅读了。但是现在我对laravel有了更多的了解,我想知道是否应该有额外的数据库表专门用于此。
所以我的问题是-什么是适合这种数据的数据类型,什么是与之交互的理想方式?
2条答案
按热度按时间ddarikpa1#
在遗留代码中,我会使用常量,基本上bit并不真正关心其中的数据类型。它是可读的,您可以很容易地找到用法和您的ide可以帮助您。
在有大量业务逻辑的新代码中,可以创建一个表示状态的小类,以便将逻辑放在那里。
在db中,您可以找到几篇文章说enum不是一个好主意。如果您想优化很多,tinyint可以帮助您,但是使用短字符串也很好(我通常使用它)。然后您应该在phpofc中翻译它,我推荐上面描述的对象方法。
bvn4nwqk2#
这可能适合也可能不适合您的特定应用程序,但我经常发现按位操作非常方便
0 or more
单个整数中的属性。e、 g.假设您指定以下内容:
现在要为
$status
这是一个位or
具有适当的值。所以,主管既是
employee
以及supervisor
所以它们的整数值为2|4 = 0b010 | 0b100 = 0b110 = 6
.现在,当您想查看用户是否有
status
,只是掩饰一下:你当然可以有更多
statuses
在单个整数或int数据库列中。