Как загрузить разные элементы управления ASP.NET для разных конкретных классов, которые наследуются от одного абстрактного базового класса - PullRequest
0 голосов
/ 08 февраля 2010

Скажем, у вас есть абстрактный базовый класс Task, который является задачей, которую может выполнить пользователь. Есть две конкретные задачи: SimpleTask и ChecklistTask. Что если вы хотите, чтобы пользовательский интерфейс (ASP.NET) отображал другой элемент управления в зависимости от типа задания?

В WPF вы можете использовать DataTemplates, но как это сделать в ASP.NET? Кстати, мы пытаемся избежать заявления о переключении. У нас есть другие фрагменты кода с длинным оператором switch, которые начинались с малого, но со временем росли. Вот чего мы пытаемся избежать.

Есть ли шаблон дизайна для таких вещей? Мы не можем позволить Task классам «знать» классы пользовательского интерфейса, потому что они являются классами домена. Или оператор switch является лучшим, что мы можем сделать (при необходимости, скрытый в отдельном «фабричном» классе)?

Ответы [ 3 ]

1 голос
/ 08 февраля 2010

Что-то где-то должно знать, как сопоставить подкласс Task с элементом управления UI. Период. Вопрос только в том, куда положить эти знания.

  1. Само задание
  2. Класс, который может использовать данные, полученные из Задачи, чтобы найти соответствующий элемент управления
  3. Код, который фактически выдает задание (почему он не может вместо этого дать элемент управления UI?)
  4. Некоторый код, который отображает класс Task в элемент управления UI, возможно, через атрибуты и отражение.
  5. Некоторые другие виды метаданных.
0 голосов
/ 08 февраля 2010

Мне нравится часть "Изоляция" в любом шаблоне проектирования, смотри, я думаю, ты должен сделать реализации буксировки пользовательского интерфейса как для простых задач, так и для контрольных списков, и оба являются просто черным ящиком для себя, затем на другом элементе управления или странице, которые можно использовать ItemTemplate если вы собираетесь перечислить некоторые задачи и в этом ItemTemplate вы просто помещаете условие для проверки типа задачи и вызываете на этой странице метод, который отображает HTML правильного типа (Simple или Checklist)

0 голосов
/ 08 февраля 2010

Предположим, ваша SimpleTask реализована в SimpleTask.ascx, а ChecklistTask в ChecklistTask.ascx. Затем поместите в metainfo (любым способом, который вам нужен для создания определенного элемента управления) путь, в котором находится .ascx (например: "~ / MyControls / SimpleTask.ascx").

И наконец: встроить элемент управления с помощью TemplateControl.LoadControl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...