之前写的一些程序,都是用最简单的语言来完成,现在看了公司里别人以前写的程序,做了比较,感觉自己写的太烂了,代码完全不是一个档次的,并不是说人家写的怎么怎么滴高深,但是看人家的代码,就感觉人家很专业,先说说一些区别:
1.我写的程序基本上没用到高深的东西,最多最多,只用到了委托,然后结构体,接口,这种东西,我都没用到,所以我的代码很简单,我也不知道属性封转,公司里写的程序基本上是结合自己的硬件使用的,都涉及到串口通信之类的。
总之我觉得,我用了C#,它是面向对象的,但是我根本没发挥它的长处,只是声明字段,写方法,方法调用方法,最开始的时候,更没水平,导致内存占用很多(在学校的时候,基本没想过太占内存了会怎样),运行速度很慢,后来还算有改观。
2.这几天看了同事之前写的项目,看的我傻眼了,感觉很高级,也不知道他这么写有什么有点,属性封装,结构体,范型都用上了,还有一些控件,后台运行的控件,总之,让我觉得很专业,程序写的很健壮。看看自己写的程序,感觉跟没学过C#的人一样,写的都是什么啊,虽然没有什么错,虽然只要不错就好了,但是我很想写的好一点,写的专业一点,提高自己的水平。上来问一下,作为一个实际应用的项目,怎样才算做的好,程序设计上,怎样才算最优!!而不只是能用,需要学些什么东西,有经历的都来说说吧。谢谢啦
1.我写的程序基本上没用到高深的东西,最多最多,只用到了委托,然后结构体,接口,这种东西,我都没用到,所以我的代码很简单,我也不知道属性封转,公司里写的程序基本上是结合自己的硬件使用的,都涉及到串口通信之类的。
总之我觉得,我用了C#,它是面向对象的,但是我根本没发挥它的长处,只是声明字段,写方法,方法调用方法,最开始的时候,更没水平,导致内存占用很多(在学校的时候,基本没想过太占内存了会怎样),运行速度很慢,后来还算有改观。
2.这几天看了同事之前写的项目,看的我傻眼了,感觉很高级,也不知道他这么写有什么有点,属性封装,结构体,范型都用上了,还有一些控件,后台运行的控件,总之,让我觉得很专业,程序写的很健壮。看看自己写的程序,感觉跟没学过C#的人一样,写的都是什么啊,虽然没有什么错,虽然只要不错就好了,但是我很想写的好一点,写的专业一点,提高自己的水平。上来问一下,作为一个实际应用的项目,怎样才算做的好,程序设计上,怎样才算最优!!而不只是能用,需要学些什么东西,有经历的都来说说吧。谢谢啦
这里有一条建议:不要把SQL语句写在窗体(页面)的代码里,也就是说,不要把业务逻辑与界面混在一起,要不然会死人的。
在公司看来你的代码如何写他都不在乎,在乎的只有结果。你把软件做完了,功能实现了,能够健壮的运行了这就ok了。
但是对程序开发人员就不一样了。因为程序以后需要维护,如果一开始的代码就很头疼,那以后如何维护?那不得愁死啊。。
我觉的首先整个程序要有一个总体的设计,根据需求进行类的划分,结构的设计,也就是你所说的继承、封装……,其实这是设计模式的范畴了。可以看一下gof 设计模式,head first 这里面就由浅入深的讲解了很多小的例子。
这些其实就是面向对象的一些具体应用。说简单很简单,一个例子就可以入门。
语言表述的不好……呵呵
比如在做一个数据库中插入数据的功能
首先在数据访问层中定义方法//这是数据访问层中的一个类,这里有sql语句没有任何界面
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;namespace DAL
{
public class UserTypes
{
protected const string PARA_USER_TYPE_ID = "@UserTypeID";
protected const string PARA_USER_TYPE = "@UserType"; protected const string SQL_INSERT_ITEM = "Insert into T_UserTypes(UserType) values(?)";
protected const string SQL_DELETE_ITEM = "Delete From T_UserTypes where UserTypeID=?";
protected const string SQL_UPDATE_ITEM = "Update T_UserTypes set UserType=? where UserTypeID=?";
protected const string SQL_SELECT_ALL_ITEM = "Select * from T_UserTypes";
protected const string SQL_SELECT_ITEM_BY_ITEMID = "Select * From T_UserTypes where UserTypeID=?";
}
public interface IUserTypes
{
bool AddUserTypes(MODEL.UserTypes model);
bool DeleteUserTypes(MODEL.UserTypes model);
bool UpdateUserTypes(MODEL.UserTypes model);
DataSet SelectAllItem();
DataSet SelectItemByItemID(int itemID);
}
public class COledbUserTypes : UserTypes, IUserTypes
{
#region IUserTypes 成员 public bool AddUserTypes(MODEL.UserTypes model)
{
StringBuilder str = new StringBuilder();
str.Append(SQL_INSERT_ITEM);
OleDbParameter[] paras = new OleDbParameter[]{
new OleDbParameter(PARA_USER_TYPE,OleDbType.VarWChar)
};
paras[0].Value = model.UserType;
if (DBUTILITY.OleDbDbHelper.ExecuteNonQuery(DBUTILITY.OleDbDbHelper.ConnectionString, str.ToString(), paras) > 0)
{
return true;
}
else
{
return false;
}
} public bool DeleteUserTypes(MODEL.UserTypes model)
{
StringBuilder str = new StringBuilder();
str.Append(SQL_DELETE_ITEM);
OleDbParameter[] paras = new OleDbParameter[]{
new OleDbParameter(PARA_USER_TYPE_ID,OleDbType.Integer)
};
paras[0].Value = model.UserTypeID;
if (DBUTILITY.OleDbDbHelper.ExecuteNonQuery(DBUTILITY.OleDbDbHelper.ConnectionString, str.ToString(), paras) > 0)
{
return true;
}
else
{
return false;
}
} public bool UpdateUserTypes(MODEL.UserTypes model)
{
StringBuilder str = new StringBuilder();
str.Append(SQL_UPDATE_ITEM);
OleDbParameter[] paras = new OleDbParameter[]{
new OleDbParameter(PARA_USER_TYPE,OleDbType.VarWChar),
new OleDbParameter(PARA_USER_TYPE_ID,OleDbType.Integer)
};
paras[0].Value = model.UserType;
paras[1].Value = model.UserTypeID;
if (DBUTILITY.OleDbDbHelper.ExecuteNonQuery(DBUTILITY.OleDbDbHelper.ConnectionString, str.ToString(), paras) > 0)
{
return true;
}
else
{
return false;
}
} public DataSet SelectAllItem()
{
StringBuilder str = new StringBuilder();
str.Append(SQL_SELECT_ALL_ITEM);
return DBUTILITY.OleDbDbHelper.ExecuteDataSet(DBUTILITY.OleDbDbHelper.ConnectionString, str.ToString(), null);
} public DataSet SelectItemByItemID(int itemID)
{
StringBuilder str = new StringBuilder();
str.Append(SQL_SELECT_ITEM_BY_ITEMID);
OleDbParameter[] paras = new OleDbParameter[]{
new OleDbParameter(PARA_USER_TYPE_ID,OleDbType.Integer)
};
paras[0].Value = itemID;
return DBUTILITY.OleDbDbHelper.ExecuteDataSet(DBUTILITY.OleDbDbHelper.ConnectionString, str.ToString(), paras);
} #endregion
}
public interface IUserTypesFactory
{
IUserTypes GetInstance();
}
public class COledbUserTypesFactory : IUserTypesFactory
{
#region IUserTypesFactory 成员 public IUserTypes GetInstance()
{
return new COledbUserTypes();
} #endregion
}}
//这是业务逻辑层的对应类,这里调用dal层,同样没有界面
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;namespace Site_BLL
{
public class UserTypes
{
protected static readonly DAL.IUserTypesFactory userTypesFactory = new DAL.COledbUserTypesFactory();
protected static readonly DAL.IUserTypes oledbUserTypes = userTypesFactory.GetInstance();
}
public interface IUserTypes
{
bool AddUserTypes(MODEL.UserTypes model);
bool DeleteUserTypes(MODEL.UserTypes model);
bool UpdateUserTypes(MODEL.UserTypes model);
DataSet SelectAllItem();
DataSet SelectItemByItemID(int itemID);
}
public class COledbUserTypes : UserTypes, IUserTypes
{
#region IUserTypes 成员 public bool AddUserTypes(MODEL.UserTypes model)
{
return oledbUserTypes.AddUserTypes(model);
} public bool DeleteUserTypes(MODEL.UserTypes model)
{
return oledbUserTypes.DeleteUserTypes(model);
} public bool UpdateUserTypes(MODEL.UserTypes model)
{
return oledbUserTypes.UpdateUserTypes(model);
} public System.Data.DataSet SelectAllItem()
{
return oledbUserTypes.SelectAllItem();
} public System.Data.DataSet SelectItemByItemID(int itemID)
{
return oledbUserTypes.SelectItemByItemID(itemID);
} #endregion
}
public interface IUserTypesFactory
{
IUserTypes GetInstance();
}
public class COledbUserTypesFactory : IUserTypesFactory
{
#region IUserTypesFactory 成员 public IUserTypes GetInstance()
{
return new COledbUserTypes();
} #endregion
}}
//这是Model中对应的类 ,dal bll ui层都会引用此类
using System;
using System.Collections.Generic;
using System.Text;namespace MODEL
{
public class UserTypes
{
private int userTypeID;
private string userType;
/// <summary>
/// 用户类型ID
/// </summary>
public int UserTypeID
{
get { return userTypeID; }
set { userTypeID = value; }
}
/// <summary>
/// 用户类型
/// </summary>
public string UserType
{
get { return userType; }
set { userType = value; }
}
}
}
//DBHelper类知道吧,就是常用的数据库方法,可以到网上搜搜//最后就是界面层了,通过这样的分层之后 在界面层只需要调用bll层的方法即可,如Site_BLL.User_Type.Add();当然了,这里除了分层之外使用了设计模式,抽象工厂模式,使用这个模式的目的就是防止更换数据库之后重新编写代码。有点复杂,建议lz先学习下三层架构。。
//dal中的dog类中的一个方法 //判断dog是否健康
public bool isHealth()
{
if(..)
return true;
else
return false;//如果有sql语句 应该写在这里
}//bll中一个类的一个方法
public dal.dog dalDog=new dal.dog();
public bool isHealth()
{
return dalDog.isHealth();
}
//最后就是界面层了
一个按钮的单击事件
private void ……()
{
bll.dog.isHealth();//这里调用的就是bll层的方法
}
所谓的层就是类库(dll),
你看看C语言,没有C#的关键字多,也没有那 么多的语法糖可以写出操作系统...............
所以不要被面向对象迷惑了,性能,实用是王道!!
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
满足客户需求>>运行稳定>>性能>>界面
这个是有道理 ,就是太笼统了 我也有如此烦恼!