如何使用链式AddX类型的方法来改进此设计以从数据库构造对象层次结构?

时间:2010-04-13 18:18:00

标签: design-patterns oop composition

目前,我正在处理我的应用程序中的多层组合。我们从数据库中读取ProductLocations的数据并将它们放入Solver对象中。在另一个查询中,我们读取了与产品位置相关联的多个SalesActivities,这些产品位置需要放置在正确的ProductLocation对象深处的对象中。我最终得到了链式AddSalesActivity方法,如下面的代码所示。

多年来,我在许多应用程序中看到过这种结构。有时即使是更长的链条。我今天正在考虑它,这闻起来像一个微妙的重复。有关处理此问题的不同方法的任何想法?有没有办法提出更好的设计?

class Solver{
    List<ProductLocation> productLocations;
    public void ImportSalesActivities{
        //foreach sales activity read find the correct productLocation
        //Call productLocation.AddSalesActivity)
    }
}

class ProductLocation{
    Forecaster forecaster;
    public void AddSalesActivity(SalesActivity activity){
        forecaster.AddSalesActivity(activity);
    }
}

class Forecaster{
    SalesActivityResolver resolver;
    public void AddSalesActivity(SalesActivity activity){
        resolver.AddSalesActivity(activity);
    }
}

class SalesActivityResolver{
    List<SalesActivity> resolvedActivities;
    public AddSalesActivity(activity){
        //update resolved activities based on complicated criteria.
    }
}

1 个答案:

答案 0 :(得分:1)

按照你在这里描述的方式,人们可以删除类ProductLocationForecaster,但我猜他们做的其他事情没有在这里显示,因此无法删除。如果不更好地理解这些对象和类的语义,我就无法帮助你了。我的一般建议是你应该尝试为一个简单的场景(不是太多的对象)创建一个UML-Object-Diagram的应用程序。这可以帮助您发现模式并更好地理解对象的角色。