Some basic points
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)
{}
You’d 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();
}