Так у меня есть класс менеджера заказа, который выглядит как:Помощь проектирование заказа менеджер класс
public class OrderManager
{
private IDBFactory _dbFactory;
private Order _order;
public OrderManager(IDBFactory dbFactory)
{
_dbFactory = dbFactory;
}
public void Calculate()
{
_order.SubTotal
_order.ShippingTotal
_order.TaxTotal
_order.GrandTotal
}
}
Теперь, дело здесь иметь гибкий/Testible дизайн. Я очень обеспокоен тем, что могу написать твердые модульные тесты вокруг этого метода Calculate.
соображения:
1. Shipping has to be abstracted out, be loose coupled since the implementation of shipping could vary depending on USPS, UPS, fedex etc. (they have their own API's).
2. same goes with calculating tax
Должен ли я просто создать налог и класс доставки менеджер, и имеют налог/доставки завод в конструкторе? (точно, как я разработал класс OrderManager)?
(единственное, что я могу придумать, с точки зрения того, что я «пропустил», - это IoC, но я не против этого и не нуждаюсь в этом дополнительном уровне абстракции в моем представлении).
Хорошо написанный код легко проверить. Разделите свою функциональность на гранулированные компоненты, проверьте на этом уровне. Также проверите все это на концерте. Тестирующий код не должен выглядеть 100% элегантным. Тестеры работают вокруг реализаций, а не наоборот. Иногда есть компромисс, но поверьте мне - на реальном мире, на рынке программного обеспечения (большая часть рынка), тестирование уделяется второму приоритету (NASA делает все по-другому). Держите его простым, пока не возникнет необходимость в сложности. –
На этот вопрос можно ответить только на многодневную дискуссию на доске. –
@Jeff Sternal - Согласен - дает некоторые идеи, которые будут бросать на доску :) – CSharpAtl