之前写的一些程序,都是用最简单的语言来完成,现在看了公司里别人以前写的程序,做了比较,感觉自己写的太烂了,代码完全不是一个档次的,并不是说人家写的怎么怎么滴高深,但是看人家的代码,就感觉人家很专业,先说说一些区别:
1.我写的程序基本上没用到高深的东西,最多最多,只用到了委托,然后结构体,接口,这种东西,我都没用到,所以我的代码很简单,我也不知道属性封转,公司里写的程序基本上是结合自己的硬件使用的,都涉及到串口通信之类的。
总之我觉得,我用了C#,它是面向对象的,但是我根本没发挥它的长处,只是声明字段,写方法,方法调用方法,最开始的时候,更没水平,导致内存占用很多(在学校的时候,基本没想过太占内存了会怎样),运行速度很慢,后来还算有改观。
2.这几天看了同事之前写的项目,看的我傻眼了,感觉很高级,也不知道他这么写有什么有点,属性封装,结构体,范型都用上了,还有一些控件,后台运行的控件,总之,让我觉得很专业,程序写的很健壮。看看自己写的程序,感觉跟没学过C#的人一样,写的都是什么啊,虽然没有什么错,虽然只要不错就好了,但是我很想写的好一点,写的专业一点,提高自己的水平。上来问一下,作为一个实际应用的项目,怎样才算做的好,程序设计上,怎样才算最优!!而不只是能用,需要学些什么东西,有经历的都来说说吧。谢谢啦

解决方案 »

  1.   

    没有什么最好、最优,你写的代码只要不要有明显BUG,大家能够看得懂,后期维护(当然不一定是你自己)方便就很不错了。
    这里有一条建议:不要把SQL语句写在窗体(页面)的代码里,也就是说,不要把业务逻辑与界面混在一起,要不然会死人的。
      

  2.   

    个人的一点看法
    在公司看来你的代码如何写他都不在乎,在乎的只有结果。你把软件做完了,功能实现了,能够健壮的运行了这就ok了。
    但是对程序开发人员就不一样了。因为程序以后需要维护,如果一开始的代码就很头疼,那以后如何维护?那不得愁死啊。。
    我觉的首先整个程序要有一个总体的设计,根据需求进行类的划分,结构的设计,也就是你所说的继承、封装……,其实这是设计模式的范畴了。可以看一下gof 设计模式,head first 这里面就由浅入深的讲解了很多小的例子。
    这些其实就是面向对象的一些具体应用。说简单很简单,一个例子就可以入门。
    语言表述的不好……呵呵
      

  3.   

    一点点儿学,一点点儿改,一点点儿进步如果有话,就更贴对我说吧。我用《Csdn收音机》能听到哦!
      

  4.   

    最简单的就是分层,比如分成3层,数据访问层,业务逻辑层,界面层,
    比如在做一个数据库中插入数据的功能
    首先在数据访问层中定义方法//这是数据访问层中的一个类,这里有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先学习下三层架构。。
      

  5.   


    //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层的方法
    }
      

  6.   


    所谓的层就是类库(dll),
      

  7.   

    只要你写的代码性能好,好维护,没有Bug就相当不错了,
    你看看C语言,没有C#的关键字多,也没有那 么多的语法糖可以写出操作系统...............
    所以不要被面向对象迷惑了,性能,实用是王道!!
      

  8.   

    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
    满足客户需求>>运行稳定>>性能>>界面
      

  9.   

    满足客户需求>>运行稳定>>性能>>界面
    这个是有道理 ,就是太笼统了  我也有如此烦恼!