私はWinFormsスタイルで開発されたWpfapplicationを開発中です。私はこれを言っています -WinFormsスタイルで開発されたWPFアプリケーションをリファクタリング/再構築する方法
- UserControlsがコードよりも多くの行を持っています(どの領域もなく、クラス全体に散在しています)。まったくの分離はありません。
- 〜1000行のコードと、対応するViewModelのコードが1000行あるUserControls。
- 多くのイベントハンドラを持つUserControls(一部は> 25)。
- ネストされたクラスを持つUserControls。
- INotifyPropertyChangedを実装し、DPを持つUserControls。
- 未使用のクラス/コードがたくさんあります(コードで参照/使用されていますが、何もしません)。
- さらに30個のMultiValueコンバータと40個のバリューコンバータがあります。
- Converterインスタンスは、/ VMの背後にあるコードで頻繁に使用されます。
- いくつかのMultiValueコンバータ
- は、数百行のコード(400行までのコードを持つものはほとんどありません)です。
- ビジネスロジックが内部にあります。
- ViewModelインスタンスを作成します。
- ネストされたクラスを持つ。
- コードの背後にあるユーザーコントロールによって使用されるメソッドを公開します。
- コードビハインドとビューモデルでユーザーコントロールが使用するプロパティを公開します。
- 他のコンバータで使用される観測可能なコレクション/リストを返す静的メソッドを持つ&モデルを表示する。
- イベントを公開し、UserControlおよびビューモデルによってサブスクライブします。
- IDisposableを実装しています。
<Editor:EditorControl.DataContext> <MultiBinding Converter="{StaticResource EditorControlModelConverter}"> <Binding ElementName="UserControl" Path="RefId" /> <Binding ElementName="UserControl" Path="CollectionView.SelectedScenario" /> <Binding ElementName="UserControl" Path="ParentComponentName" /> </MultiBinding> </Editor:EditorControl.DataContext>
と、この - -
このよう<ListView.ItemsSource> <MultiBinding Converter="{StaticResource ItemsSourceInsertConverter}"> <Binding ElementName="EditorControl" Path="EditorControl.ContextListEnabled" /> <Binding ElementName="EditorControl" Path="EditorContainer.ParentComponent.Model.ModelList" /> <Binding ElementName="EditorControl" Path="EditorContainer.ParentComponent.Model.CategoryModelList" /> <Binding ElementName="EditorControl" Path="EditorContainer.ParentComponent.Model.ItemSortOrder" /> <Binding ElementName="EditorControl" Path="IsItemSourceMatrixInsertConverterSuspended" /> <Binding ElementName="EditorControl" Path="EditorControlModel.IsUpdating" /> <Binding ElementName="EditorControl" Path="EditorControlModel.ContextListEnabledInitialized" /> <Binding BindsDirectlyToSource="true" ElementName="listView" /> <Binding ElementName="EditorControl" Path="EditorControlModel" /> <Binding ElementName="EditorControl" Path="EditorContainer.Plugin.FeatureManager.EditorCategoryFeatureEnabled" /> <Binding ElementName="EditorControl" Path="EditorContainer.Plugin.FeatureManager.EditorMatrixFeaturesEnabled" /> </MultiBinding>
:コンバータはDataContextのとコントロール/リストビュー/データグリッドのItemSourcesを設定/作成するために広く使用されている
List on on ...あなたと同じ状況に直面していて、それをどう対処していますか?より良いパフォーマンスと保守性のために、この種のアプリケーションをリファクタリングするにはどのようなアプローチが必要ですか?
アップデート:私たちは私たちのアプリケーションのパフォーマンスに満足していないと感じる - : -
パフォーマンスアンドリューのQの
回答 "我々はこれをリファクタリングする必要があるのはなぜ"機能性とユーザビリティを考慮して、より良いはずです。
優れた拡張性:私たちはまだ製品の初期段階であり、今後多くの新機能を追加する必要があることを認識しています。現在のコードベースを見ると、それは厄介に見え、古い機能を破壊する可能性があります。
メンテナンスの改善:将来的に非標準/トリッキー/ハッキーコードを維持するのは難しくなります(これは、この製品が今後数年間続くと思われます)。
はい、私がやるべき最初のことは、「無能なWinForms開発者によって構築されたWPFアプリケーションをリファクタリングする」のような、意図的に炎症のタイトルを持つStack Overflowに関する質問を投稿することです。 *ああ待って... * –
正直言って、私はここで "Winforms"開発としてタグ付けすることができます多くは表示されません。ビューモデル、コンバータ、バインディングを使用している場合は、明らかにMVVMを使用しようとしています。私は "私はする必要がありますか?"答えが「はい」の場合は、Resharperを購入してください。それはどこにも参照されていないすべてを表示します。すべて削除してから、リファクタリングを開始し、意味のあるところでクリーンアップしてください。 Resharperは、あなたから多くの努力なしに、あなたのために多くを行うことができます。しかしそれでも、あなたはあなたの前で多くの仕事をしているように見えます。 – Josh
私はあなたがコンバータでイベントを公開する可能性があることを知りませんでした。 – Paparazzi