这个初学者怎么写代码啊 有没有人有代码 最好是详细一点 最后能实现这三个界面

请问:如何用java实现单点登录,最好能有代码-CSDN论坛
请问:如何用java实现单点登录,最好能有代码
请问:如何用java实现单点登录,最好能有代码。非常感谢!!!
有很多中方法servlet还是jsp还是struts.
这几项技术好像都用到啊
用&spring&框架的&单点登录,要不就要找开源的单点登录框架,Google&一下
能具体一点吗?
也不一定非要用框架,点击链接的时候,把用户信息都传过去,然后验证是否能登陆就是了。
这问题好多人问啊,我回说是session监听,
有人用文学说我没思想,不敢乱说了。给你一个思路&&&
package&com.it.oa.sessionL
import&java.util.L
import&java.util.V
import&javax.servlet.http.HttpSessionBindingE
import&javax.servlet.http.HttpSessionBindingL
import&java.sql.*;
public&class&SessionListenerOnline&implements&HttpSessionBindingListener&{
&private&Vector&users=new&Vector();
&&*&返回登陆用户的数量
&&*&@return
&public&int&getCount(){
&&&&&&&users.trimToSize();//调整Vector&users的容量为Vector&users的大小
&&&&&&&return&users.capacity();//返回users的容量
&&*&检查是否存在用户
&&*&@param&userName
&&*&@return
&public&boolean&existUser(String&userName){
&&&&&&&users.trimToSize();
&&&&&&&boolean&existUser=
&&&&&&&for&(int&i=0;i&users.capacity();i++&){
&&&&&&&&&&&if&(userName.equals((String)users.get(i)))
&&&&&&&&&&&{
&&&&&&&&&&&&&&&existUser=
&&&&&&&&&&&&&&&
&&&&&&&&&&&}
&&&&&&&return&existU
&&*&删除用户
&&*&@param&userName
&&*&@return
&&&public&boolean&deleteUser(String&userName){
&&&&&&&users.trimToSize();
&&&&&&&if(existUser(userName)){
&&&&&&&&&&&int&currUserIndex=-1;
&&&&&&&&&&&for(int&i=0;i&users.capacity();i++){
&&&&&&&&&&&&&&&if(userName.equals((String)users.get(i))){
&&&&&&&&&&&&&&&&&&&currUserIndex=i;
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&}
&&&&&&&&&&&}
&&&&&&&&&&&if&(currUserIndex!=-1){
&&&&&&&&&&&&&&&users.remove(currUserIndex);
&&&&&&&&&&&&&&&users.trimToSize();
&&&&&&&&&&&&&&&return&
&&&&&&&&&&&}
&&&&&&&return&
&&&&*&获得在线用户的id
&&&&*&@return
&&&public&Vector&getOnLineUser()
&&&&&&&return&
public&void&valueBound(HttpSessionBindingEvent&e)&{
&users.trimToSize();
// &&&&&&&System.out.println("请求:::::::::::"+e.getName());
&&&&if(!existUser(e.getName())){
&&&&&&&&users.add(e.getName());
// &&&&&&&&System.out.print(e.getName()+"&&&&登入到系统&"+(new&Date()));
// &&&&&&&&System.out.println("&&&&&&在线用户数为:"+getCount());
&&&&}else{
// &&&&&&&&System.out.println(e.getName()+"已经存在");
&*&session失效的时候修改全局变量和清空session
public&void&valueUnbound(HttpSessionBindingEvent&e)&{
users.trimToSize();
&&&&String&userName=e.getName();
&&&&//&获得在线人数
&&&&int&num&=&Integer.parseInt(e.getSession().getServletContext().getAttribute("onLineNumber").toString());
&&&&int&id&=&Integer.parseInt(userName);
&//&如果非法关闭浏览器&在session失效时候自动把它的人员状态改为离开
&&&&&&&&try{
//&&&&&&&& Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//&&&&&&&& Connection&conn&=&DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=OA","sa","sa");
//&&&&&&&&&&&&PreparedStatement&&pstm&=&conn.prepareStatement("update&oa_ryzt&set&ztlx&=2&where&ryid&=?&");
//&&&&&&&&&&&&pstm.setInt(1,id);
//&&&&&&&&&&&&pstm.executeUpdate();
&&&&&&&& //&在线人数减1
&&&&&&&& num&=&num&-&1;
&&&&&&&& e.getSession().getServletContext().setAttribute("onLineNumber",&num);
&&&&&&&& //&获得在线的所有用户id
&&&&&&&& List&userList&=&(List)e.getSession().getServletContext().getAttribute("onLineUser");
for(int&i=0;i&userList.size();i++){
int&userid&=&Integer.parseInt(userList.get(i).toString());
if(id&==&userid){
//&删除下线用户的id
userList.remove(i);
//&将信息重新保存到作用域
e.getSession().getServletContext().setAttribute("onLineUser",&userList);
&&&&&&&& //e.getSession().setAttribute("onLine",&num);
&&&&&&&&}&
&&&&&&&&catch(Exception&ex){
&&&&&&&& ex.printStackTrace();
&&&&&&&&}&
&&&&deleteUser(userName);
// &&&&System.out.print(userName+"&&&&退出系统&"+(new&Date()));
// &&&&System.out.println("&&&&&&在线用户数为:"+getCount());
spring框架里面也有,不过貌似没做用,在贴点代码给你看看
concurrentSessionController并发HttpSession控制器,&
concurrentSessionController只需要一个sessionRegistry实例的属性,
但它应用时还使用了maximumSessions属性,把它赋值为1&&--&
&bean&id="concurrentSessionController"
class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl"&
&property&name="maximumSessions"&
&value&1&/value&
&/property&
&property&name="sessionRegistry"&
&ref&local="sessionRegistry"&/&
&/property&
一般设置为false.&为true时,&如果已有一个该用户登录了,&那么在另一个地方登录该用户将抛出异常&&&
如果设置为false,&那么,&如果已有一个该用户登录了系统,&那么在另一个地方也可以登录,&登录后前者会被逼退出系统&&&
&property&name="exceptionIfMaximumExceeded"&value="false"&&/property&
&!--&&注意,我们的程序一般并不用直接与SessionRegistryImpl打交道,你只需在Spring的配置文件定义一个Bean就行了&&--&
&bean&id="sessionRegistry"
class="org.acegisecurity.concurrent.SessionRegistryImpl"&/&
&!--&Acegi内置了HttpSession的并发控制支持&--&
&!--&ConcurrentSessionFilter起到两个作用:
第一、对每个请求,&它都会调用org.acegisecurity.concurrent.SessionRegistry.refreshLastRequest(String)方法,这样保证所有已注册的会话总是有正确的最后修改时间。
第二、它会从SessionRegistry为每个请求返回org.acegisecurity.concurrent.SessionInformation会话信息,并且检查session是否已标记为过期。如果已标记为过期,那么该session将会被invalidate()掉。
&bean&id="filterChainProxy"
class="org.acegisecurity.util.FilterChainProxy"&
&property&name="filterInvocationDefinitionSource"&
&value&&![CDATA[
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/js/**=#NONE#
/css/**=#NONE#
/images/**=#NONE#
/**=httpSessionContextIntegrationFilter,concurrentSessionFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
]]&&/value&
&/property&
谢谢,小杨!但我现在还是看不懂,呵呵,我再好好看看。
你的单点登录是用于B/S不是C/S哟
还有没有高手呀!我们公司近期也在做呀!一点头绪也没有呀!高手出来点一下嘛!
可以用appliction或在库里加个字段做控制
之前想用监听器做这个,思路是:在线人信息表放在application中,通过监听session的建立和注销来修改这个列表,登录时对照表信息,以达到单点登录.
但后来发现个问题,如果用户登录后是直接关闭浏览器,而不是点你的页面注销.那么服务器将检测不到这个信息,所以登录的账号信将长期放在哪不被清除,而再用这个账号登录,因为已经存在登录表中,所以登陆不上了.
我跟另一个同事想到的单点登录:
有三个应用SSO,A,B;
SSO:负责单点登录的SESSION保存
A,B:普通站点,可扩充
1、在普通站点A,B上配置过滤器,如果访问到A的页面时,先访问本地SESSION看是否登录,如果没有,则访问SSO看是否登录,如果没有则转到公共登录界面
2、公共登录界面登录完以后写SSO的SESSION,并通过地址栏返回给A登录的用户名
3、A写本地SESSION,完成登录过程。
4、当访问B应用时,先访问本地SESSION,未登录,则同样跳转到SSO,SSO取到本地SESSION的用户名,返回给B已登录。B写本地SESSION。完成登录过程。
5、A登出时,先杀本地SESSION,调用SSO的杀全局SESSION方法,SSO清空本地SESSION,同时也清空应用B的SESSION,完成单点登出。
以上是我们正在使用的单点登录方法,希望对各位有用
看我的博客里面由一个josso1.8在tomcat6下安装配置的介绍
引用&14&楼&jqncc&的回复:之前想用监听器做这个,思路是:在线人信息表放在application中,通过监听session的建立和注销来修改这个列表,登录时对照表信息,以达到单点登录.
但后来发现个问题,如果用户登录后是直接关闭浏览器,而不是点你的页面注销.那么服务器将检测不到这个信息,所以登录的账号信将长期放在哪不被清除,而再用这个账号登录,因为已经存在登录表中,所以登陆不上了.
是否可以记录用户最后一次的操作时间,然后设置一个超时限制,达到这个时间&自动作为注销处理?
可以用CAS&&与SPRING集成的方案
在spring中增加CAS的过滤包,开发量早小,
引用&14&楼&jqncc&的回复:之前想用监听器做这个,思路是:在线人信息表放在application中,通过监听session的建立和注销来修改这个列表,登录时对照表信息,以达到单点登录.
但后来发现个问题,如果用户登录后是直接关闭浏览器,而不是点你的页面注销.那么服务器将检测不到这个信息,所以登录的账号信将长期放在哪不被清除,而再用这个账号登录,因为已经存在登录表中,所以登陆不上了.
能否获取浏览器关闭信号,清空
直接用cas吧,支持BS和cs,支持网页语言也比较多。是真正的单点登录。不过切记服务器要使用域名的方式,不能用IP
如果你的系统对权限的要求很严格。。。&&&&那么有成熟的权限控制框架可以解决这个问题。。
如果只是想完成单点登录&&其他安全不考虑的话。&&那么你给系统加一个安全过滤器,用session保存登录信息就完成了。
我要做到不同系统间实现单点登录,杂办!
哪位大虾给一下单点登录的源码?小弟刚学,不知道,急啊
好好分析一下楼上给出的源码,挺好的
使用CAS&开源项目,只需要稍微配置一下就可以使用了
可以用appliction或在库里加个字段做控制
&&不知道如何处理,看过很多的人问过。
谁有这方面的经验,交流一下呀!我现在也在做这个。我的系统安全性能要求高一点!
引用&17&楼&pmzqonxw&的回复:引用&14&楼&jqncc&的回复:
之前想用监听器做这个,思路是:在线人信息表放在application中,通过监听session的建立和注销来修改这个列表,登录时对照表信息,以达到单点登录.
但后来发现个问题,如果用户登录后是直接关闭浏览器,而不是点你的页面注销.那么服务器将检测不到这个信息,所以登录的账号信将长期放在哪不被清除,而再用这个账号登录,因为已经存在登录表中,所以登陆不上了.……
你这肯定不行,时间限制你没法控制,你不知道谁什么时候会再访问!
&&&&&&各位高手大大,怎么用cookies实现单点登录啊,我和斑竹都是在SSH框架中应用的……
新手啊……
CAS就是COOKIE的,去下个配置下完了,google下这样的文章多得是,要在这贴代码,可是件痛苦的事情
引用&5&楼&defonds&的回复:java实现单点登录
要实现SSO,需要以下主要的功能:
1、所有应用系统共享一个身份认证系统。
统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。&
2、所有应用系统能够识别和提取ticket信息
要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。
1、单一的用户信息数据库并不是必须的,有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中,如下图所示。事实上,只要统一认证系统,统一ticket的产生和效验,无论用户信息存储在什么地方,都能实现单点登录。
2、统一的认证系统并不是说只有单个的认证服务器
认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。如:当用户在访问应用系统1时,由第一个认证服务器进行认证后,得到由此服务器产生的ticket。当他访问应用系统2的时候,认证服务器2能够识别此ticket是由第一个服务器产生的,通过认证服务器之间标准的通讯协议(例如SAML)来交换认证信息,仍然能够完成SSO的功能。
WEB-SSO的实现
用户在访问页面1的时候进行了登录,但是客户端的每个请求都是单独的连接,当客户再次访问页面2的时候,如何才能告诉Web服务器,客户刚才已经登录过了呢?浏览器和服务器之间有约定:通过使用cookie技术来维护应用的状态。Cookie是可以被Web服务器设置的字符串,并且可以保存在浏览器中。当浏览器访问了页面1时,web服务器设置了一个cookie,并将这个cookie和页面1一起返回给浏览器,浏览器接到cookie之后,就会保存起来,在它访问页面2的时候会把这个cookie也带上,Web服务器接到请求时也能读出cookie的值,根据cookie值的内容就可以判断和恢复一些用户的信息状态。Web-SSO完全可以利用Cookie结束来完成用户登录信息的保存,将浏览器中的Cookie和上文中的Ticket结合起来,完成SSO的功能。
为了完成一个简单的SSO的功能,需要两个部分的合作:
1、统一的身份认证服务。
2、修改Web应用,使得每个应用都通过这个统一的认证服务来进行身份效验。
原文链接:http://www.shenmeshi.com/Computer/Computer_48_2.html
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/defonds/archive//4152153.aspx
来凑个热闹,java方面做单点登录的应用,推荐cas
cas是一个开源框架,需要一定的学习,但发展时间也算比较久了,各个功能也比较完善,也比较易于实现
看见楼主写的最好能有代码,我就笑了(几句代码能搞定的话,我辈中人一定得拜佛祖,耶和华、安拉、玉皇大帝。。。)
单点登录还是有点小复杂的东西,需要考虑到客户环境的
比如说是不是都是基于BS的架构,
用户认证方式是否相同等等
google&下&cas
我们内部系统就是通过这个实现的&还行
还有别动不动&就要代码&哈哈&
别人能给思路&自己研究&就不错了
关键是踢人下线&&
引用&39&楼&ayanami001&的回复:关键是踢人下线
就是啊&BS类系统&如果某个地方登录了一个用户,另外一个地方该用户再次登录?如果主动去刷新第一个的客户端,让他登出。
我也需要这个&,把这个想的简单了&。在数据库里面加了一个字段,未登录的时候是false,登录了是true,但是在直接关闭浏览器的情况下就会出错。。不会调用撤销函数,导致以后去登录的时候都显示用户在使用中
谁有CAS操作的详细例子~~看的很迷茫!不明白使用单点登录系统的用户登录系统后如何与别的系统进行校验,如何跳转到别的系统?
cas我的博客里面有专门的文章
有啥问题可以站内信
mark下以后要用到方便查找
该回复于 11:18:25被版主删除
该回复于 14:28:39被版主删除
回复如何提升程序员的代码编写能力_百度知道
如何提升程序员的代码编写能力
我有更好的答案
一、先列三个常见的开发场景: 1、拿到一个模块详细设计文档,大部分程序员的通常做法就是开始搭建界面代码,然后从第一个按钮点击事件或页面Load事件开始写第一行业务代码。写的差不多了,就运行一下,发现哪里不是自己想的那样,就改改,直到改到是自己预想的那样。 2、做完了一个功能模块或几块相关联的功能模块,输入111asd,发现新建正常、保存正常,就提交给测试人员。测试员用测试用数据、测试场景用例来测试,发现有问题,就登记bug。对于严重的影响下一步测试的BUG,测试员就用内部IM通知这个开发人员。对于不影响继续往下测试的BUG,测试员就登记下来,等程序员有空时处理。 3、程序员一般工作不希望大家打扰,所以开发起来就是开发。等手头开发告一段落,就看看BUG库。发现有与自己有关的BUG,就从第一个BUG开始看起。就开始通过IM和测试员掰扯起来(这不是个BUG啊、业务逻辑不是你想的那样啊、我这里不能重现啊、你给的信息描述不清晰啊),于是IM几来几往,甚至跑过去当面交流一番,甚至会拉扯上产品经理一起讨论,更甚者需要项目经理或产品经理发起一个会议来集体讨论一下 这是不是很熟悉呢?这就是大部分程序员开发的三个步骤:写代码、自测、修复BUG。 二、说好的代码设计、代码测试呢? 代码设计?那不是都有开发平台么,已经固化了啊。那不是维护旧功能做完善修改呢么,又不是写新代码,只能在现有代码基础上修改啊,你又不能大幅重构。 代码测试?你丫需求讨论期、产品设计期、设计评审期那么长,都把研发项目时间占光了,就留下2个星期让我们写代码,我们哪里有时间搞那么深的测试。还想让我们搞结对编程?还想让我们搞测试驱动开发? 而且你看测试,什么功能测试、集成测试、性能测试、安全测试、安装部署测试、升级测试、迁移测试、UAT测试,一大堆测试,测试也需要很多时间。 一个项目,需求讨论、产品范围规划与评审、产品设计与设计评审占了一个半月,开发+自测就一个月,测试占了一个半月,这就4个月了啊。 三、为啥程序员写代码总是写写测测? 刚才大家也都看到了,大部分程序员都是从界面代码开始写起,而且写一写,就运行一下看看。为什么会是这种开发方式? 那是因为大部分程序员缺乏在脑子中的整体建模能力。只能做出来一点,真实的感觉一下,然后再往下。 有些是产品经理的上游就有问题,没给出业务流程图(因为产品经理也没做过业务),也没画清楚产品功能操作流程图。 为啥没给出业务流程图?因为产品经理不熟悉业务,另外,产品经理也没有流程建模能力啊。为啥没画清楚产品功能操作流程图啊?因为不会清晰表达流程啊。 很多产品经理、程序员,都缺乏分类、分层、相关、先后能力,更别说总结、洞察能力。 这是基本训练,是一个做事头脑清醒的人必备的技能,这不是一个程序员或产品经理或测试员的特定技能要求。 我经常看书就梳理书的脉络,每看一本就写一篇总结。我过去闲扯淡还梳理过水浒传、红楼梦的人物关系图呢,其实就在事事上训练自己的关联性、层次性、洞察性。 我经常面试一个人时,我会问这样的问题:“你把我刚才说的话复述一遍,另外你再回答一下我为什么会这样?”,其实,我就在看一个人的细心记忆、完整梳理、重现能力,我也在看一个人的梳理、总结、洞察能力。 我个人写代码就喜欢先理解业务流,然后理解数据表关系,然后理解产品功能操作流,大致对功能为何这样设计、功能这样操作会取什么表、插入或更新哪些表,哪些表的状态字段是关键。 然后我写代码的时候,就根据我所理解的业务流、功能操作流、数据输入输出流,定义函数,定义函数的输入与输出。 然后,我会给函数的输入值,赋上一些固定值,跑下来看看能否跑通这几个关联函数,看看还需要怎样的新增函数,或者看看函数的输入输出参数是否满足跑通。 剩下的事,就是我填肉写详细逻辑代码了。 当然,大部分人没我这样的逻辑建模能力。怎么阅读理解也想象不出来,也没法定义函数。毕竟有逻辑建模能力的程序员都很少,100个人里有10个,已经是求爷爷告奶奶好幸运了。 那怎么办呢? 我建议是分离分工配合,这就是现实中没办法的办法。让有逻辑建模能力的人来设计函数框架、来设计工具来设计代码模板,然后让没有逻辑建模能力的人来填肉写详细逻辑代码。 我们可以先从最紧要的模块开始这么做。不紧要的模块,还让它放任自流,让熟练手程序员继续涂抹。 我曾经还让有头脑的程序员做榜样,给大家分享他是怎么规划函数的,怎么做维护性代码的代码结构改善的。但是发现效果并不佳,其他人并没有因此能做代码设计。可能逻辑建模能力是个人的基本素质,是从小到大训练成型的,不是你一个大学已经几年的人能够短时间内可以训练的。 所以啊,还是让能走的人先走,让从最紧要的模块开始这么做。 不必担心这样做后,因为过去一件事被分工(一个做代码框架一个填肉)成两个人做了会降低工作效率。我们很多的工作效率低就是因为半瓶子醋搞出来的,来回反复修改。 真是应了刘德华在电影里说的那句话:说你又不听,听又听不懂,听懂了又不做,做又做不好,做不好还不服气。 四、为什么大部分程序员不做代码测试或白盒测试或单元测试呢? 还是因为没有代码设计。因为没有函数啊。所以,一个按钮功能有多复杂,代码就有多长。我见过2000行的函数,我也见过1000多行的存储过程和视图SQL。怎么做白盒测试啊,这些代码都粘在一起呢,要测,就得从头到尾都得测。 所以啊,先学会设计函数,先写好函数,这就求爷爷告奶奶了。很多开发了5年的熟练手程序员,可能都未必会写函数。 函数的输入输出值就很有讲究。很多人都写死了,随着版本迭代,发现过去定义的函数参数不够用了,于是就新增了一个参数。然后,相关性异常就爆发了,其他关联的地方忘改了,到底哪些有关联,怎么查啊,本系统没有,没准其他系统就调用你了,你根本不知道哪个神经人曾经COPY过你的代码修吧修吧就改成了他的功能呢,而且里面的很多代码他看不懂也不敢删,只要他实现的功能正常了他也不管了。于是,你改了你这个函数,他的系统就莫名出错了。 所以,我一般会定义几个对象来做参数。另外,我也很注重函数的日志、函数的异常保护、异常抛出、异常返回。另外,我也很注重参数输入值的合法性校验。 所以啊,应该开发Leader们先制定函数编写规范最佳实践,输入输出参数怎么定义比较好,函数的返回值如何定义比较好,函数的日志记录应该怎么写比较好,函数的异常保护、异常抛出、异常返回如何写比较好。先教会一般程序员,先从会写函数开始啊。 当然,你光有一份规范,程序员们还是不理解、不实际应用啊。所以,还得Leader们做好典型的代码模板,里面是符合函数规范的代码框架,只有这样,一般程序员们才会照猫画虎适应了函数设计的编程习惯。 所以啊,我专门重新定义了leader的明确职责,其中第一个重要职责就是:负责工具/框架/模板/规范的制定,并且负责推广且普及应用落地。 你不明确定义Leader的这个重要职责,你不对这个职责做明确的KPI考核,谁尿你啊。你以为好的工具/框架/模板/规范是靠人们的热情、自发产生的么?我们还没有那么自觉高尚啊。 五、为什么大部分程序员不写注释啊? 我经常说一句话,千万别多写注释。为啥? 因为我们经常遇到的问题不是没有注释,而是更糟的是,注释和事实代码逻辑是不相符的。这就出现常见问题了:残存下来的设计文档是一个逻辑、注释是一个逻辑说明、真实代码逻辑又是一个,钟表多了,你也不知道正确时间了。 所以啊,产品文档、注释、真实代码,三者总是很难一致同步。我为了几百人研发团队能做到这个同步花了大量心血和办法,但我最终也没解决了这个问题,还把Leader们、总监们、我都搞的精疲力尽。 索性回归到一切一切的本源,代码,就是程序员的唯一产出,是最有效的产出。那么,让代码写的不用注释也能看懂,咱得奔着这个目的走啊。 为啥看不懂,不就是意大利面条式代码么,又长又互相交杂。 OK,我就规定了,每个函数不能超过50行。用这一个简单规定和静态代码检查插件,来逼迫大家尝试着写函数。有的函数属于流程函数,是串起其他函数的,有的函数就是详细实现函数,实现一个且唯一一个明确作用的。 有了流程函数和功能函数,而且每个函数不超过50行,这就比过去容易看懂了。 六、为什么大部分程序员不抽象公共函数啊? 我经常说一句话:千万别抽象公共函数啊。为啥? 因为大部分程序员缺乏抽象洞察能力。特别是有些积极热情有余、爱学习爱看书、半瓶子醋晃悠的二杆子,看了几本UML、重构、设计模式、整洁代码之道,就跃跃欲试了,还真敢给你抽象公共函数了。 一开始,他觉得80%相似,20%不相似,于是在公共函数里面简单写几个if..else做个区隔就可以。没想到,越随着版本迭代,这些功能渐渐越变越不一样了,但是这个代码已经几经人手了,而且这是一个公共函数,谁也不知道牵扯多少,所以谁也不敢大改,发现问题了就加一个if..else判断。 没想到啊没想到,这个本来当初公共的函数,现在变成了系统最大的毒瘤,最复杂的地方,谁也不敢动,除非实在万不得已,手起刀落。 所以,我平时告诫程序员,纯技术的、纯通用的,你们可以尝试搞搞抽象公共函数,对于业务的,你们还是简单粗暴的根据Leader们做的代码模板代码框架,乖乖的复制、修改、填肉吧。 你们啊,先从做模板做代码片段开始吧,咱们放到咱们内部代码片段开源库里,看谁的代码片段被别人复制的多,说明你的代码抽象设计能力越好了。那时候,我就大胆放心让你撒丫子跑了。在没有学会跑之前,给老子乖乖的复制、修改、填肉吧。
互联网运营专家
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 初学者怎么写代码 的文章

 

随机推荐