Как улучшить этот дизайн с помощью цепных методов типа AddX для построения иерархии объектов из базы данных? - PullRequest
2 голосов
/ 13 апреля 2010

В настоящее время я имею дело с несколькими слоями композиции в моем приложении. Мы читаем данные из базы данных для 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 Ответ

1 голос
/ 13 апреля 2010

Как вы здесь описываете, можно просто вырезать классы ProductLocation и Forecaster, но я предполагаю, что они делают другие вещи, не показанные здесь, и поэтому их нельзя удалить. Я больше не могу вам помочь без лучшего понимания семантики этих объектов и классов. Мой общий совет заключается в том, что вы должны попытаться создать UML-Object-Diagram вашего приложения для простого сценария (не слишком много объектов). Это может помочь вам обнаружить закономерности и лучше понять роли ваших объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...