3

リクエストを管理するためにLightSwitch2012アプリケーションを設計していますが、すべての画面で同じ再利用可能なコードを使用してリクエストの状態を更新できるようにしたいと考えています。たとえば、ユーザーはボタンで呼び出される承認画面やフルフィルメント画面などでリクエストの状態を変更できます。現在、メソッドを使用してリクエストを更新する必要がある各.csファイルにメソッドがありpartial void <ScreenCommand>_Execute()ます。これを変更して、コードをどこからでもではなく1つの場所から更新できるようにします。また、ボタンを追加する新しい画面にメソッドをコピーする必要もありません。DataWorkspace通常、これをApplication.csまたはグローバルアクセスのある他の場所に配置しますが、同じオブジェクトにアクセスすることはできません。また、画面からオブジェクトを渡しthis.DataWorkspaceます。これにより、SaveChanges()方法。しかし、これは少し臭いようです。これに対処するためのより良い方法、または複数の画面のボタンに割り当てられるようにしたい再利用可能なコマンドを配置するためのより良い場所はありますか?現在、ダーティデータの保存には細心の注意を払う必要がありますが、それでもすべてを手動で接続する必要があります。また、Application.csファイルにある場合、コードが適切なコンテキストで実行されるかどうかもわかりません。明確にするために、はい、私はこれをクライアント側で実行したいので、Outlookの受信トレイなどから電子メールをトリガーできます。

4

1 に答える 1

2

あなたがやろうとしているのは、単に良いプログラミングの練習であり、必要なコードを、それらの場所のそれぞれから呼び出すことができる場所に複数の場所に配置し、それでも1つの場所に維持することです。それはあなたがLightSwitchで物事をしなければならない方法に慣れるだけの問題です。

クライアントプロジェクトのUserCodeフォルダーのモジュール(またはC#の静的クラス)にコードを追加できます。これが、「ユーザーコード」を置く場所としてフォルダが存在する理由の一部です。これを行うには、ファイルビューに切り替え、 UserCodeフォルダーを右クリックしてモジュール/クラスを追加します。新しく作成したモジュール/クラスにメソッドを追加します。これらは好きなだけ作成できます(コードを分離したい場合)。または、同じモジュール/クラスに他のメソッドを追加することもできます。それはあなた次第です。

ただし、作成する再利用可能なメソッドにパラメーターとしてデータワークスペースを渡すことはしません。エンティティオブジェクトも渡さず、必要な状態を計算するために必要な値だけを渡します。ただし、データワークスペースのSaveChangesメソッドの実際の呼び出しは、画面のコードに残る必要があります。画面を「作業単位」と考えてください。

In each button's Execute method (in your various screens), you call your method with values from the entity being manipulated in the screen & return the result. Assign the calculated returned value to the entity's State property (if that's what you have), then call the screen's Save method (or use the screen's Close method, passing true for the SaveChanges parameter). There's no need to call the data workspace's SaveChanges method, & you're doing things the "LightSwitch way" by doing it this way.

Another benefit of doing it this way, is that your code can now be unit tested, as it's no longer dependent on any entity.

I hope that all makes sense to you.

于 2013-03-13T12:27:06.313 に答える