Duwamish代码分析篇一

简介: Duwamish代码分析篇一 继续前面的2篇POST《Duwamish架构分析篇》和《Duwamish部署方案篇》,这里在代码层次上分析Duwamish  7.0范例,主要目的是解析Duwamish范例中值得推荐的编码风格和提炼出可以重用的代码或Class。
Duwamish代码分析篇一

继续前面的2篇POSTDuwamish架构分析篇》Duwamish部署方案篇》,这里在代码层次上分析Duwamish  7.0范例,主要目的是解析Duwamish范例中值得推荐的编码风格和提炼出可以重用的代码或Class。

 

1,读取配置文件类-SystemFramework\ApplicationConfiguration.cs

ApplicationConfiguration类用来读取web.config文件中自定义section的配置信息,初始化一些基本设置。

ApplicationConfiguration类实现IconfigurationSectionHandler接口,并需要实现[C#]

object Create(

   object parent,

   object configContext,

   XmlNode section

)方法,以分析配置节的 XML。返回的对象被添加到配置集合中,并通过 GetConfig 访问。

 

 

部分代码片断解释:

1Code Snippet 1 – ApplicationConfiguration. OnApplicationStart()方法

public static void OnApplicationStart(String myAppPath)

{

    appRoot = myAppPath;

    System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration");

    System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration");

    System.Configuration.ConfigurationSettings.GetConfig("SourceViewer");      

}

ConfigurationSettings 类还提供了一个公共方法ConfigurationSettings.GetConfig() 用于返回用户定义的配置节的配置设置,传入的参数section name,如"ApplicationConfiguration",表示要读取的配置节。

 

NameValueCollection nv=new NameValueCollection();

//实例化NameValueCollection 类对象

nv=(NameValueCollection)ConfigurationSettings.GetConfig("ApplicationConfiguration ");

//返回用户定义的配置节的设置

return nv["SystemFramework.Tracing.Enabled"].ToString();

//返回特定键值,如SystemFramework.Tracing.Enabled

 

不过,ConfigurationSettings.GetConfig()方法在调用时,自动调用Create()方法,可以看到ApplicationConfiguration.Create()方法正是用来读取指定section的配置,并初始化设置参数。

 

Global.asax 的 Application_OnStart 事件处理程序向 SystemFramework 的ApplicationConfiguration 类 OnApplicationStart 方法发出调用,正是上述的代码片断。

 

2Code Snippet 2 Global.asaxApplication_OnStart()方法

void Application_OnStart()

{

    ApplicationConfiguration.OnApplicationStart(Context.Server.MapPath( Context.Request.ApplicationPath ));

    string configPath = Path.Combine(Context.Server.MapPath( Context.Request.ApplicationPath ),"remotingclient.cfg");

    if(File.Exists(configPath))

        RemotingConfiguration.Configure(configPath);

}

该方法肩负二大任务:(1)调用ApplicationConfiguration.OnApplicationStart()方法,并传入application的根目录(Root Directory)。(2)检测Client端的remoting配置文件是否存在(其实是web server端),如果存在,则读取并初始化remoting配置信息,如配置通道Channel等等,详见《Duwamish部署方案篇》。

 

2,读取web.configDuwamish相关的一些配置-Common\DuwamishConfiguration.cs

Common\DuwamishConfiguration.cs也实现IconfigurationSectionHandler接口,与SystemFramework\ApplicationConfiguration.cs类相似。

 

DuwamishConfiguration配置节包括如下一些配置信息:

Database connection string(Database连接串)Duwamish.DataAccess.ConnectionString,是否允许页面缓存Duwamish.Web.EnablePageCache,页面缓存过期时间Duwamish.Web.PageCacheExpiresInSeconds,是否允许SSL连接Duwamish.Web.EnableSsl等等。

 

如上所述,调用DuwamishConfiguration Class 是由SystemFramework\ApplicationConfiguration.cs的OnApplicationStart()方法完成的:

System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration");

 

看看页面缓存配置在web page中如何使用的(web\book.aspx.cs文件为例):

//

// If everything succeeded, then enable page caching as indicated

// by the current application configuration.

//

if ( DuwamishConfiguration.EnablePageCache )

{

    //Enable  Page Caching...

    Response.Cache.SetExpires ( DateTime.Now.AddSeconds(DuwamishConfiguration.PageCacheExpiresInSeconds));

    Response.Cache.SetCacheability(HttpCacheability.Public);

}

在Page_Load事件中最后判断是否允许页面缓存。

 

3,验证数据合法性类-SystemFramework\ApplicationAssert.cs

SystemFramework\ApplicationAssert.cs Class用来进行错误检测,并调用SystemFramework\ApplicationLog.cs Class记录错误日志。

 

学习其中的部分代码片断:

1Code Snippet 1 – Check Method

[ConditionalAttribute("DEBUG")]

public static void Check(bool condition, String errorText, int lineNumber)

{

    if ( !condition )

    {

        String detailMessage = String.Empty;

        StringBuilder strBuilder;

        GenerateStackTrace(lineNumber, out detailMessage);

        strBuilder = new StringBuilder();

        strBuilder.Append("Assert: ").Append("\r\n").Append(errorText).Append("\r\n").Append(detailMessage);

        ApplicationLog.WriteWarning(strBuilder.ToString());

        System.Diagnostics.Debug.Fail(errorText, detailMessage);

    }

}

 

[ConditionalAttribute("DEBUG")]定义Check()方法为conditional method,如果预处理符号(preprocessor symbol)没有定义,compiler不仅忽略该方法,而且忽略对该方法的调用,和#if DEBUG / #else / #endif有些类似。

 

该方法用来判断条件condition是否为true,如果为false,则调用SystemFramework\ApplicationLog.WriteWarning()方法记录错误日志。

目录
相关文章
|
IDE 开发工具 Android开发
Kotlin 的静态代码分析工具
Kotlin 的静态代码分析工具
202 0
|
5月前
|
安全 算法 测试技术
静态代码分析的这些好处,我竟然都不知道?
软件开发中,单元测试确保模块功能,但静态代码分析是质量保证的关键。静态分析检查代码结构,发现潜在错误,补充单元测试的不足。虽然静态分析工具不能替代人工验证,它们在识别复杂逻辑错误和提升代码质量方面至关重要。结合单元测试和静态分析能提高代码安全性与整体质量,减少后期问题,降低成本。SonarQube等工具简化了静态分析过程,强调早期错误检测的重要性。
|
6月前
|
安全 JavaScript 前端开发
提高代码质量,从静态代码分析开始
每个开发者都应该明白代码质量的重要性,因为良好的代码质量可以确保项目的可维护性、稳定性和可扩展性。而静态代码分析工具 SonarQube 可以帮助开发者提高代码质量,同时也可以简化代码审查和测试流程。本文将介绍 SonarQube 的概念和用法,以及如何将其应用于实践中,提高代码质量。
|
6月前
|
安全 数据可视化 Oracle
提高代码质量,从静态代码分析工具SonarQube开始
在软件开发过程中,代码质量是至关重要的。而静态代码分析工具SonarQube可以帮助开发人员有效地管理代码质量。本文将介绍SonarQube的概念和实践,以及如何使用它来提高代码质量。
341 1
|
6月前
|
存储 RDMA 内存技术
nvmf代码分析
nvmf代码分析
|
Java 测试技术 Maven
单元测试运行原理探究
单元测试是软件开发过程中的重要一环,好的单测可以帮助我们更早的发现问题,为系统的稳定运行提供保障。单测还是很好的说明文档,我们往往看单测用例就能够了解到作者对类的设计意图。代码重构时也离不开单测,丰富的单测用例会使我们重构代码时信心满满。
单元测试运行原理探究
|
PHP
什么?你还不会断点调试代码
什么?你还不会断点调试代码
112 0
什么?你还不会断点调试代码
|
计算机视觉 异构计算
对Any_percision的代码分析
首先是数据集的选择:cifar10, imagenet,svnh 网络的选择:resent20q
77 0
|
PHP
什么?你还不会断点调试代码(2)
什么?你还不会断点调试代码
104 0
什么?你还不会断点调试代码(2)
|
Java Android开发
配置Android项目 - 静态代码分析工具(一)
配置Android项目 - 静态代码分析工具(一)
235 0
配置Android项目 - 静态代码分析工具(一)