14

C# MVC アプリケーションには、データベースから取得するか、新規作成できるモデル、顧客があります。

新しい顧客を作成する場合、デフォルト値を設定する適切な方法は何ですか (CusotmerLevel のデフォルトを 1 にするなど)?

新しい従業員とデータベースから取得した従業員、またはその他の方法で異なるコンストラクターを使用する必要がありますか?

4

6 に答える 6

37

それがPOCOであると仮定すると、コンストラクターはデフォルト値を確立するのに適していることが常にわかりました。私は通常、その機会を利用して のようなものを宣言しCreatedDateます。データベースから取得されると、パブリック プロパティはデータベースの値によってオーバーライドされます。

public class Customer
{
    public Int32 Id { get; set; }
    public Int32 CustomerLevel { get; set; }
    /* other properties */

    public Customer()
    {
        this.CustomerLevel = 1;
    }
}

アップデート

また、C# 6.0 を使用している場合は、自動プロパティ初期化子を確認してください。

public class Customer
{
    public Int32 Id { get; set; } = 1;
    public Int32 CustomerLevel { get; set; }
    /* other properties */
}
于 2013-04-09T12:30:24.067 に答える
2

デフォルトのコンストラクターを使用します。私が試したすべてのORMは、コンストラクターの実行後に値を設定するため、干渉しないはずです。

1 つの代替方法は次のとおりです。

 var customer = new Customer() { CustomerLevel=1 };
于 2013-04-09T12:30:44.910 に答える
2

パターンを使用Factoryして、新しい顧客を作成できます。このようにして、ファクトリに正しいデフォルト値を設定する責任を与えることができます。

使用できない場合は、デフォルトのコンストラクターに設定します。

于 2013-04-09T12:30:57.813 に答える
2

コンストラクターでは問題ありません。前述のように、コンストラクターの引数としてデフォルト値を指定することもできます。

ただし、null 許容値を使用している場合は、これまでのところモデル ファーストのデータベース作業に非常に役立つことがわかりました。これも使用できます。

private int? workWeekInHours;

public int? WorkWeekInHours
{
    get { return workWeekInHours ?? 40; }
    set { workWeekInHours = value; }
}

データベース値が存在しない場合を除き、これは常にデータベース値を提供する必要があります。ただし、新しいオブジェクトがデータベースに永続化されると、それ以降はデータベースにデフォルト値が含まれている必要があります。

于 2014-06-11T22:58:21.130 に答える
1

新しいビューを作成するためのビューモデルが必要です

だからあなたはこのようにすることができます:

public ActionResult Create()
{
     return View(new CustomerInput{ CustomerLevel = 1});
}
于 2013-04-09T12:30:54.613 に答える