感谢大家我的代码审查! [英] Thanks to everyone my code review!

查看:68
本文介绍了感谢大家我的代码审查!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已完成编写可访问db的库,希望您浏览帮助并告诉我它对我而言是完成编辑的好地方.非常感谢.

I finished writing a library to access the db, I want you to see through the help and tell me it''s good or bad place for me to complete editing. thank you so much.

class _
    {
        private static DbConnection _connection;
        private static DbProviderFactory _provider;
        /// <summary>
        /// Thuc hien ket noi
        /// </summary>
        /// <param name="providerName">Provider name</param>
        /// <param name="connectionString">Connection string</param>
        public static void Connect(string providerName, string connectionString)
        {
            _provider = DbProviderFactories.GetFactory(providerName);
            _connection = _provider.CreateConnection();
            _connection.ConnectionString = connectionString;
            Close();
        }
        /// <summary>
        /// Mo ket noi
        /// </summary>
        private static void Open()
        {
            // kiem tra tinh trang ket noi
            if (_connection.State == ConnectionState.Closed)
                // mo ket noi
                _connection.Open();
        }
        /// <summary>
        /// Dong ket noi
        /// </summary>
        private static void Close()
        {
            if (_connection.State == ConnectionState.Open)
                _connection.Close();
        }
        /// <summary>
        /// Lay DataSet
        /// </summary>
        /// <param name="query">Query string</param>
        /// <returns>DataSet</returns>
        public static DataSet GetDataSet(string query)
        {
            try
            {
                // mo ket noi
                Open();
                // tao adapter
                DbDataAdapter adapter = GetAdapter(GetCommand(query));
                // fill dataset
                DataSet set = new DataSet();
                adapter.Fill(set);
                // dong ket noi
                Close();
                // return ket qua
                return set;
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Lay DataTable
        /// </summary>
        /// <param name="query">Query string</param>
        /// <returns>DataTable</returns>
        public static DataTable GetDataTable(string query)
        {
            try
            {
                // mo ket noi
                Open();
                // Tao adapter
                DbDataAdapter adapter = GetAdapter(GetCommand(query));
                // fill table
                DataTable table = new DataTable();
                adapter.Fill(table);
                // tra ra du lieu
                return table;
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Lay collection<T>
        /// </summary>
        /// <typeparam name="T">Object</typeparam>
        /// <typeparam name="TMapper">ObjectMapper</typeparam>
        /// <param name="query">query string</param>
        /// <returns>List<T></returns>
        public static List<T> GetListObject<T, TMapper>(string query)
            where T : class, new()
            where TMapper : Mapper<T>, new()
        {
            TMapper mapper = new TMapper();
            // mo ket noi
            Open();
            // tao command
            DbCommand command = GetCommand(query);
            // tra ra tap hop du lieu
            return mapper.MapAll(command.ExecuteReader(CommandBehavior.CloseConnection));
        }
        /// <summary>
        /// lay doi tuong
        /// </summary>
        /// <typeparam name="T">Class, new</typeparam>
        /// <typeparam name="TMapper">Mapper, new</typeparam>
        /// <param name="query">query string</param>
        /// <returns>Object</returns>
        public static T GetObject<T, TMapper>(string query)
            where T : class, new()
            where TMapper : Mapper<T>, new()
        {
            // tao mapper
            TMapper mapper = new TMapper();
            // mo ket noi
            Open();
            // tao command
            DbCommand command = GetCommand(query);
            // tra ra bo du lieu
            return mapper.MapFirst(command.ExecuteReader(CommandBehavior.CloseConnection));
        }
        /// <summary>
        /// thuc thi lenh
        /// </summary>
        /// <param name="query">query string</param>
        public static void Execute(string query)
        {
            try
            {
                // open
                Open();
                // tao command
                DbCommand command = GetCommand(query);
                // thuc thi lenh
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Close();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="queries"></param>
        public static void Execute(List<string> queries)
        {
            // open
            Open();
            // tao transaction
            DbTransaction transaction = _connection.BeginTransaction();
            // tao command
            DbCommand command = _provider.CreateCommand();
            // gan ket noi cho command
            command.Connection = _connection;
            // gan transaction cho command
            command.Transaction = transaction;
            try
            {
                // thuc thi danh sach lenh
                foreach (string query in queries)
                {
                    // set command text
                    command.CommandText = query;
                    // thuc thi lenh
                    command.ExecuteNonQuery();
                }
                // commit trasaction
                transaction.Commit();
                Console.WriteLine("Both records are written to database.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
                Console.WriteLine("  Message: {0}", ex.Message);
                // Attempt to roll back the transaction.
                try
                {
                    transaction.Rollback();
                }
                catch (Exception ex2)
                {
                    // This catch block will handle any errors that may have occurred
                    // on the server that would cause the rollback to fail, such as
                    // a closed connection.
                    Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                    Console.WriteLine("  Message: {0}", ex2.Message);
                }
            }
            finally
            {
                Close();
            }
        }
        /// <summary>
        /// Lay adapter
        /// </summary>
        /// <param name="command">DbCommand</param>
        /// <returns>DbDataAdapter</returns>
        private static DbDataAdapter GetAdapter(DbCommand command)
        {
            // tao adapter
            DbDataAdapter adapter = _provider.CreateDataAdapter();
            // select command cho adapter
            adapter.SelectCommand = command;
            // tra ra adapter
            return adapter;
        }
        /// <summary>
        /// Lay command
        /// </summary>
        /// <param name="query">string query</param>
        /// <returns>DbCommand</returns>
        private static DbCommand GetCommand(string query)
        {
            // tao command
            DbCommand command = _provider.CreateCommand();
            // set command text
            command.CommandText = query;
            // set connection cho command
            command.Connection = _connection;
            // tra ra command
            return command;
        }        
    }





/// <summary>
    /// mapper
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public abstract class Mapper<T> where T : class, new()
    {
        /// <summary>
        /// Ham nay phai override lai de xai
        /// trong truong hop xai List<T>
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        protected abstract T Map(IDataRecord record);
        /// <summary>
        /// Get all collection
        /// </summary>
        /// <param name="reader">IDataReader</param>
        /// <returns>List<T></returns>
        public List<T> MapAll(IDataReader reader)
        {
            // tao collection
            List<T> collection = new List<T>();
            // duyet reader
            while (reader.Read())
            {
                // add T vo collection
                collection.Add(Map(reader));
            }
            // tra ra doi tuong
            return collection;
        }
        /// <summary>
        /// Lay T
        /// </summary>
        /// <param name="reader">IDataReader</param>
        /// <returns>T</returns>
        public T MapFirst(IDataReader reader)
        {
            // doc reader
            if (reader.Read())
            {
                // tra ra doi tuong dau tien
                return Map(reader);
            }
            // tra ra null
            return null;
        }
    }

推荐答案

您没有遵守Microsoft的命名约定.使用FxCop, http://en.wikipedia.org/wiki/FxCop [
代码

You do not observe Microsoft naming conventions. Use FxCop, http://en.wikipedia.org/wiki/FxCop[^].

Comment code in English only.

Is the class name "_"?! Are you serious?

The code

try
{
   SomeCode();
}
catch (Exception)
{
   throw;
}



严格等于



is strictly equivalent to

SomeCode();



就是说-您不知道如何使用异常.搁置一切并学习,然后再进行下一步.
您可以在这里找到一些建议:
我如何制作滚动条到达底部时将停止的循环 [当我运行应用程序时,异常是捕获了如何处理? [

—SA



That said — you have no idea how to use exceptions. Set aside everything and learn it before you move any further.
You can find some advices here:
How do i make a loop that will stop when a scrollbar reaches the bottom[^],
When i run an application an exception is caught how to handle this?[^].

However, you need first learn how they work. For now, just remove all exception-related code from your library — will be much better. Exceptions are mostly processed by applications of a very top of stack, very little of exception catching is done in libraries. Don''t fall into "defensive" code, exception designed to make the code more "offensive".

—SA


这篇关于感谢大家我的代码审查!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆