只想知道 发表于 2015-1-18 11:16:01

ASP.NET网页编程之通用社区上岸组件手艺分享(开源)下篇:OAuth 源码下载及道理讲授仓酷云 ...

那做企业软件是不是最好用J2EE?本节内容:

1:简述组件计划的历程及思绪及部分重点源码解说
2:源码下载
3:扩大机制申明

附源码截图:等会看以下思绪时,能够对比着看:

一:简述组件计划的历程及思绪
1:为何想到弄成组件?
当反复的代码或类似的事务>=2个时,我城市想一下,是不是还大概有第3个,第4个邻近的,假如有,就会一致处置,组件就是计划的再通用一些。
2:自己计划组件的准绳?

2.1:让用户以最复杂的体例利用或挪用组件,编写代码量最小化;
2.2:一切的计划,都参考第2.1点。

3:自己组件计划的复杂思绪历程:(5行代码的计划思绪)
        3.1:用户的操纵UI计划:

如上图的第三方受权上岸怎样展现?

在html里间接写逝世?感到不给力,并且假如扩大多几个第三方上岸时,又要往组合网址,是件贫苦事。
以是我想到了应当有UI类,应当有个GetHtml(),如许来办理让挪用更复杂。

完成UI.GetHtml()办法:
这里也是有点常识点的,为了让代码简便化,我花了很多工夫思索,经由过程优秀的代码组合计划,削减代码量的编写。
因而,我用了一个经常使用办法,来优化这类计划:


publicstaticstringGetHtml()
{
stringlink="<ahref=http://www.kuqin.com/shuoit/20131026/"{0}"target="_blank">";
StringBuildersb=newStringBuilder();
foreach(KeyValuePair<string,OAuth2Base>obinOAuth2Factory.ServerList)
{
if(!string.IsNullOrEmpty(ob.Value.AppKey))
{
sb.AppendFormat(link,string.Format(ob.Value.OAuthUrl,ob.Value.AppKey,System.Web.HttpUtility.UrlEncode(ob.Value.CallbackUrl),ob.Key),ob.Value.ImgUrl);
}
}
returnsb.ToString();



这段代码里,包括了几种优化思绪:

1:应当有一个办法,能够猎取以后一切的受权范例:OAuth2Factory.ServerList。
2:受权范例应当包含一些设置项,能够间接读取:ob.Value.OAuthUrl,ob.Value.AppKey,ob.Value.ImgUrl

在想出这类办法时,还没入手下手计划OAuth2受权相干类,以是事先还只是伪代码,跟着OAuth2类被完美,这里的代码就复杂成型了。
OK,让我们转头看看:
        3.2:OAuth受权类计划(传说的笼统+工场):
和数据库多半据库撑持的计划思绪如出一折。


1:应当有个基类:OAuth2Base(包含通用的办法和属性)
2:持续基类OAuth2Base,完成分歧的受权:SinaWeiboOAuth、QQAuth、别的...等!
3:有个工场OAuth2Factory来前往以后的受权范例(正如数据库组件来计划以后是操纵哪一种数据库范例)
4:有个小工具类Tool,放几个经常使用的小办法。


在OAuth2Factory里,我们经由过程事后注册一切的子类受权,来汇总一切的受权范例。
以是GetHtml里能够猎取一切受权范例举行遍历组装。
代码:


staticDictionary<string,OAuth2Base>_ServerList;
///<summary>
///猎取一切的范例(新开辟的OAuth2必要到这里注册增加一下)
///</summary>
internalstaticDictionary<string,OAuth2Base>ServerList
{
get
{
if(_ServerList==null)
{
_ServerList=newDictionary<string,OAuth2Base>(StringComparer.OrdinalIgnoreCase);
_ServerList.Add(OAuthServer.SinaWeiBo.ToString(),newSinaWeiBoOAuth());//新浪微博
_ServerList.Add(OAuthServer.QQ.ToString(),newQQOAuth());//QQ微博
}
return_ServerList;
}
}



全体的计划其实不庞大,只需完成后,就能够完成受权,并失掉第三方的token和openid数据。
到这里,并未完成绑定账号,因而我入手下手思索:
        3.3OAuth2绑定网站的账号完成第三方上岸:
怎样和本人的网站的账号完成绑定?


在本来网站的数据库里,增加字段?大概创立新表,再举行计划?
思索到如许的计划,和网站代码分离度一定很深,不成能做到通用型,并且分歧网站,用的是分歧的数据库,那得编写几种分歧的剧本?
以是思前想后,将数据外置存储在内部文本,思索到CYQ.DataV5已靠近完善的撑持文本数据库及CodeFirst操纵,以是援用它做为默许的外置数据库操纵类。


固然拿到源码后,假如关于外存储过块必要调剂或利用别的框架,这个自行操纵了,不干与外交。
内置的文本数据库办理计划:
假如对照下面的源码截图,你应当发明,以是类都提到了,只剩下最初一个:OAuth2Account,它就是完成和网站绑定的罪人。
代码也很复杂的说(除承继自OrmBase和机关函数指定了表名和文本存储路径,基础上就是一个罕见的实体类了):


publicclassOAuth2Account:CYQ.Data.Orm.OrmBase
{
publicOAuth2Account()
{
base.SetInit(this,"OAuth2Account","TxtPath={0}App_Data");
}
privateint_ID;

publicintID
{
get
{
return_ID;
}
set
{
_ID=value;
}
}
privatestring_OAuthServer;
///<summary>
///受权的服务范例
///</summary>
publicstringOAuthServer
{
get
{
return_OAuthServer;
}
set
{
_OAuthServer=value;
}
}
privatestring_Token;
///<summary>
///保留的Token
///</summary>
publicstringToken
{
get
{
return_Token;
}
set
{
_Token=value;
}
}
privatestring_OpenID;
///<summary>
///保留对应的ID
///</summary>
publicstringOpenID
{
get
{
return_OpenID;
}
set
{
_OpenID=value;
}
}
privatestring_BindAccount;

privateDateTime_ExpireTime;
///<summary>
///过时工夫
///</summary>
publicDateTimeExpireTime
{
get
{
return_ExpireTime;
}
set
{
_ExpireTime=value;
}
}

privatestring_NickName;
///<summary>
///前往的第三方昵称
///</summary>
publicstringNickName
{
get
{
return_NickName;
}
set
{
_NickName=value;
}
}
privatestring_HeadUrl;
///<summary>
///前往的第三方账号对应的头像地点。
///</summary>
publicstringHeadUrl
{
get
{
return_HeadUrl;
}
set
{
_HeadUrl=value;
}
}


///<summary>
///绑定的账号
///</summary>
publicstringBindAccount
{
get
{
return_BindAccount;
}
set
{
_BindAccount=value;
}
}
}


在OAuth2Base基类里有两个和内置文本数据库打交首的函数:GetBindAccount和SetBindAccount:


///增加绑定账号
///</summary>
///<paramname="bindAccount"></param>
///<returns></returns>
publicboolSetBindAccount(stringbindAccount)
{
boolresult=false;
if(!string.IsNullOrEmpty(openID)&&!string.IsNullOrEmpty(token)&&!string.IsNullOrEmpty(bindAccount))
{
using(OAuth2Accountoa=newOAuth2Account())
{
if(!oa.Exists(string.Format("OAuthServer={0}andOpenID={1}",server,openID)))
{
oa.OAuthServer=server.ToString();
oa.Token=token;
oa.OpenID=openID;
oa.ExpireTime=expiresTime;
oa.BindAccount=bindAccount;
oa.NickName=nickName;
oa.HeadUrl=headUrl;
result=oa.Insert(CYQ.Data.InsertOp.None);
}
}
}
returnresult;
}


因为是CodeFirst及计划的是文本数据库,以是不必往兼容分歧网站的数据库,主动天生文本数据库外置,只必要好好玩这个实体就能够了。
复杂的就先容到这了,计划其实不庞大,代码量其实不多,办法和成员也很少。
二:源码下载
源码点击下载:OAuth2_Source.rar()
三:扩大机制申明
看完本文,下完源码,大概您大概会有以下功效必要举行调剂,这里给出引导与申明:


1:界面UI的调剂,详细看UI类,修改下便可。
2:增添受权品种:承继OAuth2Base,参考已有的新浪微博和QQ举行操纵,固然也能够接洽我让我增加。
3:怎样获得绑定后的表数据:只需挪用newOAuth2Account().Select().Bind(列表);
我也不知道,我原来理解的,NET就是C++编程,只是与net网页编程相对,呵呵。以为.ET就是高级C++编程。

因胸联盟 发表于 2015-1-22 07:14:32

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

飘飘悠悠 发表于 2015-1-29 12:12:22

我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。

老尸 发表于 2015-2-4 07:12:52

我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。

小妖女 发表于 2015-2-8 08:17:40

PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。

再见西城 发表于 2015-2-25 02:12:16

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

活着的死人 发表于 2015-3-7 15:45:24

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

精灵巫婆 发表于 2015-3-10 23:02:25

网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!

兰色精灵 发表于 2015-3-13 01:07:10

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

山那边是海 发表于 2015-3-20 07:50:45

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
页: [1]
查看完整版本: ASP.NET网页编程之通用社区上岸组件手艺分享(开源)下篇:OAuth 源码下载及道理讲授仓酷云 ...