ASP.NET ページのプロパティ 良いアイデアまたは悪いアイデア

StackOverflow https://stackoverflow.com/questions/607046

  •  03-07-2019
  •  | 
  •  

質問

私は、ASP.NET ページにプロパティを追加することを避ける傾向がありました。私にとってそれは決して素晴らしいアイデアとは思えませんでした。しかし、最近、いくつかのサンプル アプリケーションでこの手法が採用されているのを目にしました。ページにカスタム プロパティを追加することに対する私の嫌悪感は正当化されていないのでしょうか、それともこれは「場合による」状況なのでしょうか?

役に立ちましたか?

解決

プロパティについて覚えておく必要があるのは、プロパティはページのライフサイクル全体にわたって存続するということです。これにより、これらは非常に便利 (ライフサイクルの早い段階でプロパティを設定しても、後になっても有効である) と危険 (設定される前にプロパティに簡単にアクセスしたり、別のライフサイクル フェーズによってプロパティが変更されたことに気づかなかったりする) の両方になります。

私がこれまで見てきたプロパティの使用が大きな効果をもたらしているのは、クエリ文字列とセッションをラップするタイプセーフな方法としてです。予想されるクエリ文字列またはセッション値のそれぞれにプロパティを定義すると、将来の開発者にとって、何が予想され、何が利用可能であるかが非常に明確になります。

もう 1 つの一般的な使用法は、ViewState 項目をラップすることです。ほとんどのサンプルは ViewState がオンになっていると想定する傾向があるため、サンプルではこれが表示されると思います。

他のヒント

サーバーサイドページのコードをクリーンアップするためにプロパティを使用しても問題はありません。セッションステートまたはビューステート情報にアクセスするためにプロパティを使用するのが好きです。このように、データへのアクセス方法を変更すると、1箇所しか変更されません。

Asp.netは、コンストラクターベースのインジェクションをサポートしていません。これは、asp.netプロパティを使用する明確なシナリオです(プロパティベースのインジェクションを使用できるため)。

更新1:これは同様のシナリオですが、コントロールの場合-方法ASP.NET Webフォームで依存性注入を使用する方法

更新2:ビューステートまたはクエリ文字列をラップするためにそれらを使用しても問題ありません。ただし、コードビハインドを悪用したくないため、慎重に検討します。分離コードのラッピングプロパティの1つを何度も使用している場合、分離コードのコードが多すぎる可能性があります。このように見ると、これらのプロパティに関連付けられる可能性のあるキャスト/解析の繰り返しを回避するという副作用があります。

ページのプロパティに問題はありません。外部コードによってページがオブジェクトとして操作されることはめったにないので、奇妙に見えるかもしれません。そのため、ページ上のほとんどのプロパティはプライベートとしてマークできます。すべてのものと同様に、例外があります。

ページのプロパティの最大の用途の1つは、ViewState値をラップするときです:

protected string TaskName
{
    get { return (string)ViewState["TaskName"] ?? string.Empty; }
    set { ViewState["TaskName"] = value; }
}

この場合、プロパティを「保護」としてマークしました。マークアップからアクセスできます。

なぜ悪いのでしょうか?プロパティは実際には単なるメソッドであり、常にページにメソッドを追加するはずです。

asp.netページのプロパティを使用して、Session、Viewstate、およびquerystringにアクセスします。コードの記述が少なくなり、読みやすくなります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top