public AreaModel(Int64 AreaId)
{
CurrentAreaId = AreaId;
CurrentSet = true;
var c = Client;
}
private ManagementServiceClient Client
{
get
{
if (_client == null || _client.State == (CommunicationState.Closed | CommunicationState.Faulted))
{
_client = new ManagementServiceClient();
_client.Open();
}
var c = Areas;
return _client;
}
}
public Management_Area[] Areas
{
get
{
return Client.GetAreaHeaders();
}
}
このコードは、MVC ビューに渡されるカスタム モデルの効果です。
私たちの会社には、(私たちにとって)奇妙なコードをたくさん書いた開発者がいて、突然退職しました。彼のコードの多くは非常に特殊な方法で書かれているため、彼が実際に自分のしていることを知っていたのか、それともまったく知らなかったのかを知ることは困難です。
私がこの質問をしている理由は、彼がここで何をしていたかを見たからですが、それが機能するかどうか、または実際に何を意味するのかはわかりません.
最初の質問は次のとおりです。AreaModel のコンストラクターが呼び出されると、Client.GetAreaHeaders() が呼び出されますか? 理由はわかりますが、実際にそうであると完全に確信しているわけではありません. サービス側の GetAreaHeaders 内にブレークポイントを配置しました。これは、呼び出された場合にトリガーされるはずだったので、「いいえ、呼び出されません」と言う方向に傾いています...しかし、ブレークポイントが実際に正しくあったかどうかはわかりません完了または「ヒット」(IISでこのサービスをセットアップしたばかりで、以前はデバッグする理由がありませんでした)、より詳しい人から「呼び出されるべきだったのですか?」と知りたかったのです。なぜ、またはそうでないのか。このコードから、それを書いた人は、それが呼び出されることを確実に予期していたことがわかるからです。
彼はサービス呼び出しの結果のある種のキャッシュを実装するというアイデアについて考えていたように見えますが、実際にそれを有用な場所に保存することはできませんでした (なぜなら、彼がそれを読み取ろうとすると、GetAreaHeaders() ではないからです)。もう一度呼び出されるだけですか?)。それで、誰かがよく知っている場合の私の2番目の質問は、完全に機能している場合、このようなものをキャッシュすることは理にかなっていますか? ページが読み込まれるたびにモデルが再作成される場合、ビュー/コントローラーで一度アクセスしてスコープ内の変数に保存するのではなく、モデルの作成時に「領域」を事前に入力したほうがよいのはなぜですかページの?私には、同じくらいの時間がかかるように思えます。
この質問がよく説明され、理にかなっていることを願っています。質問を編集して、すべての人にとってより有益になる方法があれば教えてください。