2013-09-06 2 views
0

У меня есть свойство на странице, которая получает значение строки запроса, мне нужно, чтобы это было на всех связанных страницах. Страницы уже наследуют базовый класс, и я не хочу здесь свойство, поскольку не все, что наследует этот базовый класс, нуждается в этом конкретном свойстве.Использование интерфейса для обеспечения того, чтобы каждый класс имел то же свойство

Моя идея состояла в том, чтобы создать интерфейс с этим свойством и иметь каждую страницу, которая нуждается в свойстве реализовать этот интерфейс.

Является ли это хорошей практикой, или я должен унаследовать базовый класс в другой класс только с этим свойством, а затем все страницы наследуют это вместо базы?

Благодаря

ответ

2

Я предполагаю, что реализация объекта будет одинаковой на всех страницах, которые в них нуждаются? Если вы используете интерфейс, все страницы должны реализовать это, что приведет к большому количеству кода копирования/вставки. Не лучше ли написать какой-то класс поставщика, с которым вы можете передать экземпляр вашей страницы (если необходимо) и использовать этот класс для извлечения свойства? Здесь я думаю, что лучше использовать композицию над наследованием, потому что, если вы создадите другой базовый класс, вы увеличите иерархию своей страницы еще одним базовым классом.

+0

Я думаю, что вы правы, если честно, я унаследовал (не каламбур) немного беспорядок. Мне нужно потратить некоторое время, глядя на то, что делают эти страницы, прежде чем я думаю о перефакторинге. Я проголосую за это, так как я буду идти, когда буду готов – DavidB

0

Я бы сказал, это не имеет большого значения, но я предпочитаю другой уровень наследования, потому что у вас есть только написать код один раз. С интерфейсом вы более гибкие, возможно, в некоторых случаях вы не хотите использовать Auto Property, но проверяете значение null или что-то в этом роде.

Так что если это всегда одно и то же свойство, то перейдите с унаследованным вторым базовым классом, если у вас есть разные проверки в getter или setter, а затем перейдите с интерфейсом.

+0

Спасибо, недостаток интерфейса IS я должен написать реализацию каждый раз, но это также заставляет эти страницы, чтобы использовать свойство. (до тех пор, пока я не помню, чтобы реализовать интерфейс!) – DavidB

0

Интерфейсы не требуют дублирования кода! Вы можете использовать делегирование. Это похоже на принятый ответ, за исключением одного способа. Интерфейс можно использовать, чтобы выставлять контракт другим классам, которые позволяют им взаимодействовать с вашим классом последовательно и мощно. Тогда возникает ключевой вопрос, будет ли внешний код когда-либо хотеть «знать», имеет ли ваша форма эта функциональность?

delegation-instead-of-inheritance