萌萌妈妈 发表于 2015-1-18 11:29:43

ASP.NET网页编程之.NET代码计划复杂标准仓酷云

我也不知道,我原来理解的,NET就是C++编程,只是与net网页编程相对,呵呵。以为.ET就是高级C++编程。上面这个标准是我为伴侣写的几点倡议,写的很范,作为BLOG,愿与人人一同分享。只给出部分计划标准样例,关于.NET编程的具体标准、计划请参考相干书本。
1、定名标准
1.1定名空间定名,一样平常定名为”公司简称+产物称号+程序包”的情势,如ARSC.EngineMap.Geometry、SharpMap.Framework、SharpMap.Controls、GoogleMap.Downloader、GoogleMap.App等,其长度一样平常请求不克不及过于太长。程序集的称号能够和定名空间坚持一向。注重能够在分歧的.DLL内里界说不异的定名空间。
1.2变量定名,假如是部分变量、函数接口变量,次要以易于表达观点的英语举行定名。单词第一个字符必需小写,假如是组合单词,第二个单词应当年夜写,如firstName、computerName。
PublicvoidConcactName(stringfirstName,stringlastName);
关于成员变量必要界说以”_”开首,如:
PublicclassPerson
{
Privatestring_firstName;
Privatestring_lastName;
Privateint_age;
}
1.3类定名,类次要由名词性短语定名,类的第一个单词都是年夜写,做到见名知意,如Person、Computer、ExtensionManager、PrintManager、FormatTransform、HttpDownloader、TcpDownloader、CommandPool、XmlHelper、XmlUtility、ProductFinder、ProductRepository、CourseCatalog等。注重的是类定名不克不及加单数情势如Persons暗示人的汇合,准确定名应当为PersonCollection。
1.4接口定名,接口定名能够参考类定名划定规矩,可是其必要在定名前加”I”。如ICommandPool、IDownloader、IPrintManager、IProductFinder等。
1.5办法定名,次要以动名词短语组成,函数次要表达一种盘算功效大概义务,因而给函数取一个符合的名字十分主要,如CaculateArea、QueryProduct、CreateBar、ExportView、CanSeek、HasValue、HasChildern等。长称号函数一样平常用于公有函数中,如CopyProductsToRepositoryFromCache这个函数要比正文好的多。
1.6代办署理定名,如供应回调的代办署理必要加上CallBack后缀:
PublicdelegatevoidProgressNotificationCallBack(intcurPos,inttotalSize);供应事务原型的代办署理必要加上EventHandler后缀,如:
PublicdelegatevoidCurrentToolChangedEventHandler(objectsender,MapToolEventArgse);
1.7事务定名,次要是要可以见名知意,如
PubliceventCurrentToolChangedEventHandlerCurrentToolChanged;
PubliceventEventHandlerCurrentLayerChanged;
1.8属人命名,供应公有成员的会见把持如
PublicstringName
{
Get{return_name;}
Set
{
If(value==null)
ThrownewArgumentNullException(“Namecan’tbesetnull.”);
_name=value;
}
}
2、成员会见把持
成员会见把持次要由internal(在该DLL内能够会见)、protected(子类能够会见)、private(公有会见)、public(会见不受把持)和Protectedinternal(在其子类大概该DLL外部能够会见),我们将一切成员变量都计划成公有,假如必要公然该数据,必要供应属性。如:
PublicclassPerson
{
Privatestring_name;

PublicstringName
{
Get{return_name;}
Set{_name=value;}
}
}
3、XML代码正文
关于公然函数接口必需供应代码XML正文,便于构成开辟文档。公有函数可得当加以正文。具体请参考MSDN。
///<summary>
///命令池对象,次要用于命令按钮的注册和反注册。
///</summary>
///<remarks>
///每个命令池都和一个<seealsocref="ICommandBars"/>绑定在一同,
///假如想将按钮增加到<seealsocref="ICommandBars"/>上,起首必需在命令池中注册该按钮项目。
///</remarks>
publicinterfaceICommandPool
{
///<summary>
///猎取命令池中工具条项目。
///</summary>
///<paramname="uid">命令按钮全局独一标识符。</param>
///<returns>前往工具条项目。</returns>
ICommandItemGetCommandItem(GuidClassuid);

///<summary>
///猎取和设置使用程序钩子其为<seealsocref="Jackey.Framework.IApplication"/>。
///</summary>
objectHook{get;set;}

///<summary>
///猎取和设置COM对象钩子。该钩子只必要在COM使用程序中举行设置。
///</summary>
objectCOMHookObject{get;set;}

///<summary>
///猎取和设置命令按钮单击回调函数。
///</summary>
ButtonClickCallBackButtonClick{get;set;}

///<summary>
///使用指定全局独一标识符注册命令按钮。
///</summary>
///<paramname="cmd">命令对象。</param>
///<paramname="guid">命令按钮全局独一标识符。</param>
///<returns>前往工具条项目。</returns>
ICommandItemRegisterCommandItem(ICommandObjectcmd,GuidClassguid);

///<summary>
///使用指定全局独一标识符注册命令按钮。
///</summary>
///<paramname="cmd">命令对象。</param>
///<paramname="cmdType">工具条项目范例</param>
///<paramname="guid">命令按钮全局独一标识符。</param>
///<returns>前往工具条项目。</returns>
ICommandItemRegisterCommandItem(ICommandObjectcmd,CommandTypeEnumcmdType,GuidClassguid);

///<summary>
///从设置文件中注册一切已设置的命令按钮项目。
///</summary>
///<paramname="exeConfigPath">设置文件路径</param>
voidRegisterCommandItemFromConfiguration(stringexeConfigPath);

///<summary>
///刊出一切命令按钮。
///</summary>
voidUnRegisterAll();

///<summary>
///刊出指定全局独一标识符的命令项目。
///</summary>
///<paramname="cmdID">命令按钮全局独一标识符。</param>
voidUnRegisterCommandItem(GuidClasscmdID);

}

再如:
///<summary>
///从XML文件中提取工具条和按钮,静态天生体系菜单,菜单天生算法存储于菜单天生引导者类.
///</summary>
publicclassXmlCommandBuilder:ICommandBuilder
{
#regionprivateandprotectedmembers

privateICommandBarsiCmdBars;
privateList<ICommandBar>_cmdBarList;

///<summary>
///xmldocument.
///</summary>
protectedXmlDocument_document;

///<summary>
///toolbaritemcommandid.
///</summary>
protectedreadonlystaticstringCOMMAND_ITEM_GUID="commandid";

#endregion

///<summary>
///机关函数。
///</summary>
///<paramname="xmlConfigPath">工具条设置文件路径。</param>
///<paramname="cmdBars">工具条办理器接口。</param>
///<exceptioncref="System.ArgumentNullException">当xmlConfigPath为空抛出该非常。</exception>
///<exceptioncref="System.ArgumentNullException">当cmdBars为空抛出该非常。</exception>
publicXmlCommandBuilder(stringxmlConfigPath,ICommandBarscmdBars)
{
if(String.IsNullOrEmpty(xmlConfigPath))
thrownewArgumentNullException("xmlConfigPathcan"tbenullorempty.");

if(cmdBars==null)
thrownewArgumentNullException("cmdBarscan"tbenull.");

this.iCmdBars=cmdBars;
_document=newXmlDocument();
_document.Load(xmlConfigPath);
}
}


4、尺度形式计划
4.1尺度IDispoable形式计划
关于具有非托管资本,如文件指针、数据库毗连、套接字等必需完成尺度IDisposable形式。关于组合完成IDisposable的类也应当完成IDisposable形式。
上面是一个尺度完成IDisposable的类。

publicclassBaseClass:IDisposable
{
privateFileStream_readStream;
privateFileStream_writeStream;
protectedbool_disposed;

//假如该类没有非托管资本则正文该闭幕器函数,该函数的增加会从必定
//水平上毁伤程序功能。
~BaseClass()
{
this.Dispose(false);
}

//同意子类重写该函数。
protectedvirtualvoidDispose(booldisposing)
{
if(!_disposed)
{
if(disposing)
{
//这里开释托管资本

if(_readStream!=null)
_readStream.Dispose();

if(_writeStream!=null)
_writeStream.Dispose();
}

//这里开释非托管资本
//dosomethingreleaseunmanagedresources.

_disposed=true;
}
}

publicvoidDispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}

}
publicclassDerivedClass:BaseClass
{
privateFileStream_myStream;

//假如该类没有非托管资本则正文该闭幕器函数,该函数的增加会从必定
//水平上毁伤程序功能。
~DerivedClass()
{
this.Dispose(false);
}

publicvoidReadNextChunk()
{
if(_disposed)
thrownewObjectDisposedException("objecthasbeendisposed.");

//dotherealthing.
}

protectedoverridevoidDispose(booldisposing)
{
if(!_disposed)
{
try
{
if(disposing)
{
//这里开释托管资本

if(_myStream!=null)
_myStream.Close();
}

//这里开释非托管资本
}
finally
{
base.Dispose(disposing);
}

//这句能够不加。
_disposed=true;
}
}
}

5、.Net开辟几点功能和计划成绩的倡议:
5.1制止在一个年夜的轮回内里实行装箱和拆箱操纵。办理举措是使用泛型如List<T>代替ArrayList。
ArrayListlist=newArrayList();
for(inti=0;i<10000;i++)
{
//装箱
list.Add(i);

//拆箱
Debug.WriteLine(list[i].ToString());
}
5.2关于庞大的事务交互的体系,在每一个类被闭幕前确保其已刊出一切事务。不然及易产生内存保守。这类情形在.Net和COM互操纵中常常呈现,如ArcObject的各类事务。
5.3关于工具类如WorkspaceHelper(封装AO的事情空间操纵的类)应当做到复杂和易于了解,不要把Helper和Utility类看成年夜杂烩,甚么办法都往内里放,这将招致代码十分难以修正。工具类的办法多数为静态办法,该类也为静态类。只管不要把类计划为静态类,一旦计划成静态类,将没法使用多态的上风。
来自:http://www.ckuyun.com/wobushixiaocai/archive/2008/04/17/1157722.html
其实net网页编程之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是net网页编程的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。

莫相离 发表于 2015-1-20 06:01:45

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

第二个灵魂 发表于 2015-1-25 20:31:33

这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。

分手快乐 发表于 2015-2-5 12:24:22

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

小妖女 发表于 2015-2-6 03:46:32

大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。

爱飞 发表于 2015-2-8 05:27:40

ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。

不帅 发表于 2015-2-19 04:24:21

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

灵魂腐蚀 发表于 2015-2-25 09:14:23

ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。

只想知道 发表于 2015-3-4 08:11:39

但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。

再现理想 发表于 2015-3-6 18:49:41

逐步缩小出错代码段的范围,最终确定错误代码的位置。

老尸 发表于 2015-3-9 02:37:49

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

因胸联盟 发表于 2015-3-13 02:07:17

ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。

小魔女 发表于 2015-3-20 09:28:38

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

愤怒的大鸟 发表于 2015-4-9 02:51:58

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
页: [1]
查看完整版本: ASP.NET网页编程之.NET代码计划复杂标准仓酷云