1

我正在尝试创建一个与数据库交互的应用程序。

我使用多种语言进行编程,我喜欢在基于 MVC 的应用程序中使用模型是多么容易。

所以我的问题是,试图复制这个功能,我有 2 个类如下:

基类:

public class BaseModel
{
    protected string TableName { get; set; }

    public BaseModel()
    {         
    }

    public void Save()
    {
        // Save data in derived class to table stored in TableName
    }
}

派生类:

public class UserModel : BaseModel
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }

    public UserModel()
    {
        base.TableName = "user";
    }
}

从我的主应用程序中,我希望能够执行以下操作:

public class Class1
{
    public Class1()
    {
        UserModel model = new UserModel();
        model.Field1 = "Value1";
        model.Field2 = "Value2";
        model.Save();
    }
}

这是我遇到问题的地方。我一生都无法弄清楚,我将如何访问 UserModel 中的属性,以便将它们保存到在 UserModel 到 BaseModel 的构造函数中指定的数据库表中。

希望这是有道理的。:)

这段代码不是我的工作代码,它是我想要实现的一个非常简单的表示,因此字段和属性(验证器等)已被简化为便于阅读。

4

2 回答 2

1

我认为一个更“真实”的例子实际上有助于更好地理解,但我认为你应该在基类中创建一个虚拟(甚至抽象)方法来获取数据以保存在数据库中:

public class BaseModel {

    protected virtual string GetDataToSaveInDB() {
        // if it makes sense to have the data as a string...
    }

    public void Save() {
        string data = GetDataToSaveInDB();
        // do something with data...
    }
}

然后返回派生类中的数据:

public class UserModel : BaseModel {
    protected override string GetDataToSaveInDB() {
        return "Field1=" + Field1 + ";Field2=" + Field2;
    }
}

这只是为了说明这个概念,如果您提供更多信息,将更容易提供真实的答案。

您如何将数据保存在数据库中?表的结构如何?

于 2012-12-18T14:42:47.983 回答
0

这通常通过在基层利用抽象函数然后用派生类中的细节覆盖它们来解决。所以会在基类中建立一个调用树,但是需要知道派生类细节的函数将在派生类中实现。

public class BaseModel
{
    protected string TableName { get; set; }

    public BaseModel()
    {         
    }

    public abstract void Save();
}

在这种情况下,如果您在基类中显示了一个具体的数据表示,那么创建一个 DTO 对象可能会更好,您的业务类可以使用该对象。这是大多数框架(如实体)的方法。

于 2012-12-18T14:42:06.693 回答