代码之家  ›  专栏  ›  技术社区  ›  Jason Watts

大型应用程序设计(WPF/Silverlight)

  •  6
  • Jason Watts  · 技术社区  · 17 年前

    除了MVVM以及WPF应用程序总体结构的MVC模式外,您如何将应用程序的模型/控制器方面分解为子组件?我问这个问题的原因是,我从上述模式的角度设计解决方案没有问题,但是当涉及到实际编写后端时;我觉得我在胡编乱造。从用户的角度来看,我最终得到了高质量的应用程序,但我的设计不允许我接受这一点。

    编辑:代码请求(在Silverlight中)-以下是一个-片段-来自拖放分配应用程序中的mousebuttonup处理程序,该应用程序是更大应用程序的一部分-

    我真的不喜欢这种逻辑有多迟钝,也讨厌它完全不可分解的方式,因为所有的东西都被塞进了事件处理程序中。

           //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);
    
    
    
    
    
    
    
                    }
    
    
                }
    
    2 回复  |  直到 17 年前
        1
  •  5
  •   Reed Copsey    17 年前

    看一看 Composite Application Guidance 来自模式和实践组。

    它专门针对这一点,包括在大规模应用程序中为WPF/Silverlight使用MVVM,以及如何处理业务逻辑问题等。

        2
  •  1
  •   gius    16 年前
    推荐文章