「特定の方法で使用しなければならない」クラスを書いています(すべてのクラスが...する必要があると思います)。
たとえば、fooManager
クラスを作成します。これには、などへの呼び出しが必要Initialize(string,string)
です。そして、例をさらに進めるために、そのThisHappened
アクションをリッスンしなければクラスは役に立たないでしょう。
私のポイントは、書いているクラスにはメソッド呼び出しが必要だということです。しかし、これらのメソッドを呼び出さなければ、コンパイルは正常に終了し、空の新しいFooManagerが作成されます。ある時点で、クラスとその動作に応じて、機能しないか、クラッシュする可能性があります。私のクラスを実装するプログラマーは明らかに内部を見て、「ああ、Initializeを呼び出さなかった!」と気付くでしょう。
しかし、私はそれが好きではありません。私が理想的に望んでいるのは、メソッドが呼び出されなかった場合にコンパイルしないコードです。それは単に不可能だと思います。または、すぐに表示され、明確になるもの。
私がここで持っている現在のアプローチに悩まされているのは次のとおりです。
クラスにプライベートブール値を追加し、クラスが初期化されている場合は必要なすべての場所を確認します。そうでない場合は、「クラスが初期化されていません.Initialize(string,string)
。本当に呼び出していますか?」という例外をスローします。
私はそのアプローチで少し大丈夫ですが、多くのコードがコンパイルされ、最終的にはエンドユーザーには不要になります。
また、Initiliaze
呼び出すだけのメソッドよりも多くのメソッドがあると、コードがさらに増えることがあります。パブリックメソッド/アクションが多すぎないようにクラスを維持しようとしていますが、それは問題を解決するものではなく、単に合理的なものにするだけです。
私がここで探しているのは:
- 私のアプローチは正しいですか?
- より良いものはありますか?
- 皆さんは何をしますか/アドバイスしますか?
- 非問題を解決しようとしていますか?同僚から、使用する前にクラスをチェックするのはプログラマーだと言われました。私は敬意を持って同意しませんが、それは別の問題です。
簡単に言えば、そのクラスが後で、または他の人によって再利用されたときに、呼び出しを実装することを決して忘れない方法を見つけようとしています。
明確化:
ここで多くの質問を明確にするために:
私は間違いなくクラスの初期化の部分について話しているだけでなく、それは一生です。同僚がメソッドを2回呼び出さないようにし、Yの前にXを呼び出すようにします。Assertsのアイデアは本当に気に入りましたが、Assertsが常に可能であるとは限らないので、他のアイデアを混ぜる必要があると確信しています。
私はC#言語を使用しています!どうして私はそれを言及しなかったのですか?!私はXamarin環境にいて、PCL、iOS、Android、およびWindowsプロジェクトを含むソリューションで通常6〜9個のプロジェクトを使用してモバイルアプリを構築しています。私は約1年半(学校と仕事を合わせて)開発者でした。そのため、時々ばかげた声明や質問があります。ここではおそらくすべては無関係ですが、情報が多すぎることは必ずしも悪いことではありません。
プラットフォームの制限と依存関係注入の使用のため、コンストラクターに必須のすべてを常に配置できるわけではありません。Interfaces以外のパラメーターはテーブル外にあります。または、私の知識が十分でない可能性があります。ほとんどの場合、初期化の問題ではありませんが、
彼がそのイベントに登録したことを確認するにはどうすればよいですか?
彼が「ある時点でプロセスを停止する」ことを忘れなかったことをどのように確認できますか
ここで、私は広告取得クラスを覚えています。広告が表示されるビューが表示されている限り、クラスは毎分新しい広告を取得します。そのクラスは、Adを表示できる場所に構築するときにビューを必要とします。これは明らかにパラメーターに入れることができます。ただし、ビューが消えたら、StopFetching()を呼び出す必要があります。そうしないと、クラスは、そこにさえないビューの広告を取得し続けますが、それは悪いことです。
また、このクラスには、たとえば「AdClicked」など、リッスンする必要があるイベントがあります。聞いていない場合はすべて正常に動作しますが、タップが登録されていない場合、そこでの分析の追跡が失われます。ただし、広告は引き続き機能するため、ユーザーと開発者には違いが見られず、アナリティクスのデータは間違っています。それは避ける必要がありますが、開発者がtaoイベントに登録する必要があることを開発者がどのように知ることができるかわかりません。しかし、これは単純化された例ですが、アイデアは「彼が利用可能な公開アクションを使用することを確認する」ことであり、当然のことです!
initialize
オブジェクトの作成後、呼び出しを遅くする必要がありますか?例外をスローして作成チェーンを破ることができるという意味で、俳優は「危険」すぎるのでしょうか?
new
ならないようにしてください。そうすれば、オブジェクトを使用する準備ができていない場合、呼び出しをすり抜けることはありません。初期化メソッドに頼ることは、あなたを悩ませるために戻ってくることになっています。絶対に必要でない限り、避けるべきです、少なくともそれは私の経験です。