Видите ли вы (анти) шаблоны в моем дизайне? Как распознать рисунок? - PullRequest
1 голос
/ 18 июня 2009

У меня есть веб-приложение, закодированное в ABAP / BSP. Я заинтересован в предоставлении хорошего кода, так что, возможно, вы сможете помочь мне распознать хороший или плохой шаблон. На самом деле я делаю следующее. Объявите объект базового класса и создайте его экземпляр динамически на основе некоторого параметра с подклассом. Базовый класс имеет несколько методов для выборки данных (), подклассы используют эти данные и, возможно, манипулируют ими.

Вот немного быстрой базовой картинки (извините, не думаю, что она соответствует какому-либо стандарту или языку, но должна дать вам представление)

альтернативный текст http://img35.imageshack.us/img35/4351/designkdp.jpg

Что-то вроде этого в порядке? Есть ли какой-либо известный шаблон скрытый или я должен рефакторинг и использовать шаблон? Мне нравится здесь несколько предложений. Я уже читал статью в Википедии, но не вижу подходящего шаблона. (Также заказал несколько книг, но вы, ребята, уверены, что быстрее :))

Ответы [ 4 ]

3 голосов
/ 18 июня 2009
1 голос
/ 18 июня 2009

Мне кажется, что BaseClass и SubClasses имеют что-то вроде (псевдокод)

interface IDataProvider{
  GetData();
}

class SubClass1 implements IDataProvider{
  GetData(){
     ...
  }
}

Стратегии создания экземпляров, которые вы используете, похоже, работают как Factory . То, что вы могли бы сделать, это выложить рендеринг в каком-то HTMLRenderingEngine или где-либо еще (я не знаком с ABAP / BSP), просто чтобы отделить презентацию от остальной логики.

1 голос
/ 18 июня 2009

Это шаблон Фабрики из книги Гаммы, Хелма, Джонсона и Влиссида «Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения».

0 голосов
/ 18 июня 2009

Наследование - это весело, но его следует использовать как последнее средство. Я не говорю, что вы не можете сделать это так, как делали - ваше решение полностью оправдано, но просто предложить альтернативу ...

Что если бы у вас был «DataClass», в котором вы могли бы установить объект processData (или нет). Объект processData фактически будет интерфейсом с единственным методом "processData".

Когда вы вызываете getData, это может выглядеть примерно так:

if(processDataObject == null)
    return getInformation();
else
    return processDataObject.processData(getInformation());

Черт, если у вас есть определенный объект processData "passthrough", который ничего не делает и использует его в качестве "processDataObject" по умолчанию, тогда весь метод getData становится:

return processDataObject.processData(getInformation());

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

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

...