回答:
多くの思いやりが特定の問題から生じるため、私はユニークな解決策があるとは思わない。
モデルビューコントローラーパターンを使用できます。これにより、問題が「コントローラーに動作を実装する方法」、つまり常にルールに従う動作に問題が移動します。
非常に単純な規則について話さない限り、それらを整理する方法は表現力の問題を提起します。あなたは常に単純であり(構造化されている)、表現力がある(楽しいルールを書く)という相反する要求に直面しています。
MVCを使用すると、モデルが状態、つまりルールが適用されるコンテキストを形式化するため、ジョブが簡素化されます。
そうは言っても、より単純な切り替え可能な動作に関して複雑な動作を構成するために、戦略パターンおよび/または状態パターンを使用してコントローラーを実装すると便利な場合があります。チェーン・オブ・resposibilityパターンは、その「状態」は、部分的に「状態」のモデルの意味と重なるため、ステートマシンは慎重に使用する必要がありながら、ルールを表現するためにあなたを助けることができます。
コントローラー内でコマンドパターンを使用すると、コントローラーの応答性が低下し(コマンドがモデルの処理方法を知っている)、コントローラーに元に戻す/やり直し機能を簡単に追加できるようになります。
とにかく、デザインパターンをガイドラインとして使用してみてください。ホイール、特にスクエアホイールの再発明を避けるのに役立ちますが、すべての問題の解決策が(丸い)ホイールの束で構成されているわけではありません。
これまで何度も仕事をしていない限り、常にスパゲッティコードになります。実際、この時点で、あなたはまだ始まったばかりです。あなたが持っているのは、予備的な仕様の大まかなドラフトです。ここで他のアドバイスのいくつかをチェックし、いくつかの深刻な書き換えを行ってください。そして、さらにいくつかの書き換え、そして....個人的に、私は自分のコードを本当に素晴らしい形にするのか、それとも書き換えにうんざりするのかわからないが、最終的には正しくなるようだ。
両端から問題に取り組む。全体的なデザインが理にかなったものになるようにし、簡単な雑用を処理する小さな部品を選び、それらを正しくするようにしてください。次に、両端から中央に向かって作業を試みます。そして、真ん中から両端に向かって作業します。次に、上から下へ、次に下から上へ。その後、プロセス全体を繰り返します。
基本的に、あなたが持っているのはクラスのコレクションです。クラスAを検討してください。クラスAが適切に構築されている場合、クラスAを使用するクラスは、良いか悪いかに関係なく、自動的に動作します。うまくクラスAが使用するクラスならば、それらの使用のクラスがより行います、しかし、良いか悪いか、彼らはあります。そのため、クラスをできる限り最善の方法で編成し、それぞれが可能な限り最高のクラスであることを確認してください。
できる限り正しく取得することが重要です。悪いコードは、あなたがそれを捨てる日まであなたを悩ませます。ソフトウェアを使用すると、多少の余分な磨きが常に効果があります。(コードを使用してしまう人がいない限り...)
要約すると、他の回答で与えられた実際のアドバイスを確認し、好きなものが得られるまでコードを書き直してください。