2014-02-28 3 views
0

я работаю по следующему сценарию:Соответствующая конструкция для нескольких объектов, которые возвращают аналогичные данные

  • взгляд имеет несколько вкладок. Каждая вкладка представлена ​​отдельным классом и содержит сетку данных.

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

  • The View Presenter есть метод, называемый SendItems, который должен получить элементов из активной текущей вкладки и вызвать соответствующий бэкенд метод обслуживания (один метод в различную коллекции элементов).

Что здесь подходит? Я подумал о двух путях до сих пор:

  • Поскольку детали очень похожи, я мог бы теоретически сгруппировать все свойства в класс 1 пункт, а затем я могу абстрагировать все это из имея метод называется GetItems(), который возвратит коллекцию . Затем я могу использовать словарь делегата по типу вкладок для , который вызывает правильный фоновый метод.

  • Я могу иметь все вкладки из базы, сохранить список вкладки в презентаторе и удерживать вкладку «Текущий». В SendItems сделайте несколько условий (по одному для каждого типа (если CurrentTab is TabA => MethodA(), и т. Д.)), А затем downcast для получения правильных данных. Наконец, вызовите соответствующий фоновый метод.

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

ответ

0

Я считаю, что в вашем случае, я бы в основном с опцией 2.

  1. Создание родительского класса вкладок и сделать другие вкладки извлечь из него.
  2. Создайте родительский класс для всех ваших элементов, который имеет в нем все общие свойства. Конкретные типы элементов для каждой вкладки могут быть получены из родительского класса для определения их дополнительных свойств.
  3. На родительской вкладке сохраните список выбранных элементов. Список должен быть списком. Классы для детей могут получать элементы в этой коллекции и полагаться на кастинг времени выполнения, чтобы получить более конкретные типы. В вашем случае приведение в основном будет noop (в зависимости от того, как вы это делаете), поэтому на нем нет никаких проблем с производительностью.
  4. На вкладке родительской, сделать метод SendItems аннотации так что каждая вкладка ребенка должен реализовать его сами

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

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