如果我在MVC项目中的控制器中有私有方法,那可以吗?我的意思是,这是一个好习惯吗?
这就是我的意思:
我的用户控制器中有一个方法public function settings($settings)
{
/**
* Check if the user is logged in
*/
$auth = new Authenticate($this->user_type);
if(!$auth->isUser())
{
redirect(SITE_ADDR.'/public/home');
}
switch ($settings)
{
default:
error_404();
break;
case "email":
self::change_email();
break;
case "password":
self::change_password();
break;
}
}
,用于更改电子邮件和密码。
http://localhost/MVC/public/user/change_email
正如您所看到的,此方法中的开关调用来自同一类的其他方法是私有的。原因是我不希望有人手动修改URL并访问方法,然后出现各种错误:http://localhost/MVC/public/user/settings/email
正确的网址具有以下结构:settings
。
目前有2个私人方法 - 用于更改电子邮件和密码但我计划更多 - 添加个人资料详细信息(如真实姓名,描述等),可能连接Facebook或其他社交媒体帐户等。我不&# 39;我希望我的<!DOCTYPE html>
<html>
<head>
<title>Prototype</title>
<script type="text/javascript" src="https://yourserver/javascripts/api/tableau-2.min.js"></script>
<script type="text/javascript">
var viz, containerDiv
function initViz() {
containerDiv = document.getElementById("vizContainer"),
url = "https://yourserver/views/yourworkbook/yourdashboard",
options = {
onFirstInteractive: function () {
console.log("Run this code when the viz has finished loading.");
mainWorkbook = viz.getWorkbook();
}
}; // end options
// Create a viz object and embed it in the container div.
viz = new tableau.Viz(containerDiv, url, options);
viz.addEventListener(tableauSoftware.TableauEventName.FILTER_CHANGE, function(e){
if (e.getFieldName() == 'Filter1'){
e.getFilterAsync().then(function(filter) {
var values = filter.getAppliedValues();
var value = values[0]['value'];
// Value of the parameter if "All" is selected in the filter.
if (values.length > 1) {
value = 'All';
}
viz.getWorkbook().changeParameterValueAsync('Parameter1', value);
});
} // end if statement
}); // end event listener
} // end initViz
</script>
方法太长。
那你怎么看?这是个好主意吗?
答案 0 :(得分:0)
在任何OO环境中都可以使用私有方法。像protected
和private
这样的可见性修饰符用于保持代码的模块化和封装。它们防止其他代码被写入,而类外的其他代码会调用这些方法。关键在于你可以更好地控制什么调用什么,并且你更有信心在以后重构代码,而不必确定是否需要保留某种方法以便不破坏其他代码。 private
方法只能在同一个类中调用,这大大减少了重写该方法时需要检查的代码量。
这与公开调用的URL有何关系是一个完全独立的问题。我认为可见性修饰符不应该是区分作为HTTP端点公开的方法和内部实现细节的主要方法。可见性修饰符用于控制代码耦合,HTTP端点应由配置单独定义。许多框架使用可见性修饰符作为隐式映射的HTTP端点的便利“安全”功能,不一定是一个好的模式。
private
方法。答案 1 :(得分:0)
是的,只要项目需要它,这是一个好的做法
答案 2 :(得分:0)
在大多数情况下,这可能是一个不好的做法,因为控制器应该使用服务来共享逻辑,并使用依赖注入接收这些服务,这不是MVC模式固有的,但是最新的MVC框架使用它。
当你的控制器只调用服务而不是自己做很多低级逻辑时,从你的控制器上创建快捷方式私有方法到那些服务或它们的动作,真的没有什么好处。
尽管在任何地方复制所有代码似乎都是可取的,特别是如果有很多代码行。
但如果你在你的控制器中拥有那么多的逻辑,这可能表明你应该把一些东西转移到服务类。