C#如何正确优化这一小段代码?

时间:2016-12-18 15:53:50

标签: c# mongodb code-cleanup

我已经写了一个小程序,我需要在MongoDB数据库中插入一些对象(我的情况下是员工)。每个员工都需要从带有字符串的预定义列表中获取随机名称。

这就是我想出的并且正在发挥作用:

class Program
{
    public class Employee
    {
        public string Name { get; set; }
    }

    static void Main(string[] args)
    {

        MongoClient client = new MongoClient();
        var server = client.GetServer();
        var db = server.GetDatabase("testdb");
        var collection = db.GetCollection<Employee>("testcollection");

        Random random = new Random();
        List<string> names = new List<string>() {"John","Matthew","Chris"};
        for (int i = 0; i < 5; i++)
        {
            int nameIndex      = random.Next(0, 3);  
            string nameValue   = names[nameIndex];  
            Employee employee = new Employee
            { 
                Name = nameValue
            };

           collection.Save(employee);
         }
     }

}

然而,这段代码感觉有点脏,我正在寻找一种很好的方法来清理它。特别是如果我想为员工对象添加更多属性。

编辑: @Eric Lippert 当然!首先,几乎所有事情都发生在main方法中。使用单个列表很好,但我想向员工对象添加更多数据。它在未来会变得很小。

所以,如果我想添加更多List,我必须复制我当前的代码。例如,我想迭代另一个包含作业类型(10个项目)的列表,另一个列表用于位置(50个项目)。对于我想要添加到Employee-object的每个属性,我必须从Random对象中编写一个Next()函数的新行。

编辑3:

public static IMongoDatabase Connect()
{
    MongoClient client = new MongoClient();
    var db = client.GetDatabase("testdb");
    return db;
}

static void Main(string[] args)
{
    Connect();
    var collection = db.GetCollection<Employee>("testcollection");
}

错误:名称&#39; db&#39;在当前的背景下不存在。

2 个答案:

答案 0 :(得分:0)

如果要从其他列表中应用更多随机值,可以执行以下操作,这主要归结为删除不必要的nameIndex和nameValue变量:

for (int i = 0; i < 5; i++)
{
    Employee employee = new Employee
    { 
        Name = names[random.Next(0, names.Count)]
    };

    collection.Save(employee);
}

答案 1 :(得分:0)

您可以将单独的部分抽象为新的类,例如DatabaseSeederDatabase,这只是清除职责而不是在main方法中全部使用

class Program
{
    public class Employee
    {
        public string Name { get; set; }
    }

    public class Database
    {
        public ICollection<Employee> GetCollection()
        {
             MongoClient client = new MongoClient();
            var server = client.GetServer();
            var db = server.GetDatabase("testdb");
            var collection = db.GetCollection<Employee>("testcollection");
        }
    }

    public class DatabaseSeeder
    {
        private ICollection<Employee> collection;

        public DatabaseSeeder(ICollection<Employee> collection)
        {
            this.collection = collection;
        }

        public void Seed()
        {
            Random random = new Random();
            List<string> names = new List<string>() {"John","Matthew","Chris"};
            for (int i = 0; i < 5; i++)
            {
                int nameIndex      = random.Next(0, 3);  
                string nameValue   = names[nameIndex];  
                Employee employee = new Employee
                { 
                    Name = nameValue
                };

               collection.Save(employee);
             }
        }

    }

    static void Main(string[] args)
    {
        var collection = new Database().GetCollection();

        var databaseSeeder = new DatabaseSeeder(collection);

        databaseSeeder.Seed();
    }

}