Здравствуйте, heathcliff, Вы писали:
H>А можно поподробнее? Как можно "изменить модель на произвольно взятом уровне" с "с сохранением корректности уже написанного кода"? IMHO в общем случае это невозможно, так как обычно отсутствует возможность оперативно и с минимальными затратами сил корректировать уже написанный код. Речь идет о незначительных изменениях модели или о продвинутых технологиях создания кода? Поясните, что имелось ввиду, плиз. Интересует чисто техническая сторона дела.
Имеются в виду "продвинутые технологии создания кода". Некоторые из них уже реализованы; о некоторых надо мечтать. Основные существующие инструменты не предоставляют достаточного сервиса. Например, большинство кодогенераторов из UML ограничиваются генерацией деклараций. Это означает, что такое действие, как разделение класса на пару наследник/потомок приведет к необходимости править собственно код руками. Интеллектуальный инструмент нашел бы все вхождения используемого класса и изменил бы код соответствующим образом. У меня не хватает эрудиции обсуждать конкретные свойства конкретных инструментов для рефакторинга, но необходимость в определенной функциональности я вижу.
Ключевая идея в том, что мы имеем в момент 1 некоторую модель, которая является корректной. Т.е. она адекватно отражает наши представления о предметной области. При этом модель уже обросда "мясом", вплоть до наличия корректно функционирующего приложения. В момент 2 мы обнаруживаем несовершенство наших представлений и корректируем их. В рамках существующей модели внесение изменений ведет к значительному усложнению (т.е. увеличению числа взаимодействий между элементами модели). Поэтому перед расширением модели возникает желание изменить модель так, чтобы в момент 2 мы имели не менее корректную модель, отражающую наши
предыдущие представления. (очевидно, что таких корректных моделей — бесконечное количество). При этом никаких потерь не должно происходить — если мы имели работающее приложение в момент 1, то мы должны все еще его иметь.
Эта новая модель должна отличаться от предыдущей ровно одним свойством — расширение ее для соответствия новым представлениям не должно увеличивать локальную сложность так значительно.
... << RSDN@Home 1.0 beta 7a >>