質問

古いレガシープレゼンテーションライブラリが長年にわたって維持されており、急いで修正され、適切な建築監視の欠如のプロセスを通じてますます多くのビジネスロジックがコード化されている仮想的な状況を考慮しています。または、アセンブリ境界によるプレゼンテーションから分離されていないビジネスクラスまたは名前空間を検討してください。したがって、system.windows.formsのようなものを参照することができました(参照を強制せずに(単純な使用よりもはるかに冷静なアクション) 。

このような状況では、このUIコードで使用されるビジネスコードが最終的に再利用のために呼び出されることは想像できません。これを可能にするために2つのレイヤーをバラバラにリファクタリングする良い方法は何ですか?

私はデザインパターンに大まかに精通しています - 少なくとも原則としてとにかく。しかし、私には多くの実務経験がないので、私は自分の直感に少し確信が持てません。このために戦略パターンを使用するパスに沿って始めました。アイデアは、ビジネスロジックがUIコンポーネントまで呼び出してユーザーに質問をしてデータを収集し、それらをインターフェイスのセットにカプセル化する場所を特定することです。そのインターフェイスの各メソッドには、元のワークフローからのUI指向コードが含まれ、UIクラスはそのインターフェイスを実装します。

問題のビジネスロジックを再利用したい新しいコードもこのインターフェイスを実装しますが、UIコンポーネントによって元々回答された質問に新しいウィンドウまたは事前にパラメーター化された回答のいずれかを置き換えます。このようにして、Bizロジックは、やや厄介なインターフェイスパラメーターがいくつかの方法に渡されたものの、実際のライブラリとして扱うことができます。

これはまともなアプローチですか?これをどのくらい良くするべきですか?私はあなたの集合的なインターネットの知恵に延期します。

ありがとう!

役に立ちましたか?

解決

あなたは良いアプローチを取っているようです。そこでは、デザインの具体的な要素間の依存関係を破り、代わりに抽象化(インターフェイス)に依存します。このような依存関係を破ったら、すぐにユニットテストを使用してレガシーコードベースをカバーし、保証を改善して設計を進化させる必要があります。

本を見つけました レガシーコードで効果的に作業します これらの状況で非常に貴重であること。また、最初にオブジェクト指向のデザインの原理を見ずにパターンに飛び込まないでください。 個体 原則。彼らはしばしば、システムの進化に関するパターンと決定の選択を導きます。

他のヒント

謙虚に提案します Model – View – Controller -MVC あなたの問題に対する成功した解決策として高い確率があります。あなたが説明するように、それはさまざまなロジックを分離します。

alt text

Hth

エンティティと彼らができる、または行うことができるエンティティを明確に特定することで、私はそれにアプローチします。次に、UIからロジックをリファクタリングし、UIコールをBLオブジェクトに呼び出すために、独立したビジネスロジックオブジェクトの作成を開始しようとします。

その時点で、あなたのシナリオを正しく理解している場合、BLオブジェクトでいっぱいの手があり、その一部はWinフォームコールを作成しました。

JustBooが言うように、BLとUIからコントローラーを抽象化し、MVCデザインですべて機能にするのに十分な状況があると思います。

さて、あなたのさまざまなコメントを考えると、私はホッファ氏のアドバイスを受け取り、それを拡張します。困難な問題は、「征服される」ことができるまで、より小さな仕事の単位に分解されるべきだと聞いたと思います。

その手法を使用して、の方法論と相まって リファクタリング あなたの問題を解決することができます。それについての本とウェブにはたくさんの情報があります。これでリンクがあります。そのページには、情報へのリンクがたくさんあります。

からのもう1つのリンク 著者 本の。

したがって、ゆっくりと、しかし確実にMVCのクリーミーな良さを段階的にリファクタリングします。

Hth

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top