Some basic points

 
1.       To kill the nullreferance exception

 public event MyDelegate myEvent;

 if( myEvent != null )    myEvent(); 

myEvent is a class. it also use new to create a instance.  

2.       To use index in Class

use a property like here :

public MyType this[int index]
{
    get{return (MyType)someCol[index] ;}
}

 

3.       Use interface instead of class for the return type 

use IList instead of ArrayList

use IDictionary instead of Hashtable

use IDataReader instead of SqlDataReader

use IConnection instead of SqlConnection 

so , in the future , we can easily change the  realization. 

4.       Use factory method instead of the construct method 

so, wo can not have to know the detail of building  the class 

factory method return abstract class or interface  

5.       Use a object instead of a lot of 'string and int '  parameter, especially when the parameter is not so  fixed. 

for example, use a DataRow instead of a row value  list 

6.       throw own exception in each layer of the System, never ingnore Unknown type Exception never let User see NullReferanceException no one know what it means. 

throw own exception in each layer of the System ,for example ,  

in the DAO :

try{

    ICommand.ExecuteNoneQuery();   

}

catch(SqlException ex)

{

    throw new DatabaseException(ex);

}

[you must add string 'database error' to the  DatabaseException message

so the DatabaseException message will be like this  : " database error : it has too more chars in the  column <password> "]

 

in the business layer:

 

try

{

    DBHelper.Execute(someSql);

}

catch(DatabaseException ex)

{

    throw new BusinessCannotExecuteException (ex);

}

 

never ingnore Unknown type Exception , for example ,

 

try

{

    Something();

}

catch(Exception ex)

{}

 

Youd better do it like this:

 

try

{

    Something();

}

catch(SomeExceptionType ex)

{

}

catch(Exception ex)

{

    // log here

    throw ex;

}

 

So the exception can breakthrougth to the top layer.

 

 

7.       use Asynchronous Method instead of Synchronous  Method,especially when the process will take a long  time and we are developing a GUI project.

 

it can help us to keep the UI smart.

 

8.       use lock to lock resource when the program may run in more than 1 threads

 

lock(myObject)

{

    doSomething(myObject);

}

 

myObject cannot be value type

 

In static method

lock(typeof(thisClassName))

{

    doSomething();

}

 

 

posted @   quitgame  阅读(320)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示