Читаю Роберта Мартина и пытаюсь постичь все тонкости рефакторинга.
Если с C#-кодом все более-менее понятно и код мало-помалу начинает радовать глаз, то с XAML всё печально. Разметка громоздкая и трудночитаемая.
Понятно, что многое связано с xml-"наследственностью". Xml избыточен и не очень приятен для глаз, но всё же. Какие есть способы и кто что применяет для рефакторинга xaml?
В идеале хотелось бы избавиться от десятиуровневой иерархии и получить короткие "методы" по 5-7 строчек (как это у меня сделано в c#-коде).
Привожу разметку одного из окон моего последнего WPF-приложения (все 320 строчек "фарша"):
Буду рад любым рекомендациям и замечаниям, особенно с примерами
Ответ
Обычной альтернативой является вынесение общих логических частей в отдельный код.
Если у вас есть части разметки с самостоятельным смыслом, самостоятельной функциональностью, их следует вынести в отдельный UserControl. Если к тому же куски и повторяющиеся — вы сможете повторно использовать ваш UserControl. (Но и без этого, если есть самостоятельный смысл, нужно отделять в новый контрол — как и с процедурами.) Если части повторяются, но не в точности, сделайте ваш UserControl параметризируемым, чтобы настраивать его вид и поведение. Это полный аналог использования подпрограмм (функций/процедур) в императивном программировании. Без UserControl'ов ваш код превращается в неподдерживаемый монолит, точно так же как императивный код без использования процедур.
Далее, если у ваших контролов есть общие свойства, вынесите их в стиль. Это может быть немного сложнее, чем просто писать свойства во всех контролах, но правильно написанный стиль можно повторно использовать, а также наследовать и изменять его. Вы можете заводить иерархии стилей и применять их к вашим контролам, чтобы модифицировать их поведение одинаковым образом. Это аналог АОП в императивном программировании.
P. S.: Это не даст вам 10-строчные части, т. к. XML всё же достаточно многословен, и не допускает многочисленные сущности в одном файле. Думаю, реалистической целью может быть 30-50 строк на файл.
Комментариев нет:
Отправить комментарий