私は通常の "outパラメータが混乱していて、メソッドが複数のことを行っていることを示しています"という理由を探しています.WCFサービスの出力パラメータについて特に悪い点があります。私が今働いているところでは、WCFサービスでそれらに対してルールがあり、私はその理由を理解しようとしています!WCFサービスのメソッドで出力パラメータを使用することは悪い習慣ですか?
答えて
個人的には、特定の場所(TryParse()というメソッドなど)でパラメータを使用します。だから、私はあなたが特定の限られた場所でしかそれを使用しないことについてあなたが話した偏見の一部を持っています。さらに、.Netアプリケーションがこれをもう一方の側で消費すると仮定することはできません。 WCFは(他の通信タイプの中でも)SOAPまたはREST Webサービスとしてインターフェイス消耗品を提供するため、WCFがnon.Netコンシューマとの互換性のためにパラメータをサポートすることを保証できません。
さらに、WCFサービスはコンシューマーにAPIを提供しており、APIは、サーバーメソッドがどのようにコード化されたかに関する限られた知識で消費すべきインターフェイスを提供する必要があります。 (WCFサーバーを書いている人が相手を書いている人と同じであるとは思わないでください)。 API上でoutパラメーターを使用しようとすると、コードの匂いのように思えます。恐らく、消費者に別の値を返すためにoutパラメータを使用するでしょう。メッセージオブジェクトを代わりに使用することを検討してください。メッセージオブジェクトは、具体的には、WCFサーバーからコンシューマに送信する必要があるすべてのデータで構成されます。あなたはそれが成功した場合、ユーザーの作成が正常に発生を示すブール値とユーザーを含むユーザーオブジェクトを返すつもり
bool TryCreateUser(string name, string email, out User user){}
:たとえば、あなたがTryCreateUserと呼ばれるWCFサーバで公開されたメソッドを持っているとしましょう。バック消費者にこのメッセージオブジェクト
class UserCreationMessage {
bool IsSuccessful;
User user;
}
戻り、そしてあなたはまだ、複数の戻り値を取得することができます。私は、新しいクラス、UserCreationMessageを作成します。ただし、APIのエンドユーザーにとってよりわかりやすい一貫したオブジェクトが返されるようになりました。
最後に、私は、このサービスのコンシューマを作成するプログラマが簡単にAPIを見て消費できなければならないため、WCFサーバーなどのAPIにoutパラメータを持つことは悪い習慣であると考えていますそれは外のパラムが存在するというフープを飛び越えずに。このためのより良い設計が存在するので、それを使用してください。 APIは、特にエンドコンシューマに公開されたインタフェースで、より高いコーディング標準を必要とします。
サービス参照を追加するときに生成されるプロキシクラスによってパラメータが処理される理由の1つは余分なオーバーヘッドです。
this postによれば、元のout
が消費されても最後になっても最初に紛らわしくなり、誰かがこれを理解するまでに時間がかかるかもしれない複雑なエラーにつながる可能性があります。
個人的意見:WCF操作(メソッド)は何かをして何かを返す必要があります。それはたくさんのことをするかもしれませんが、その結果である1つのものだけを返します。余計なものが必要な場合は、複雑なタイプを必要とするものすべてをそのタイプのデータフィールドとして返します。
- 1. BackPressedを呼び出すことは悪い習慣ですか?
- 2. これは悪い習慣ですか?
- 3. ステートフルヘルパークラスを使用するのは悪い習慣ですか?
- 4. 拡張メソッドと拡張プロパティは悪い習慣ですか?
- 5. 多くの「initWith」パラメータを使用することは一般に悪い習慣ですか?
- 6. 論理を表示することは悪い習慣です
- 7. は@unlink悪い習慣ですか?
- 8. Java標準キーストアを使用することは悪い習慣です
- 9. メソッドの静的なローカル変数は悪い習慣ですか?
- 10. AppDelegateをシングルトンとして使用するのは悪い習慣ですか?
- 11. Javaで `this`を使うのは悪い習慣ですか?
- 12. C#拡張メソッドでイベントを購読するのは悪い習慣ですか?
- 13. Java Swing ElementsでHTMLスタイルを使用するのは悪い習慣ですか?
- 14. HTMLでインラインイベントハンドラを使用するのは悪い習慣ですか?
- 15. jQuery関数内でJavascriptを使用するのは悪い習慣ですか?
- 16. コンストラクタでセッターメソッドを使用する:悪い習慣?
- 17. 複数の返品をすることは悪い習慣ですか?
- 18. 任意のSQLテーブルを作成することは悪い習慣ですか?
- 19. PHPUnit:1回のテストで模擬メソッドで複数のアサーションを使用するのは悪い習慣ですか?
- 20. これは悪い習慣ですか? C++
- 21. golangのエラーをリセットするのは悪い習慣ですか?
- 22. eslintrcファイルをグローバルにインストールすることは悪い習慣ですか?
- 23. 1つのアンドロイドアプリで複数のバックグラウンドサービスを使用することは悪い習慣ですか?
- 24. GETパラメータ(URL内)を値なしで使用するのは悪い習慣ですか?
- 25. コントローラの外部でHttpContextを使用する - 悪い習慣ですか?
- 26. 関数式を別の関数の引数として使用することは悪い習慣ですか?
- 27. Javascript - 関数の配列はこの悪い習慣です
- 28. パンくずリストとサブカテゴリを類似のコンテンツに使用することは悪い習慣ですか?
- 29. 仮想メソッドを持たないベースクラスの継承は悪い習慣ですか?
- 30. .exeファイルをNugetパッケージに含めることは悪い習慣ですか?
+1はメッセージオブジェクトに言及します。 – slugster