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