ОК, попробовав мою первую попытку TDD, пришло время немного задуматься
и получить некоторое руководство, потому что это не было так успешно для меня.
Решение было частично сделано с существующей структурой, возможно
делая TDD менее идеальным. Часть, которая, казалось, дала мне самый большой
проблема, было взаимодействие между представлением и контроллером. Больной
приведу несколько простых примеров и надеюсь, что кто-то скажет мне, что я
могу сделать лучше неправильно.
Интерфейс каждого представления наследуется от базового интерфейса, с этими
участники (их больше):
открытый интерфейс IView
{
void ShowField (string fieldId)
void HideField (string fieldId)
void SetFieldVisibility (строка fieldId, bool видимый)
void DisableField (string fieldId)
void ShowValidationError (string fieldId)
...
}
Интерфейс для конкретного представления, затем будет добавлять элементы для каждого
поле как это
общедоступный интерфейс IMyView: IView
{
Имя строки {получить; задавать; }
string NameFieldID {get; }
...
}
Что вы думаете об этом? Наследует от общего интерфейса
хорошая или плохая идея?
Одна из вещей, которая доставляла мне неприятности, заключалась в том, что сначала я использовал
ShowField и HideField и выяснил, я бы лучше использовать
SetFieldVisiblity. Я не изменил результат метода, но я
пришлось обновить мой тест, который, как мне кажется, должен быть необходим. Имеет
несколько методов делают одно и то же, плохо? С одной стороны, оба
методы удобны для разных случаев, но они загромождают
интерфейс, что делает интерфейс более сложным, чем он должен быть.
Будет ли лучше дизайн без общего интерфейса? Что бы убрать
fieldID, я не знаю почему, но я думаю, что FieldID-вещь пахнет, я
может быть не так.
Я бы делал только методы Show и Hide, когда это необходимо, то есть если
они будут вызваны контроллером. Это было бы менее общим
решение и требуют больше кода в представлении, но код контроллера
было бы немного проще.
Итак, интерфейс представления может выглядеть так:
общедоступный интерфейс IMyView
{
void ShowName ()
void HideName ()
Имя строки {получить; задавать; }
int Age {get; задавать; }
}