正如您在下面看到的,在构造函数中我实例化了一个验证对象,因此我可以在set方法中验证用户的电子邮件.这种架构是最佳实践还是有缺陷的?我可以避免让我的User类直接依赖于我的Validation类吗?
Class User {
Private Email
//constructor
User() {
Validation = new Validation
}
SetEmail(NewValue) {
if (Validation.isEmail(NewValue)) {
Email = NewValue
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个相关的问题:当set方法收到无效值时,什么是正确的响应?我看到2个选项
我怀疑#1是最佳实践,因为您可以确保任何对象属性的值始终有效.正确?
为多个网站使用单个代码库的最佳方法是什么?
我们有多个网站上使用的验证和会话管理库.是否有保留单个副本的最佳做法,而不是必须维护每个网站的本地副本更新?
通常,最佳实践是使用命名常量代替幻数,但保持数据库引用表和命名常量文件同步肯定是乏味且容易出错的。是否有一些简单的方法可以使这两个信息来源保持同步,或者我是否忽略了明显的设计增强?
如果我的问题不清楚,这里有一个例子。我有一个包含 2 列的参考表:
UserStatus
----------
UserStatusID
UserStatus
Run Code Online (Sandbox Code Playgroud)
因此,该表将 UsersStatusID 1 与 UserStatus“Active”相关联。User 表依赖此表来规范化 UserStatuses。
因此,当从代码查询用户的状态时,我有两个选择:
SELECT UserStatusID FROM Users WHERE UserStatus = 1
Run Code Online (Sandbox Code Playgroud)
或者
SELECT UserStatusID FROM Users WHERE UserStatus = ACTIVE_USER_STATUS_ID
Run Code Online (Sandbox Code Playgroud)
最佳实践是使用后者,这样数字 1 的含义就很清楚了。但这意味着我必须在 UserStatus 表和代码中维护有效 UserStatusID 的完整列表。如何避免必须更新数据库引用表和常量文件?我使用的是集中式常量文件,因此只有 1 个位置需要更新代码,但是有没有办法在引入新状态时完全避免更新常量文件?
我有一个想法:安排一个脚本每天运行一次,通过查询数据库中的引用表来填充常量文件。这是最好的解决方案吗?
是否有JavaScript的内置函数将字符串转换为货币格式?
例如
var a = '1234';
a.convertToCurrency(); // return $1,234
Run Code Online (Sandbox Code Playgroud)
UPDATE
请注意,我希望函数返回货币以包括美国逗号到组数字.
MySQL目前不支持更新触发器分配给同一个表中的行,因为调用可能会递归.有没有人有一个好的解决方法/替代方案的建议?现在我的计划是调用一个存储过程,在触发器中执行我真正想要的逻辑,但我很想知道其他人是如何克服这个限制的.
编辑:根据要求提供更多背景信息.我有一个存储产品属性分配的表.插入新的父产品记录时,我希望触发器在每个子记录的同一表中执行相应的插入.这种非规范化是性能所必需的.MySQL不支持这个并抛出:
Can't update table 'mytable' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 关于MySQL论坛问题的长篇讨论基本上导致:使用存储过程,这就是我现在所使用的.
提前致谢!
我知道电子邮件地址限制为254个字符,但有没有一个资源可以概述常见字段的建议最大长度,例如电话,城市等联系信息?
似乎我工作的每个项目都只是从他们提出的极限上开始.我希望找到一个针对特定国家的规范参考.
编辑 - 更新每条评论的电子邮件maxlength.
ASP Classic中密码的最慢(因此最好)哈希算法是什么?
编辑:对于那些不知道的人,当哈希密码时,较慢的哈希值更快,以帮助减缓彩虹表式攻击.
EDIT2:是的,当然速度并不是哈希选择的唯一有效问题.我的问题假设所有其他条件相同,在散列密码时首选最慢的哈希方法.虽然碰撞/逆向工程当然也是一个问题,但我在这个问题中优先考虑速度,因为它可以说是比较流行的哈希算法用于密码时最关键的考虑因素.
谢谢!
我需要通过经典asp应用程序上的后台作业发送电子邮件,这样用户就不必等待慢速网络服务器完成发送电子邮件.
我知道我可以使用Ajax生成两个单独的请求,但我宁愿不需要Javascript.另外,我怀疑有更好的办法解决这个问题.想法?
简单的问题,如果有的话,会喜欢解决方案!我假设必须有一些键盘快捷方式将插入一个null但谷歌没有帮助.
提前致谢!
我的控制器中有一个功能,它的长度比我想要的要长,我想重构它来调用一些离散函数,以便更容易管理.如何在Codeigniter控制器中更好地组织长函数?
我尝试过的:
我知道您可以通过使用前导下划线(_myfunc)命名它们来在控制器中创建私有函数,但是函数中的变量超出了调用控制器函数的范围.所以你必须从函数中返回所有需要的数据,这很麻烦.
这是管理复杂控制器功能的最佳选择吗?是否有一种更简单的方法,变量可以像控制器类一样全局变为标准类成员变量?
建议?提前致谢!
编辑:有人请求代码,所以我在下面为巨型控制器添加了代码.改进的一个机会是将switch语句中的逻辑移动到单独的函数(删除,预览,顺序等).但我想在此之后决定下一步.将大的验证设置代码移动到它自己的函数中真的需要一些重量,但是我应该把它移到哪里?
function categories() {
$this->load->library('upload');
$this->load->model('categories_m');
$this->load->model('products_m');
$this->load->model('pages_m');
$this->load->model('backoffice/backofficecategories_m');
$data['body'] = $this->load->view('backoffice/categories/navigation_v', '', TRUE);
$data['cat_tree'] = $this->categories_m->getCategoryTree();
$data['page_list'] = $this->pages_m->getPageList();
$data['category_dropdown'] = $this->load->view('backoffice/categories/category_dropdown_v',$data,TRUE);
switch ($this->uri->segment(3)) { //display views based on parameter in URL.
case 'delete':
$categoryTreeID = $this->sitewide_m->checkURLParam($this->uri->segment(4),'CategoryTree'); //if parameter is in URL, show 404 if invalid parameter is passed. Otherwise, set variable known to be safe.
if (isset($_POST['delete'])) {
$this->backofficecategories_m->deleteCategory($categoryTreeID);
$data['body'] .= '<span class="error">Category Deleted.</span>';
} else {
$data['cat_details'] = $this->categories_m->getCategoryDetails('',$categoryTreeID);
$data['parent_category'] = $this->categories_m->getParentCategory($categoryTreeID); …Run Code Online (Sandbox Code Playgroud) database ×3
asp-classic ×2
html ×2
codeigniter ×1
coupling ×1
email ×1
hash ×1
javascript ×1
maxlength ×1
mysql ×1
oop ×1
php ×1
security ×1
toad ×1
triggers ×1
validation ×1