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 のコンストラクターで BaseModel に指定されたデータベース テーブルに保存できるように、UserModel のプロパティにアクセスする方法を一生理解できません。

これが理にかなっていることを願っています。:)

このコードは私の作業コードではありません。これは私が達成したいことの非常に単純な表現であるため、フィールドとプロパティ (バリデーターなど) は読みやすくするために簡略化されています。

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;
    }
}

これは概念を説明するためのものです。より多くの情報を提供すると、実際の回答を提供しやすくなります。

DB にどのようにデータを保存しますか? テーブルの構造はどうなっていますか?

于 2012-12-18T14:42:47.983 に答える
0

これは一般に、基本レベルで抽象関数を利用し、派生クラスの仕様でそれらをオーバーライドすることで解決されます。したがって、ベースに呼び出しツリーを設定しますが、派生クラスの詳細を知る必要がある関数は派生クラスに実装されます。

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

    public BaseModel()
    {         
    }

    public abstract void Save();
}

この場合、基本クラスで明示された具体的なデータ表現が 1 つある場合は、ビジネス クラスが利用する DTO オブジェクトを作成する方がよい場合があります。これは、エンティティのようなほとんどのフレームワークのアプローチです。

于 2012-12-18T14:42:06.693 に答える