6

MVVM、およびWPFアプリの全体的な構造のMVCパターンを除いて、アプリのモデル/コントローラーの側面をどのように正確にサブコンポーネントに分割しますか?私が尋ねる理由は、上記のパターンの観点からソリューションを設計することに問題はないということですが、実際にバックエンドを作成することになると、私はそれをたくさんいじっていると感じています。私はユーザーの観点からは高品質のアプリになりますが、私のデザインのアステティックではこれを受け入れることができません。

明確にするために; 私のビジネスロジックの多くは、アプリ全体を変更することなく、簡単で意味のある方法でクラス(または関連するすべてのインターフェイスを含むクラス階層)にリファクタリングすることはできません。私は1年半プロとして開発してきましたので、経験不足の問題かもしれません。でもそれでも言い訳にはならないと思います。この明らかに自由形式の質問へのポインタはありますか?

編集:コードリクエスト(Silverlight内)-以下は、はるかに大きなアプリの一部であるドラッグドロップ割り当てアプリケーションのマウスボタンアップハンドラーからの-スニペット-です-

ロジックがどれほど鈍いのかが本当に好きではなく、すべてがイベントハンドラーに詰め込まれているため、すべてが完全にファクタリングできない方法が嫌いです。

       //determine if there is a previously existing allocated sale corresponding to this purchase's ID

                SaleWS allocSaleExisting = colltoaddsale.FirstOrDefault(s => (s.p_TRADEID == allocPurch.TRADEID));


                if (allocSaleExisting != null && allocSale.TRADEID == allocSaleExisting.TRADEID)
                {
                    PurchaseWS allocPurchExisting = colltoadd.First(p => p.TRADEID == allocPurch.TRADEID);

                    //allocPurchExisting.AMOUNT += allocPurch.AMOUNT;
                    allocSaleExisting.AMOUNT += allocSale.AMOUNT;


                    allocPurchExisting.AMOUNT += allocSale.AMOUNT;
                    allocPurch.AMOUNT -= allocSale.AMOUNT;


                    colltoaddsale.Remove(allocSale);


                    //colltoadd.Remove(allocPurch);

                }

                else
                {


                    //Create new "split" item in the data source for the source table
                    PurchaseWS splitAllocPurch = new PurchaseWS { COMMODITY = allocPurch.COMMODITY, CONTRACTNUMBER = allocPurch.CONTRACTNUMBER, AMOUNT = allocPurch.AMOUNT - allocSale.AMOUNT, FORM = allocPurch.FORM, GRADE = allocPurch.GRADE, LOCATION = allocPurch.LOCATION, SHIP_DATE = allocPurch.SHIP_DATE, TRADEID = allocPurch.TRADEID, UNITS = allocPurch.UNITS };

                    //update the source table's selecteditem datacontext with the target allocation id

                    allocPurch.s_TRADEID = allocSale.TRADEID;

                    allocSale.p_TRADEID = allocPurch.TRADEID;

                    allocPurch.AMOUNT = allocSale.AMOUNT;




                    colltoadd.Insert(colltoadd.IndexOf(allocPurch) + 1, splitAllocPurch);







                }


            }
4

2 に答える 2

5

Patterns and Practices グループのComposite Application Guidanceを参照してください。

大規模なアプリケーションで WPF/Silverlight に MVVM を使用する方法や、ビジネス ロジックの問題を処理する方法など、特にこれに向けて調整されています。

于 2009-06-12T20:03:13.230 に答える
1

Caliburnもチェックする必要があります。

于 2009-12-20T23:51:01.130 に答える