我正在处理一些遗留代码,该代码具有Controller
类,扩展了Laravels本地Controller
。在那个班级里面,我有不变的状态:
class Controller extends \Controller
{
const STATUS_SUCCESS = 'success';
const STATUS_ERROR = 'error';
....
困扰我的第一件事是控制器类中存在状态,我认为它们不应该通过良好的设计存在,而是存在于其他ControllerStatus
类中。
关于它的另一个问题是这些状态在几个不相关的类中重复,所以我想知道创建一个具有可能状态的泛型类Status
是否是一个好习惯?
我在这里看到的可能问题是,现在需要返回状态而不是只与Controller
相关联的每个类都需要与Status
结合使用。
我最好如何做到这一点?
答案 0 :(得分:1)
如果全局使用常量,那么将它们存储在配置文件中是一种简单而有效的解决方案。
您应该创建一个新文件constants.php
在该文件中,您可以编写一个常量数组,您需要在整个应用程序中使用该数组,并且可以在该文件中轻松添加新常量。
return [
'status' => [
'status_success' => 'success',
'status_error' => 'error',
'status_abort' => 'abort',
]
];
您可以按照以下说明访问它们
Config::get('constants.status');
// or if you want a specific one
Config::get('constants.status.status_success');
正如你所说的使用class也没关系但是你必须在任何地方导入该类,如果你在你的应用程序中使用了很多常量那么 你最终会为不同的常量创建单独的类。
但是在我个人的公开中使用这个Config::get('constants.status.status_success');
看起来很好,你的代码变成了自我记录。
程序员应该编写一个自我记录的代码。您还可以轻松添加新常量,以便使用Config::get('constants.pay_type.visa');
但最后,决定什么对您的应用程序有益并使用它。
答案 1 :(得分:0)
您可以使用接口来确保所有必需的控制器具有相同的常量吗?
Pros and Cons of Interface constants
唯一的选择是创建一个Abstract类来扩展包含常量的基本Laravel控制器,然后扩展该抽象类?