ASP.NET(2.0以降)UI/プレゼンテーション層を介してビジネス/ドメインオブジェクトを操作するために何が機能するか/機能しないかについての考えを集めようとしているだけです。特に、ASP.NETコードがビジネスレイヤーと直接通信する従来のASP.NETLOBアプリケーションの状況では。私はこのタイプの設計に頻繁に出くわし、理想的なソリューション(つまり、特定のパターンを実装する)と、「パターン」が実装されていない場合に完全な書き直しを必要としない最良の実用的なソリューションは何か疑問に思います。
これがサンプルシナリオです。
特定のビジネス/ドメインオブジェクトの「編集/新規」ページである単一のASP.NETページ。例として、「Person」を使用してみましょう。このページから名前と住所の情報を編集したいと思います。ユーザーが編集またはデータの入力を行っているときに、フォームが自分自身を更新するためにポストバックする必要がある場合があります。たとえば、住所を編集するときは、「国」を選択します。その後、州/地域のドロップダウンが有効になり、選択した国の関連情報で更新されます。これは本質的にビジネスロジック(依存するフィールドに基づいて使用可能な選択を制限する)であり、このロジックはビジネスレイヤーによって処理されます(これは単なる一例であることに注意してください。
理想的には、このロジックはビジネス/ドメインオブジェクトにのみ格納されます(つまり、ASP.NETコードでロジックが複製されていません)。これを実現するには、ビジネス/ドメインオブジェクトを再初期化し、各ポストバックの現在のUI値に基づいて状態を設定する必要があると思います。
例えば:
private Person person = null;
protected void Page_Load()
{
person = PersonRepository.Load(Request.QueryString["id"]);
if (Page.IsPostBack)
SetPersonStateFromUI(person);
else
SetUIStateFromPerson(person);
}
protected void CountryDropDownList_OnChange()
{
this.StateRegionDropDownList.Enabled = true;
this.StateRegionDropDownList.Items.Clear();
this.StateRegionDropDownList.DataSource = person.AvailableStateRegions;
this.StateRegionDropDownList.DataBind();
}
私が見た他のオプションは、ページがバックアップされるたびにリポジトリ(別名データベース)からビジネスオブジェクトをロードするのではなく、SessionStateに保存することです。
考え?