|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
也许C#刚上市的时候有些抄袭Java吧,但自从C#2.0上市之后,整个局面就扭转乾坤了,不但Java在模仿C#,而且他从来都没能跟得上C#的脚步。尺度|程序 开辟企业使用程序是个庞大的历程。你能够使用Microsoft.NET手艺的很多工具来使这个历程变得更快更简单,但因为.NET的庞大性,选择最间接的办法是很难的。假如没有明白的尺度和目标用来开辟使用程序,企业中的每一个开辟小组便可能在平安、数据库会见战略和测试历程长进行反复开辟。固然每一个小组都大概在这些范畴中开辟出无效的办法,但会招致不用要的反复事情。并且在主要的平安性方面,假如每一个开辟小组都断定各自的平安完成办法,那末使用程序大概变得很简单遭到打击。
假如你在IT团体公司事情,这类情形切实其实很罕见。侥幸的是,你能够把事变复杂化。固然企业中开辟的每一个使用程序都办理一个共同的贸易成绩,但你能够将一切的使用程序创建在一样的底层框架组件上。经由过程开辟尺度和公从定名常规到用来强化使用程序布局的预装组件的最好办法。共使用程序布局组件,你的开辟小组就能够节俭工夫、确保使用程序是平安的、并改良各小组间的合作。尺度的局限很广,
在本文中,我将切磋在企业中完成一个大众使用程序布局框架的最好的办法。我将出格存眷三个次要的方面:使用程序平安性、数据库会见战略和测试历程。我将报告考证你的用户的身份、用四个层来构建你的企业级使用程序、还将报告一下Microsoft的两个新的工具――Dataset和DataReader――它们是ADO.NET的一部分,能够帮你分别各个层。
使用预装组件是增强使用程序布局并供应一样平常服务的一个好办法。由于使用程序布局是个企业级的成绩,你现有的企业构造布局中大概并没有一个小组来承当这项事情。但是,构成如许一个小组是很复杂的,你只必要从头体例各个小组,然后分派一些手艺很强的职员(已在你们公司中)来处置使用程序布局方面的事情。
你在引进一个大众底层框架使用程序时,各小组大概次要存眷贸易成绩,而不是忧虑布局成绩。这就使我们对做每一个使用程序的开辟职员的手艺请求其实不高。因而,开辟进度就会延长,能够更好地呼应市场情形。一切这些要素的分离就会削减开辟和保护方面的投资,终极进步你们公司的获利。但是,你起首必要在三个次要方面创建一个大众底层框架:使用程序平安性、数据库会见战略和测试历程。
平安是很主要的,你应当从开辟的初期阶段就把持使用程序布局的这个方面。得当的用户身份考证和受权能够包管一个使用程序的平安。在没有会合的平安组件的时分,每一个小组编写它本人的平安代码,这是很伤害的。一其中心平安战略不但可使开辟职员制止反复休息,为企业中一切的使用程序供应一样级其余回护,还能够创立一个布局,使一切的修正都在一个中央举行,并且不会发生新的平安毛病。平安布局中主要的一步就是用户身份考证。
考证你的用户身份
一个典范的企业必要考证两类用户的身份:外部用户(雇员)和内部用户(供给商和客户)。你的企业应当创建一致的战略来考证这两类用户的身份并对他们受权。
在传统的ASP中,假如你不必集成的Windows考证,用户身份考证和受权是很难完成的。比方,断定每一个用户身份都经由了考证其实不简单。每一个ASP页面都必要代码来查验用户身份考证cookie并证实用户身份失掉了断定。在ASP.NET中,身份考证和受权比在传统的ASP中要简单多了。在ASP.NET中,有三种情势的身份考证:Windows考证、Passport考证和Forms考证。
Windows考证很复杂,用于复杂的使用程序。它依据以后域的ActiveDirectory(AD)来考证用户身份。用户组被看成脚色来举行基于脚色的考证。用户组的脚色大概不像使用程序必要的那末细化,以是它们必需存在另外一个数据库或本人的AD中;Windows考证不克不及改动这些脚色。
Passport考证是Microsoft的.NETMyServices战略的一部分,用来考证Internet程序中的用户。Passport是个单点登录(SSO)服务,同意注册用户用一个单一的用户ID和暗码来会见相干的网站。MicrosoftPassport服务器卖力保护用户身份信息并供应一个考证机制。Passport的wallet功效给用户供应了选项来存储他们的信誉卡信息并与网站共享。假如网站必要更多的信息,它们能够在它们本人的数据库中失掉谁人信息,并将它同Passport用户ID分离起来。这对用户是有优点的,由于她的信息是会合存储的,她不必要会见每一个网站时都反复输出信息。关于企业来讲,这类考证有欠好的中央,由于它们必需信任一个数据库,而它们对这个库却没法把持。到今朝为止,Passport考证很难被人们普遍接纳而成为一种可行的考证办法。
与Passport考证分歧,Forms考证具有天真性,你能够拔出定制的考证代码,并开辟大众的平安组件。你能够在服务器端machine.config中设置它,一旦完成设置,组件就主动拔出谁人服务器上的一切使用程序中了。
研讨平安组件
ASP.NET供应了一个很好的办法用HttpModule在哀求实行的路径中拔出新的功效。开辟职员能够创立定制的HttpModule,用来考证外部/内部用户,创建用户脚色并创立一个定制的次要工具。关于一个复杂的定制HttpModule,你能够下载代码样例(见列表1)。
你也大概想思索你的平安组件的一些别的的功效。比方,具有一个平安办理把持台会很好。如许就供应了举措措施来界说使用程序脚色,给脚色受权(URLS和操纵),并给用户授与脚色。当你有一个把持台使用程序时,你能够委派办理义务,包含平安设置。人们改动脚色时,关于一个给定的脚色来讲,使用程序功效就改动了,这时候候组件很有效,
你大概想扩大平安模块来检察URL和它的操纵代码,并检察用户是不是被受权了。使用程序中的每一个资本或URL能够有多个操纵历程,如检察、创立、更新和删除。假如你能够在操纵上(而不是资本上)把持用户的会见,这会很有效。这就使ASP.NET页面能够为相干用户失掉操纵清单,而不必忧虑用户具有甚么脚色。最初,思索供应ASP.NET服务器端组件本性化,依据用户才能来实行使用程序菜单。
一旦你失掉了得当的平安组件,你就做好筹办研讨你的数据会见办法了。人们在这方面常犯的毛病就是在显现层开辟一切的器材,包含你的贸易逻辑和数据会见组件。这类开辟就招致了很难保护的像意年夜利面条一样的代码(见资本)。它也使改动数据库的企图大概改动到一个全新的数据库变得很难、很高贵,由于你必需找到分布在你的使用程序中的一切的独自的数据会见挪用指令。用四个层来构建你的企业级的使用程序――显现层、事情流层、贸易层和数据会见层――可使使用程序更简单保护、更具扩大性。
关于这个话题,我将重点报告数据会见层。使用程序必要将数据会见层同贸易工具分明分别开。你不想让SQL语句分布在从显现层到贸易层的一切代码中。这些层不必要晓得数据是怎样失掉的,从那里失掉的。
Microsoft包括两个新的工具――Dataset和DataReader――它们作为ADO.NET的一部分来分别各个层。Dataset工具关于一个不毗连的使用程序形式是很有效的,而DataReader工具则用于毗连的使用程序。但是,这些工具都有一个弱点:当你会见属性的值时,它们大概经由过程名字大概经由过程列号来查找。在经由过程列的名字会见数据的情形下,假如在这些名字中有一个typo,在编译时就不会被检测出来。当列名分布在你的代码中时,就很难在今后改动它们的名字了。假如你经由过程列号来会见数据,代码更难读,并且你必要晓得列在Dataset或DataReader中呈现的按次。
使用StronglyTypedDatasets
强范例(stronglytyped)datasets办理了这个成绩,但你不克不及总用Dataset工具。当你使用Dataset工具时,它把一切纪录都读进内存中,在大批的使用程序中,服务器资本会用尽。但假如用DataReader,就没有一个同等于stronglytypedRow的工具。一种办法就是重复使用Dataset和DataReader,如许会构成强范例的工具,是很幻想的。
我用的一种办法就是对每一个表用一个Proxy工具和一个Domain工具。Proxy工具包括SQL语句或存储历程挪用指令来失掉或保留域工具。Domain工具包括属性来表现表的特征。贸易逻辑组件与Proxy工具交互,并在Domain工具上实行贸易逻辑。这类办法为Proxy工具限定了SQL语句或历程名字的内容。它供应了一个一致的数据会见战略,进步了使用程序代码的可读性,削减了运转时的毛病,并供应了天真性,假如它有需要转换到一个分歧的数据库层的话(见)。
你应当用松懈藕合的层来构建使用程序。如许能够进步使用程序的可保护性、可扩大性和重用性。这类办法包括用于每一个表的一个Proxy工具和一个Domain工具。Proxy工具包括SQL语句或存储历程挪用来失掉或保留domain工具。Domain工具包括属性来出现表的特征。
我们有需要切磋一下关于Proxy工具更多的细节成绩。一个引发人们争议的成绩就是在Proxy工具中是使用SQL语句仍是使用存储历程挪用。使用存储历程比SQL语句更无效。因而一些公司更喜好用存储历程,但你应当选用更合适你公司的办法。不论你接纳甚么办法,制止分裂存储历程和贸易逻辑组件之间的贸易逻辑。我喜好把贸易逻辑保留在贸易工具中。作为例子,我供应了一个C#代码列表,它显现了一个Authors表的Proxy和Domain类(见列表2)。
你必要思索的使用程序布局框架中的最初一步就是测试历程。测试在开辟阶段很主要,由于它是证实软件可行的独一的体例。但是,在工夫紧急的情形下,好比刊行日期快到了,测试一般仿佛处于一个主要地位。并且在年夜多半情形下,测试这项事情必要人们精神会合、担当义务。每次代码改动时,都必要人们严厉地反复测试历程。
一种新的软件开辟办法学,极度编程(extremeprogramming),引进了一个严厉的软件开辟办法,这类办法切记使终极产物能够托付、利用户中意并质量及格(见资本)。它是创建在一个基于测试的开辟理念上的,勉励开辟职员在编写实践的功效代码前,编写测试用例。一切的测试用例都作为类来开辟,它们测试贸易功效类的功效性。
一旦将测试用例作为类,你就能够在任什么时候候反复测试。假如一切的测试用例都不克不及运转,你就会晓得有成绩。当现有的代码被改动时(极可能有些器材被损坏),这类测试办法特别无效。
为了使测试更简单,极度编程办法的创建人KentBeck创立了一种复杂的称为JUnit的框架,令人们能够用Java编写测试用例。作为.NET程序的“工场”,你能够使用一律的公然的资本NUnit(见资本)。它是创建在JUnit的最后看法上的,你能够把它同VisualStudio.NET(VS.NET)集成起来。它可让你在统一个项目中包括测试类和功效类。在不异的项目中具有测试类和功效类就能够举行无效的测试。每次当一个功效类改动时,你不必要转换项目来测试。在开辟周期中,你将测试办法增加到测试用例类,并增加功效到贸易类,然后运转测试用例。测试类也同贸易类一同集成在VisualSourceSafe中。当你将测试作为开辟历程的一个不成支解的部分时,你的代码质量就进步了,反复测试很复杂。它也打消了因为改动代码而引发的害怕。
如今你已晓得了创建一个大众的使用程序布局的步骤,你已做好筹办将它们用于你的企业了。创建一个主动的小组,让它们卖力大众的底层框架及其远景。每一个企业城市构建本人的使用程序并为此投资。创立一个大众的底层框架能够帮你更快地开辟更高质量的使用程序,并且投资更少。
关于作者:
RaoChejarla是一个自力的软件征询者。他次要存眷软件工程办法学和使用.NETFramework和J2EE的使用程序布局。他在软件开辟、计划和布局方面已有12年的履历了。他的接洽体例是kotrao@yahoo.com">Framework和J2EE的使用程序布局。他在软件开辟、计划和布局方面已有12年的履历了。他的接洽体例是kotrao@yahoo.com。
就安全性而言,Java已经远远低于VB.NET,更无法与安全性著称的C#相比。 |
|