Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 我应该把代码分解成尽可能多的函数吗?_Performance_Oop_Class_Function_Design Patterns - Fatal编程技术网

Performance 我应该把代码分解成尽可能多的函数吗?

Performance 我应该把代码分解成尽可能多的函数吗?,performance,oop,class,function,design-patterns,Performance,Oop,Class,Function,Design Patterns,假设我有一个用伪代码登录用户的函数 def login(): # find user in db # check if user exists # check password # login user 每个动作都应该有自己的功能吗?还是所有的代码都留在那里 编辑:我问这个问题是因为我通常只把我所有的代码放在一个函数中,但我的一个朋友把他需要做的所有事情都放在多个函数中,然后在他写下的函数上填空 他会这样写: def login(): findUser(

假设我有一个用伪代码登录用户的函数

def login():
    # find user in db
    # check if user exists
    # check password
    # login user
每个动作都应该有自己的功能吗?还是所有的代码都留在那里

编辑:我问这个问题是因为我通常只把我所有的代码放在一个函数中,但我的一个朋友把他需要做的所有事情都放在多个函数中,然后在他写下的函数上填空

他会这样写:

def login():
    findUser()
    checkUser()
    checkPass()
    userLoggedin()
然后他将创建这些函数并填充它们。

我的建议是:

将其分解为有意义的、可重用的函数。当代码库增长时,这将是最有用的维护方法

# find user in db         => re-usable
# check if user exists    => No. If you find it, it exists. So you don't need that.
                             If you don't find it, it does not. So both should be the same.
# check password          => re-usable
# login user              => re-usable
注:有一段WWDC 2012年会议视频,标题为:

基础+习惯:构建持久的软件项目

你可以看。目标受众主要是MAC开发人员,但他们的许多建议也适用于其他面向对象语言。您需要一个免费的MAC开发者帐户才能访问它。

我的建议是:

将其分解为有意义的、可重用的函数。当代码库增长时,这将是最有用的维护方法

# find user in db         => re-usable
# check if user exists    => No. If you find it, it exists. So you don't need that.
                             If you don't find it, it does not. So both should be the same.
# check password          => re-usable
# login user              => re-usable
注:有一段WWDC 2012年会议视频,标题为:

基础+习惯:构建持久的软件项目


你可以看。目标受众主要是MAC开发人员,但他们的许多建议也适用于其他面向对象语言。您将需要一个免费的MAC开发者帐户来访问它。

我想说是的,从Visual Studio的角度来看,它们应该被分割成单独的项目

查找用户-数据存储库

检查用户是否存在-可能是模型或业务层

检查密码、型号或业务层

登录-业务层


这里的目的是将代码分成逻辑关注点。

我想说是的,从VisualStudio的角度来看,它们应该被分成单独的项目

查找用户-数据存储库

检查用户是否存在-可能是模型或业务层

检查密码、型号或业务层

登录-业务层


这里的目的是将代码分为逻辑关注点。

一个普遍的观点是函数应该做一件事,而且只能做一件事。我也听说函数不应该超过屏幕上的一页左右,但我不确定我是否真的同意这一点。响应您的
性能标记,我不应该期望在使用现代编译器和优化将代码分解为逻辑函数时会产生明显的性能影响,和内联一样,一个普遍的观点是一个函数应该做一件而且只有一件事。我也听说函数不应该超过屏幕上的一页左右,但我不确定我是否真的同意这一点。响应您的
性能标记,我不应该期望在使用现代编译器和优化将代码分解为逻辑函数时会产生明显的性能影响,比如内联。+1是的,将其分组为逻辑关注点,以便于重用,但也可以在代码库增长时找到常用方法。检查密码可能是在数据库中查找用户的一部分,以确保安全性,并最大限度地减少数据库往返。找不到用户和密码不匹配的结果应该是相同的。步骤将是1。检查用户名和密码组合是否存在,步骤2登录或返回错误。这确实相关。谢谢我会加上它。@TimothyStrimple是的。但是如果你只是想知道某个用户是否存在呢?但是如果你使用的是say LINQ,而OP没有提到语言,然后,获取用户将获得一个带有密码等的对象,这样您就不会再有另一个数据库命中。+1是的,并将其分组为逻辑关注点,以便于重用,但也可以在代码库增长时找到常用方法。检查密码可能是在数据库中查找用户的一部分,以确保安全性并最大限度地减少数据库循环旅行。找不到用户和密码不匹配的结果应该是相同的。步骤将是1。检查用户名和密码组合是否存在,步骤2登录或返回错误。这确实相关。谢谢我会加上它。@TimothyStrimple是的。但是如果你只是想知道某个用户是否存在呢?但是如果你使用的是say LINQ,并且OP没有提到任何语言,那么获取该用户将为你获取一个带有密码的对象,这样你就不会再遇到另一个DB命中。