2009-02-06 4 views
0

Я работаю над изменением элемента управления на существующем сайте. Все элементы управления с сайта наследуют от базового класса. У меня есть требование, чтобы скрыть несколько ссылок на главной странице, так что я написал этот метод на моем контроле:Должен ли я переоборудовать этот код?

private void HideCartLink (bool visible) 
{ 
    Control control1 = Page.Master.FindControl("link1"); 
    control1.Visible = visible; 

    Control control2 = Page.Master.FindControl("link2"); 
    control2.Visible = visible; 
} 

Затем я перешел к другому элементу управления, и я должен был сделать то же самое. Поэтому я переработан мой код и изменил мой базовый класс с этим:

public void HideMasterPageControl (string controlName, bool visible) 
{ 
    Control control = Page.Master.FindControl(controlName); 
    control.Visible = visible; 
} 

и добавил этот метод на моем управлении:

void CartLinkVisible(bool visible) 
{ 
    ////hide cart link 
    HideMasterPageControl("link1", visible); 
    HideMasterPageControl("link2", visible); 
} 

Теперь я перешел к третьему контролю и понял, что я должен сделать то же самое.

Должен ли я реорганизовать свой код еще раз, чтобы у моего базового класса был метод, который точно знает, какие ссылки скрывать? Или я должен оставить свой базовый класс обобщенным и позволить моим элементам управления решить, что скрывать?

Я не уверен, что правила здесь ...

+0

Пожалуйста, исправьте заголовок? («Должен ли я переформатировать код в этом коде», может быть, должен быть «Должен ли я переформатировать этот код»?) – user9876

ответ

4

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

Это избавляет вас от неудобного положения разработки на каком основании, чтобы скрыть вещи, которые могут или даже не быть там.

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

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

+0

Я обладаю, но, к сожалению, это не вариант в этом случае, так как управление контентом построено, и это живой сайт. Это будет огромный передел ... –

1

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

Хотя, я должен согласиться с Нилом, кажется лучше, если вы перевернете логику и решите, какие ссылки должны быть включены, а какие должны быть исключены.

Смежные вопросы