2011-07-29 11 views
2

私のWebアプリケーションには、ユーザーが連絡先情報を更新できるページがあります。私は次のクラスを持って、この情報を取得したり、保存するためにふり:ポストバック時のビジネスオブジェクトの永続性

public class User 
{ 
    DataAccesClass dataAccesClass = new DataAccesClass() 
    public string UserName {get;set;} 
    public string Address {get;set;} 
    public string EmailAddress {get;set;} 

    public User(){} 

    public static User GetUser(int userID) 
    { 
     User user = dataAccesClass.GetUser(userID); // 
     return user; 
    } 

    public void Save() 
    { 
     dataAccesClass.SaveUser(this); 
    } 
} 

は私のPage_Loadイベントで、私は(!に包まれIsPostBackプロパティ)私のUserクラスの新しいインスタンスを作成することを言います。私はそれを公開プロパティを使用して、Webアプリケーションの上記のページにテキストフィールドを挿入します。問題は...ページがポストバックされたとき、このクラスを再構築して更新情報を保存する正しい方法は何ですか?クラスはPage_Load!isPostBackイベントで作成されたため、使用できません。これを処理する正しい方法は何ですか?私はセッションにそれを保存する必要がありますか? ViewState?私は単にそれをすべてのポストを再構築するべきですか?この例のUserクラスは小さいので、正しい方法に影響するかもしれませんが、もっと大きく複雑なクラスに対しても同じアプローチを取ることができるようにしたいと考えています。また、このクラスは受け入れ可能なビジネスオブジェクトと見なされますか?

答えて

2

このクラスを再構築して更新情報を保存する正しい方法は何ですか?

私は、すべてのポストバックでクラスを再構築しないのがベストプラクティスと言います。最初のリクエストでデータを構築し、コントロールの値を設定し、それらのコントロールのビューステートにデータを保持させる必要があります。

データを更新する必要がある場合は、実際に更新する必要があることを示すイベントにオブジェクトを再生成します。

セッションに保存する必要がありますか? ViewState?私は単にそれをすべてのポストを再構築するべきですか?

セッションに値を格納するのか、データ層からデータを復元するのかを選択するには、オブジェクトのメモリフットプリント、アプリケーションのスケーラビリティ要件、データベース操作のコスト、尤度特定の要求に対してオブジェクトにアクセスする必要があることを示します。だから私はそれが非常に状況が良いと信じています。

また、このクラスを受け入れ可能なビジネスオブジェクトと見なしますか?

私はBLLの経験はあまりありませんが、正しい軌道に乗っているようです。

2

プロファイリングがそうでないことを示していない限り、要求ごとにオブジェクトを再構築するだけで大​​丈夫です。また、データアクセスコードにある種のキャッシュを実装することもできます。あなたのクラスは受け入れ可能なビジネスオブジェクトです。

+0

これは一般的には正しいと思われますが、ポストバックには必ずしも必要ではありません。キャッシングを提案するための+1。 – pseudocoder

1

Userオブジェクトには、ViewStateで公開したくない情報が含まれている可能性があるため、Sessionに格納することができます。

これはASP.NETでこれを行うための「標準的な」方法です。

0

例の場合、オブジェクトの再構成は小さくても問題ありません。しかし、あなたが必然的にしばらくの間保管する小さなオブジェクトがあれば、セッションを使用します。オブジェクトが大きい場合は、データベース接続を使用してデータベースまたはセッションを直接使用します。

0

knockout.jsというJavaScriptフレームワークをどの程度複雑にするかに応じて、適切な設定ができます。オブジェクトに応じてHTMLを構築するjQueryテンプレートにバインドするjsonオブジェクトを作成し、複雑なオブジェクトを非常にうまく処理できます。