1

SQL サーバーからオブジェクトをロードするのに苦労しています (パフォーマンス上の理由から orm フレームワークを敬遠しています)

私が考えたのは、サーバーからレコードを取得し、適切なタイプのオブジェクトを作成するファクトリ クラスを用意することでした。

すべてのオブジェクトは抽象クラス aDefinition から継承されます。aDefintion から派生する具象オブジェクトはどちらもいくつかの類似したプロパティを共有していますが、基底クラスの上に独自の固有のプロパティもあります。

私はプログラミングにかなり慣れていないので、正しい軌道に乗っているかどうかを感じたかっただけです.

いくつか質問があります:

  • この場合、抽象クラスを使用する意味はありますか?

  • 定義のコレクションを DefinitionCreator クラスに として保存しList<aDefinition>、オブジェクトにアクセスするためのメソッドを提供するのは良い考えですか、それともオブジェクト タイプごとに異なる具体的なコレクションを作成する方が良い考えでしょうか?

public class DefinitionTemplate
{
    public int DefinitionId { get; set; }
    public string Name { get; set; }
    public DefintionType DefinitionType { get; set; }
    public string Definition { get; set; }
    public string Parameters { get; set; }

    public DefinitionTemplate()
    {
    }
}

//abstract base class that my concrete classes will inherit from.
public abstract class aDefinition
{
    public int DefinitionId { get; protected set; }
    public string Name { get; protected set; }
    public DefintionType DefinitionType { get; protected set; }

    //abstract methods
    public abstract bool LoadDefinition(DefinitionTemplate template);
    public abstract bool SaveDefinition();
}

//concrete class representing a report-type definition.
public class ReportDefinition : aDefinition
{
    public string Definition { get; private set; }
    public string Parameters { get; private set; }

    public override bool LoadDefinition(DefinitionTemplate template)
    {
        this.DefinitionId = template.DefinitionId;
        this.Name = template.Name;
        this.DefinitionType = template.DefinitionType;
        this.Definition = template.Definition;
        this.Parameters = template.Parameters;
        return true;
    }

    public override bool SaveDefinition()
    {
        throw new NotImplementedException();
    }
}

//concrete class representing a configuration-type definition.
public class ConfigDefinition : aDefinition
{
    public string Parameters { get; private set; }

    public override bool LoadDefinition(DefinitionTemplate template)
    {
        this.DefinitionId = template.DefinitionId;
        this.Name = template.Name;
        this.DefinitionType = template.DefinitionType;
        this.Parameters = template.Parameters;
        return true;
    }

    public override bool SaveDefinition()
    {
        throw new NotImplementedException();
    }
}

//creator class that retreives the definitions from the server and creates the approprite object
public static class DefinitionCreator
{
    public void RetreiveDefinitions()
    {
        //sql statment to retreive definitions
        using(SqlCommand cmd = new SqlCommand("select * from definitions", new SqlConnection()))
        {
            using(SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    switch (reader["DefinitionType"].ToString())
                    {
                        case "ReportDefinition":
                            //create a report definition object
                            break;
                        case "ConfigDefinition":
                            //create a config definition object
                            break;
                    }
                }
            }
        } 
    }
}
4

0 に答える 0