Универсальные события
От: mikа Stock#
Дата: 06.09.04 17:03
Оценка:
Есть N типов сущностей. Например, Товар, Заказ, Заказчик и Продавец. У некоторых объектов данных сущностей могут срабатывать разного рода события. Например, после покупки Заказчик может посмотреть счет, а может и сразу оплатить, не смотря в него. И наоборот, такое событие может быть привязано к Продавцу.

Собственно вопрос. Как реализовать такую модель, чтобы:
Re: Универсальные события
От: Sergey Rizhkov Россия  
Дата: 07.09.04 06:43
Оценка:
Здравствуйте, mikа, Вы писали:

M>Есть N типов сущностей. Например, Товар, Заказ, Заказчик и Продавец. У некоторых объектов данных сущностей могут срабатывать разного рода события. Например, после покупки Заказчик может посмотреть счет, а может и сразу оплатить, не смотря в него. И наоборот, такое событие может быть привязано к Продавцу.


M>Собственно вопрос. Как реализовать такую модель, чтобы:

M>
На самомо деле, если расширить требования, например, для событий: join, fork, simple merge, exclusive choose итд, то получится целый workflow , а тут и до BPEL-серверов недалеко
Так что ,IMHO, ты изобретаешь велосипед
Re[2]: Универсальные события
От: mikа Stock#
Дата: 07.09.04 07:05
Оценка:
Здравствуйте, Sergey Rizhkov, Вы писали:

SR>На самомо деле, если расширить требования, например, для событий: join, fork, simple merge, exclusive choose итд, то получится целый workflow , а тут и до BPEL-серверов недалеко


Слушаем

SR>Так что ,IMHO, ты изобретаешь велосипед


Да я ничего и не изобретаю, и вряд ли буду. Так, информацией обогощаюсь.
Re[3]: Универсальные события
От: Sergey Rizhkov Россия  
Дата: 07.09.04 07:14
Оценка:
Здравствуйте, mikа, Вы писали:

M>Здравствуйте, Sergey Rizhkov, Вы писали:


SR>>На самомо деле, если расширить требования, например, для событий: join, fork, simple merge, exclusive choose итд, то получится целый workflow , а тут и до BPEL-серверов недалеко


M>Слушаем


Что именно ?

SR>>Так что ,IMHO, ты изобретаешь велосипед


M>Да я ничего и не изобретаю, и вряд ли буду. Так, информацией обогощаюсь.


Обогащаться — это правильно !
Re[4]: Универсальные события
От: mikа Stock#
Дата: 10.09.04 12:16
Оценка:
Здравствуйте, Sergey Rizhkov, Вы писали:

SR>Что именно ?


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

Есть парочка сущностей (для простоты понимания я опишу тот сценарий, о котором упоминал в первом посте)

Закачик
{
  ДобавитьЗаказВКаталог(Заказ заказ)
  {
  }
}

Заказ
{
  Название,
  Стоимость, 
}


Теперь сценарий, когда Закачик смотри в счет после оформления заказа, и, если он превышает некий предел, перепроверяет некоторые сведения.

Закачик
{
  КритическаяСумма Равна 50000 рублей

  ДобавитьЗаказВКаталог(Заказ заказ)
  {
    Если заказ.Стоимость Больше КритическаяСумма
      ПерепроверитьСведения
  }
}


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

Второй способ
заказчик.ДобавитьЗаказВКаталог = СделатьЗаказ

КритическаяСумма Равна 50000 рублей

Если заказчик.ПоследнийЗаказ.Стоимость Больше КритическаяСумма
      ПерепроверитьСведения


Этот подход мне совсем не нравиться, ибо клиентская программа (а это именно ее код) не может ничего знать о таких специфичных вещах, как КритическаяСумма.

Вот, собственно, и описываемая проблема. Жду любые комментарии

SR>Обогащаться — это правильно !


Ну, не совсем, конечно, теоретическое обогащение
Re[5]: Универсальные события
От: Sergey Rizhkov Россия  
Дата: 10.09.04 13:41
Оценка: 36 (1)
Здравствуйте, mikа, Вы писали:

M>Здравствуйте, Sergey Rizhkov, Вы писали:


SR>>Что именно ?


M>Хотел бы услышать, каким именно подходом реализовать описанную мною проблемы. Если не очень понятно, распишу на псевдо коде


M>Есть парочка сущностей (для простоты понимания я опишу тот сценарий, о котором упоминал в первом посте)


M>
M>Закачик
M>{
M>  ДобавитьЗаказВКаталог(Заказ заказ)
M>  {
M>  }
M>}

M>Заказ
M>{
M>  Название,
M>  Стоимость, 
M>}
M>


M>Теперь сценарий, когда Закачик смотри в счет после оформления заказа, и, если он превышает некий предел, перепроверяет некоторые сведения.


M>
M>Закачик
M>{
M>  КритическаяСумма Равна 50000 рублей

M>  ДобавитьЗаказВКаталог(Заказ заказ)
M>  {
M>    Если заказ.Стоимость Больше КритическаяСумма
M>      ПерепроверитьСведения
M>  }
M>}
M>


M>В данном случае логика запрограммирована в классе Закачик. Мне такой подход не нравиться тем, что идет совмещение бизнес-сущностие и бизнес-правил, которое в последствии приведет к загромождению кода сущностей. Ибо, действий очень много, и сами эти действия зависит от многих факторов, которые не всегда ограничиваются параметрами Заказчик.


M>Второй способ

M>
M>заказчик.ДобавитьЗаказВКаталог = СделатьЗаказ

M>КритическаяСумма Равна 50000 рублей

M>Если заказчик.ПоследнийЗаказ.Стоимость Больше КритическаяСумма
M>      ПерепроверитьСведения
M>


M>Этот подход мне совсем не нравиться, ибо клиентская программа (а это именно ее код) не может ничего знать о таких специфичных вещах, как КритическаяСумма.


M>Вот, собственно, и описываемая проблема. Жду любые комментарии



А ну теперь понятнее.
В данном случае мой предыдущий пост не в тему (про workflow), не совсем тебя понял.

Да мешать бизнес-сущности и логику это плохо.
Я бы на вскидку предложил использовать паттерн Стратегия, например:



public interface OrderStrategy {
    
    public void addOrder (Order aOrder) ...
   
}


public class LimitedOrderStrategy implements OrderStrategy {
   
    public void addOrder (Order aOrder) {
        if (aOrder.getPrice() > .... {
            ...кидаешь эксепшн или еще что-то
        } 
    }
   
}


public class UnlimitedOrderStrategy implements OrderStrategy {
   
    public void addOrder (Order aOrder) {
        ..
    }
   
}


public class Order {
}


public class Customer {
    
    public void setOrderStrategy (OrderStrategy aStrategy) ...
   
    public void addOrder (Order aOrder) {
        orderStrategy.addOrder (aOrder) ...
    }    

}




SR>>Обогащаться — это правильно !


M>Ну, не совсем, конечно, теоретическое обогащение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.