Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите спроектировать

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: 2 сущности. Продукты и Страховые Компания
Djos
Отправлено: 28 Ноября, 2013 - 10:14:13
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Есть 2 сущности. Продукты(Product) и Страховые Компания(Insurer). В их связки образуется Договор.
Договор нужно сначала Посчитать(Calculator), потом Сохранить(Save).
Сохранение может быть как у Продукта, так и у Страховой Компании.

Помогите спроектировать.
На картинке нарисовал к чему я пришел, но думаю есть и куда лучше вариант реализации.
Прикреплено изображение (Нажмите для увеличения)
uml.jpg
 
 Top
AmsTaFF
Отправлено: 29 Ноября, 2013 - 14:36:40
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




я бы посоветовал отдать ответственность за сохранение договора какой-нибудь одной сущности.
Что из себя представляет Save? Calculator? что он считает? Какие данные нужны? Почему договор могут сохранять 2 сущности?

P.S. что продукт может сохранять договор...
P.P.S. откуда такие абстракции? почему они без методов?
 
 Top
Djos
Отправлено: 02 Декабря, 2013 - 07:35:50
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Есть 3 продукта ( П1, П2, П3 ), и 2 Страховые компания( СК1, СК2 ).
Если брать их по отдельности, они сущности и нечего из себя не представляют.
Если взять связку П1 + CК1 то получим договор по Продукту 1 у Страховой компании 1 или П1 + СК2.
Связка может быть любая, главная чтоб были 2 сущности П и СК.

Можно начать оформление договора с 1-й из сущности, но когда доходим до Расчета должна быть известна 2-ая сущность.
Получается чтоб Рассчитать договор нужно связка П и СК, так же и с Сохранением.

AmsTaFF пишет:
я бы посоветовал отдать ответственность за сохранение договора какой-нибудь одной сущности.

По подробнее.

AmsTaFF пишет:
Что из себя представляет Save? Calculator? что он считает? Какие данные нужны? Почему договор могут сохранять 2 сущности?

Расчет( Calculator ) - считает стоимость договора. Расчет может полностью на нашей стороне или на стороне СК.
Сохранение( Save ) - сохраняет договор. Сохранение происходит на нашей стороне, и на стороне СК.

AmsTaFF пишет:
P.S. что продукт может сохранять договор...
P.P.S. откуда такие абстракции? почему они без методов?

1. Не понял.
2. Учусь.

(Отредактировано автором: 02 Декабря, 2013 - 07:36:10)

 
 Top
AmsTaFF
Отправлено: 03 Декабря, 2013 - 11:42:09
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




Djos пишет:
Если взять связку П1 + CК1 то получим договор по Продукту 1 у Страховой компании 1 или П1 + СК2.
Связка может быть любая, главная чтоб были 2 сущности П и СК.


Почему бы вам не внести ещё одну сущность Договор Д1? он как раз будет связывать две сущности П1+СК2

и почему не сделать что-то типа такого:
PHP:
скопировать код в буфер обмена
  1. $dogovor = new Dogovor($product, $company);


Насчет
AmsTaFF пишет:
я бы посоветовал отдать ответственность за сохранение договора какой-нибудь одной сущности.

Это относилось к
Djos пишет:
Сохранение может быть как у Продукта, так и у Страховой Компании

И означало что пускай кто-нибудь один класс будет заниматься этим делом, а не оба. Т.к. это повлечет копирование кода и прочие прелести

Djos пишет:
Расчет( Calculator ) - считает стоимость договора. Расчет может полностью на нашей стороне или на стороне СК.
Сохранение( Save ) - сохраняет договор. Сохранение происходит на нашей стороне, и на стороне СК.

Составьте интерфейс этих двух классов, какие у них будут методы, что они будут принимать, что возвращать.
AmsTaFF пишет:
P.S. что продукт может сохранять договор...

Сам не помню почему такой текст получился
Djos пишет:
2. Учусь.

Тогда напишите пожалуйста с методами (открытых будет достаточно)
 
 Top
Djos
Отправлено: 03 Декабря, 2013 - 15:40:12
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




AmsTaFF пишет:
Djos пишет:
Если взять связку П1 + CК1 то получим договор по Продукту 1 у Страховой компании 1 или П1 + СК2.
Связка может быть любая, главная чтоб были 2 сущности П и СК.


Почему бы вам не внести ещё одну сущность Договор Д1? он как раз будет связывать две сущности П1+СК2

и почему не сделать что-то типа такого:
PHP:
скопировать код в буфер обмена
  1. $dogovor = new Dogovor($product, $company);



Получается у сущность Д(Contract) будут методы Расчета и Сохранение, которые в обращаются к своим классам.
Обновил UML картинку, но мне не нравиться реализация Калькулятора и Сохранение.

AmsTaFF пишет:

Djos пишет:
Расчет( Calculator ) - считает стоимость договора. Расчет может полностью на нашей стороне или на стороне СК.
Сохранение( Save ) - сохраняет договор. Сохранение происходит на нашей стороне, и на стороне СК.

Составьте интерфейс этих двух классов, какие у них будут методы, что они будут принимать, что возвращать.


Классы будут содержать вспомогательные функции расчета/сохранение и сам расчет/сохранение. Возвращать будут тип boolean.
PHP:
скопировать код в буфер обмена
  1.  
  2. interface Calculator{
  3.  
  4. /**
  5.  * @return boolead - расчет true/false
  6.  */
  7.     public function calculator ();
  8. }
  9.  
  10. interface Save{
  11.  
  12. /**
  13.  * @return boolead - сохранение успешно true/false
  14.  */
  15.     public function save();
  16. }
  17.  

Прикреплено изображение (Нажмите для увеличения)
product2.png
 
 Top
AmsTaFF
Отправлено: 04 Декабря, 2013 - 10:10:16
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




Djos пишет:
Получается у сущность Д(Contract) будут методы Расчета и Сохранение, которые в обращаются к своим классам.

Почему бы и нет?
Djos пишет:

PHP:
скопировать код в буфер обмена
  1. interface Calculator{
  2.  
  3. /**
  4.  * @return boolead - расчет true/false
  5.  */
  6.     public function calculator ();
  7. }
  8.  
  9. interface Save{
  10.  
  11. /**
  12.  * @return boolead - сохранение успешно true/false
  13.  */
  14.     public function save();
  15. }

предложения и замечания:
1. методы лучше назовите глаголами. С Save::save() все окей, но вот с Calculator::calculator() как-то не очень, лучше назвать calculate
2. В методе Save::save() ещё понятно почему возвращается true/false, но почему у метода Calculator::calculator возвращается true/false?

Вопросы по схеме:
1. Объясните назначение Save_Product, Save_Product_Insurer, Calculator_Product, Calculator_Product_Insurer, Contrac_ProductInsurer. Если это сделано "на будущее" - уберите сейчас же, это усложняет процесс проектирования и разработки, в дальнейшем с помощью тестов, рефакторинга и времени сможете изменить абстракции.
2. Посмотрел внимательнее на схему. Где вы ещё будете использовать интерфейсы Calculator, Save? Может стоит пока убрать их из схемы, чтобы не мешались? (Как и в п.1 все это можно будет вернуть)
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2013 - 10:41:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




AmsTaFF пишет:
и почему не сделать что-то типа такого: $dogovor = new Dogovor($product, $company);
Потому, что потом захочется сделать что-то такое:
PHP:
скопировать код в буфер обмена
  1. $openTag = new htmlOpenTag("div");

Не надо плодить ООП ради ООП.
 
 Top
AmsTaFF
Отправлено: 04 Декабря, 2013 - 14:45:35
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




DeepVarvar пишет:
AmsTaFF пишет:
и почему не сделать что-то типа такого: $dogovor = new Dogovor($product, $company);
Потому, что потом захочется сделать что-то такое:
PHP:
скопировать код в буфер обмена
  1. $openTag = new htmlOpenTag("div");

Не надо плодить ООП ради ООП.

В первом сообщении автора
Djos пишет:
В их связки образуется Договор.

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

(Отредактировано автором: 04 Декабря, 2013 - 14:45:54)

 
 Top
Djos
Отправлено: 04 Декабря, 2013 - 15:08:56
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




AmsTaFF пишет:
предложения и замечания:
1. методы лучше назовите глаголами. С Save::save() все окей, но вот с Calculator::calculator() как-то не очень, лучше назвать calculate
2. В методе Save::save() ещё понятно почему возвращается true/false, но почему у метода Calculator::calculator возвращается true/false?


1. Спасибо, по правил, буду знать.
2. В проекте есть класс кэш, где все храниться, поэтому и не придал значение. Будем возвращать объект CalculatorResult. На схеме нарисовал.

AmsTaFF пишет:
Вопросы по схеме:
1. Объясните назначение Save_Product, Save_Product_Insurer, Calculator_Product, Calculator_Product_Insurer, Contrac_ProductInsurer. Если это сделано "на будущее" - уберите сейчас же, это усложняет процесс проектирования и разработки, в дальнейшем с помощью тестов, рефакторинга и времени сможете изменить абстракции.
2. Посмотрел внимательнее на схему. Где вы ещё будете использовать интерфейсы Calculator, Save? Может стоит пока убрать их из схемы, чтобы не мешались? (Как и в п.1 все это можно будет вернуть)


1. П и СК может быть очень много. Отсюда и решил что будет наследование Д для каждой связки ( типа Д_ПСК ).
Я не понимаю где будет описана логика расчета для каждой связки.
2. Только в Д. Схему изменил.
Прикреплено изображение (Нажмите для увеличения)
product3.png
 
 Top
AmsTaFF
Отправлено: 04 Декабря, 2013 - 15:19:00
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




Djos пишет:
П и СК может быть очень много

В каком смысле много? много разновидностей (например у них там разные расчеты цены, налогов и прочее)?
Djos пишет:
Отсюда и решил что будет наследование Д для каждой связки ( типа Д_ПСК )

Это тупиковый способ. Кол-во классов будет расти в "какой-то там" прогрессии.
Djos пишет:
Я не понимаю где будет описана логика расчета для каждой связки.

Для каждой связки чего? П и СК? какие у них будут связки? в каком смысле связки? Реальный пример в студию, можно словесно, со схемкой красивой было бы лучше, но и без неё можно разобраться.

по схеме:
почему в классе CalculatorResult 3 поля? sum, premium, go, что каждое из них означает? На основании каких и чьих данных производится расчет?
 
 Top
Djos
Отправлено: 04 Декабря, 2013 - 16:00:18
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




AmsTaFF пишет:
Djos пишет:
П и СК может быть очень много

В каком смысле много? много разновидностей (например у них там разные расчеты цены, налогов и прочее)?

Djos пишет:
Отсюда и решил что будет наследование Д для каждой связки ( типа Д_ПСК )

Это тупиковый способ. Кол-во классов будет расти в "какой-то там" прогрессии.
Djos пишет:
Я не понимаю где будет описана логика расчета для каждой связки.

Для каждой связки чего? П и СК? какие у них будут связки? в каком смысле связки? Реальный пример в студию, можно словесно, со схемкой красивой было бы лучше, но и без неё можно разобраться.


Допустим, имеем Продукт1(П1), так же имеем Страховые компания которые его продают( СК1, CК2, СК3 ).
У нас есть 3 СК которые предлагают услуги по П1. У каждой СК своя методика расчета П1.
Расчет делается на нашей стороне или на стороне СК.
Сохранение же на нашей стороне и на стороне СК. Сохранение на нашей стороне по П одинаковое, а у СК у каждого своя и зависит от П.

Д1 = П1 + СК1, Д2 = П1 + СК2, Д3 = П1 + СК3.

AmsTaFF пишет:
по схеме:
почему в классе CalculatorResult 3 поля? sum, premium, go, что каждое из них означает? На основании каких и чьих данных производится расчет?


От калькулятора нужно получить стоимость(premium), сумму(sum) по Д. Данных которые возвращает будет калькулятор я потом допишу.

Я не могу спроектировать, как реализовать связки П и СК.
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Декабря, 2013 - 08:24:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




AmsTaFF пишет:
Сущность уже подразумевается самим автором, так что я предложил её сделать более "реальной". Никаких преград для этого на данном этапе не наблюдается + сложности лишней не вносит
А я не только Вам, но и ему.
(Добавление)
AmsTaFF пишет:
Это тупиковый способ. Кол-во классов будет расти в "какой-то там" прогрессии.
Ну вот, уже началось Закатив глазки
 
 Top
AmsTaFF
Отправлено: 05 Декабря, 2013 - 08:35:20
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




Djos пишет:
Расчет делается на нашей стороне или на стороне СК.

Это как так на нашей или на стороне СК? Подробнее.
Djos пишет:
У каждой СК своя методика расчета П1.

т.е. для каждого товара каждая страховая компания будет иметь свой метод расчета (примерно: "кол-во П = N" * "кол-во СК = M", т.е. любое добавление товара повлечет за собой добавление M методов расчета. )? Можно ли какой-нибудь жизненный пример, чтобы лучше разуметь сие.

+ расскажите ещё подробнее что за продукты, и что за страховые компании. Сколько продуктов? Если их 3, например: автомобиль, дом, жизнь человека - то можно сделать просто, если наименований большие, то просто не получится

Djos пишет:
Сохранение же на нашей стороне и на стороне СК. Сохранение на нашей стороне по П одинаковое, а у СК у каждого своя и зависит от П.

Что ещё за разные стороны? Рассказывайте все в подробностях как у вас происходит работа (вы пишите для предприятия какого-нибудь?). Прошу рассказать, т.к. для дальнейшего проектирования текущих знаний недостаточно.

Djos пишет:
стоимость(premium), сумму(sum) по Д

как вы отличаете два слова "стоимость", и "сумма"? и почему "стоимость" названа "premium"? а не ... "cost" например?

Djos пишет:
Я не могу спроектировать, как реализовать связки П и СК.

разберемся подробнее чем они являются и попробуем что-нибудь спроектировать
(Добавление)
DeepVarvar пишет:
AmsTaFF пишет:
Сущность уже подразумевается самим автором, так что я предложил её сделать более "реальной". Никаких преград для этого на данном этапе не наблюдается + сложности лишней не вносит
А я не только Вам, но и ему.
(Добавление)
AmsTaFF пишет:
Это тупиковый способ. Кол-во классов будет расти в "какой-то там" прогрессии.
Ну вот, уже началось Закатив глазки

Всмысле опять "ООП ради ООП"?
 
 Top
Djos
Отправлено: 05 Декабря, 2013 - 11:03:35
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




AmsTaFF пишет:
Djos пишет:
Расчет делается на нашей стороне или на стороне СК.

Это как так на нашей или на стороне СК? Подробнее.

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

AmsTaFF пишет:
Djos пишет:
У каждой СК своя методика расчета П1.

т.е. для каждого товара каждая страховая компания будет иметь свой метод расчета (примерно: "кол-во П = N" * "кол-во СК = M", т.е. любое добавление товара повлечет за собой добавление M методов расчета. )? Можно ли какой-нибудь жизненный пример, чтобы лучше разуметь сие.

Да, но не все СК предоставляют услуги по П.
Например из примера выше. П1 есть у СК1, СК2 и СК3. А П2 есть только у СК1 и СК3.

AmsTaFF пишет:
+ расскажите ещё подробнее что за продукты, и что за страховые компании. Сколько продуктов? Если их 3, например: автомобиль, дом, жизнь человека - то можно сделать просто, если наименований большие, то просто не получится

Продукты Каско, Осаго, Даго и т.д.. У Осаго расчет один для всех, так требует государство наше. Каско, Даго и т.д. расчет будет зависит от тарифах СК.

AmsTaFF пишет:
Djos пишет:
Сохранение же на нашей стороне и на стороне СК. Сохранение на нашей стороне по П одинаковое, а у СК у каждого своя и зависит от П.

Что ещё за разные стороны? Рассказывайте все в подробностях как у вас происходит работа (вы пишите для предприятия какого-нибудь?). Прошу рассказать, т.к. для дальнейшего проектирования текущих знаний недостаточно.

То же, делаем интеграцию по передачи данных в СК, протокол обмена данных SOAP, и сохраняем так же себя. Для статистики.

AmsTaFF пишет:
Djos пишет:
стоимость(premium), сумму(sum) по Д

как вы отличаете два слова "стоимость", и "сумма"? и почему "стоимость" названа "premium"? а не ... "cost" например?

Ошибся. Калькулятор возвращает премию и сумму. Премия - сколько нужно заплатить за договор.

DeepVarvar пишет:
Не надо плодить ООП ради ООП.

Я правильно понимаю, что вы якобы намекаете что я фигней страдаю? Можно по подробнее?

(Отредактировано автором: 05 Декабря, 2013 - 11:05:27)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB