课堂设计问题

时间:2010-05-10 20:16:34

标签: c# oop class

这是一个超级新手问题,我已经编程了一段时间,但我只是在学习OOP。 我有一个通过C#控制台处理用户输入的类 此类中有不同的方法来收集不同的输入集。

我有另一个类,它接受这些输入集并将它们放在数据库中 将输入从输入类传递到数据库插入类的最佳方法是什么?

我的猜测是:

Array1[] = inputClass.GetParameterSet1();
DatabaseInsertClass.InsertIntoDatabase1(Array1[]);

这有什么问题或有更好的方法吗?我是否应该有两个类(数据库类也可以接受用户输入)?

4 个答案:

答案 0 :(得分:2)

您应该有一个“数据”类,它代表您的所有参数。

您的GetParameters类应该创建此类的实例。

您的InsertDatabase类应该接受此类的实例。

public class Data 
{
    public string value1 {get;set;}
    // add more properties here
}

public class GetInputParameters
{
    public Data GetParameters()
    {
        var d = new Data();
        d.value1 = Console.ReadLine();
        return d;
    }
}


public class InsertToDatabase
{
    public void InsertRecord(Data value)
    {
        // database persistance code
    }
}

此外,您可以使用通用列表传递数据类的多个实例,您可以使用数组,但通用列表更容易使用。

答案 1 :(得分:1)

总的来说,我认为将代码分成不同的层是一个好主意。现在你有了你的UI层(用于控制台输入的层)和你的数据层(插入数据的层)。这是一个好的开始。

您收集哪种数据然后插入?这可能是另一个班级的好候选人。假设它是用户信息,用户输入他们的姓名,年龄,性别等。无论你收集什么,它都可以打包成一个对象。然后,您可以将此对象传递给Data类。然后,数据类可以根据需要消化该信息。

在您的输入课程中:

User user = new User();
//get all user info from console, assigning it to your user object
DatabaseInsertClass.InsertIntoDatabase1(user);

答案 2 :(得分:0)

类型安全是我看到的第一个问题。更好的方法是使用LINQ to SQL包装数据库,然后简单地将业务对象传递给抽象的Save()和Delete()方法。这样,理论上可以替换实际的数据库实现,但无论如何,您的业务对象肯定会有价值。

答案 3 :(得分:0)

至少两个课程绝对是个好主意。您想尝试在类中封装功能。在标准的控制台应用程序中,我建议为控制台I / O创建一个类,一个用于数据库访问的类,以及一个允许它们相互通信并可能操纵数据(即服务类)的类。

因此,您的控制台I / O类可以等待数据,然后调用您的服务类来保存数据,然后您的服务将调用您的数据库来保存数据。