Вот личный пример, где я использовал наследование, чтобы значительно улучшить ситуацию развития:
Мне нужно было разработать набор элементов управления asp.net (c #), который позволял бы как стандартным веб-формам (связка полей формы с кнопкой отправки), так и защищенной версии, которая обращается к веб-службе для отправки информация по SSL.
Из-за всех сходств между элементами управления и концепциями, я разработал ряд классов:
BaseWebControl
- пользовательский базовый класс управления, который наследуется от
System.Web.UI.WebControl
класса (часть .NET Framework
- имеет пользовательские свойства и методы, которые используются в нашем приложении всеми пользовательскими элементами управления (информация о состоянии элемента управления и т. Д.)
BaseFormControl
- наследуется от BaseWebControl, получая все основные функции
- управляет функциональностью базовой формы, такой как динамическое добавление наборов полей, маркировка обязательных полей, добавление кнопки отправки и т. Д. И т. Д.
- содержит метку и соответствующий контрольный индекс для удобного поиска
- помечен как абстрактный класс с абстрактным методом с именем
SubmitForm
. Этот метод не определен в этом классе, однако он вызывается событием нажатия кнопки отправки. Это означает, что любой конкретный класс управления формой, который наследуется от этого базового класса, может реализовать абстрактную функциональность SubmitForm
по мере необходимости.
EmailFormControl
- Наследуется от
BaseFormControl
, поэтому он получает все основные функции, описанные выше, без дублирования
- содержит очень мало, за исключением того, что переопределяет абстрактный метод
SubmitForm
и генерирует электронное письмо на основе полей формы.
- все другие функции управления и обработки событий рассматриваются базовым классом. В базовом классе, когда кнопка отправки нажимается и обрабатывается, она вызывает эту конкретную реализацию
SubmitForm
SecureFormControl
- Опять наследуется от
BaseFormControl
, поэтому он получает все базовые функции, описанные выше, без дублирования
- При реализации
SubmitForm
он подключается к веб-службе WCF и передает информацию через SSL.
- никаких других функций не требуется, потому что базовый класс обрабатывает все остальное.
В урезанной кодовой форме общий план таков:
public class BaseWebControl : System.Web.UI.WebControl
{
//base web control with application wide functionality built in
}
public abstract class BaseFormControl : BaseWebControl
{
//handles all 'common' form functionality
//...
//...
//event handler for submit button calls abstract method submit form,
//which must be implemented by each inheriting class
protected void btnSubmit_Click(object sender, EventArgs e)
{
SubmitForm();
}
protected abstract SubmitForm();
}
public class EmailFormControl : BaseFormControl
{
protected override SubmitForm()
{
//implement specific functionality to email form contents
}
}
public class SecureFormControl : BaseFormControl
{
protected override SubmitForm()
{
//connect to WCF web service and submit contents
}
}
В результате вышесказанного, BaseFormControl
имеет около 1000 строк кода в целом ряде методов, свойств и т. Д. SecureFormControl
и EmailFormControl
каждая имеет около 40 строк. Все остальные функции совместно используются и контролируются базовым классом. Это способствует:
- ремонтопригодность
- эффективность
- гибкость
- консистенция
Теперь я могу очень легко создавать веб-формы любого типа, например DataBaseFormControl
и т. Д. Я могу добавить новые функциональные возможности ко всем формам, добавив методы и свойства в базовые классы и т. Д.
И этот список можно продолжить.
Фу, это было много печатать. Надеюсь, что это поможет дать вам хороший пример. Это был один случай, когда я обнаружил, что наследование является ключевой точкой успеха в проекте.