В этом простом примере (конечно, моя проблема с реальным миром сложнее, хотя основы одинаковы), как я могу принудить вас не спрашивать max? Id нравится максимизировать, не спрашивайте в методе процесса, в его текущем состоянии его сложнее насмехаться и тестировать.Скажите, не спрашивайте и не делитесь состоянием между задачами
public class Processor
{
public void Process()
{
var data = new Task1().DoStuff();
new Task2().DoStuffToData(data);
}
}
public class Task1
{
public Data DoStuff(){return new Data();}
}
public class Data {}
public class Task2
{
public void DoStuffToData(Data data){}
}
EDIT: Обновленный образец более DIish
public class Processor
{
public Processor(ITask1 task1, ITask2 task) {...}
public void Process()
{
var data = task1.DoStuff();
task2.DoStuffToData(data);
}
}
Да, ты прав, с этой точки зрения это выглядит нормально, я думаю, что, возможно, задал неправильный вопрос. В то время я читал 9-ю точку http://binstock.blogspot.com/2008/04/perfecting-oos-small-classes-and-short.html, но, глядя из чистого рассказа, не спрашивайте перспективы. Ваше предложение - это один из способов решения моей проблемы, поэтому я думаю, что плохо попробуйте. – MatteS
Кроме того, я где-то читал, что при написании тестов издевательства над другими маками обычно указывают на проблему с дизайном. Поэтому, если я напишу тест метода Process mocking task1 и task2, в моем примере напишите ожидание для задачи1, чтобы вернуть данные, хотя мой тест должен тестировать вызов task2. Представьте, что у вас 10 таких задач в разных комбинациях, и я должен настроить много из насмешек для каждого теста, хотя Im каждый раз проверяет каждую вещь. С другой стороны, если вы предлагаете свое предложение, им даже больше принуждаются к тому, чтобы оживить ожидание, возвращая еще один макет ... – MatteS
Вообще говоря, объединение данных и поведения, связанных с данными, является хорошей практикой. Но ты по праву волнуешься, когда обнаружишь, что обманываешь насмешек, ничего не испытывая. – Marijn