Рефакторинг наследования в композицию с использованием Vbex2005 - PullRequest
0 голосов
/ 07 июля 2010

У меня есть класс, который я написал довольно рано в своем опыте программирования на vb.net, который унаследован от другого класса, который он действительно должен был составить.Базовый класс - это относительно общая вложенная коллекция на основе словаря;давайте назовем класс-потомок «Car».

Сейчас есть много кода, который делает такие вещи, как «MyCar! Color.st =« Red »» (я использую обобщенную коллекцию, а не реальные свойства, чтобы облегчитьобмен данными с кодом, написанным на VB6, а также для облегчения сравнения автомобилей; при наличии трех автомобилей X, Y, Z я могу, например, обнаружить любые изменения между X и Y и применить эти изменения к Z).

IsЕсть ли хороший способ рефакторинга кода для использования композиции, а не наследования?К каким свойствам / методам должен относиться объект «Car», а к каким следует обращаться через свойство объекта данных?Следует ли определить расширяющуюся конверсию между автомобилем и объектом сбора?Есть ли какие-либо ошибки при проведении такого рефакторинга?

1 Ответ

1 голос
/ 08 июля 2010

Вы могли бы начать с того, что у Car есть функция (или метод; не уверен в терминологии vb.net), чтобы получить свою коллекцию - и эта функция первоначально вернет this (или self, или как там ее называет vb).).

Теперь замените все прямые ссылки на Car-as-Collection на Car.getCollection() как внутри класса Car, так и за его пределами.

Наконец, внесите изменения: создайте переменную-член, инициализируйтевернуть его из getCollection() и прекратить наследование из коллекции.Если вы пропустили какие-либо ссылки на шаге 2, на этом этапе они будут отображаться как ошибки компиляции.Исправьте их, и ваш рефакторинг завершен.

...