Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно структурировать классы, объекты? Надо сделать код под ООП 
:(
    Опции темы
Levbald
Дата 24.6.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.1.2006
Где: Germany/Frankfurt

Репутация: нет
Всего: нет



Привет,


У меня возникла следующая проблема! 

У меня уже есть приложение, написанное на PHP с MySQL! Приложение работает, но постоянно расширяется и все время надо добовлять что-то новое! Суть проблемы, что мне надо переписать приложение с помощью классов и объектов - т.е ООП, но у меня нет в этом опыта и я не знаю как лучше разбивать на классы и объекты (блоки)!

Теперь коротко о приложении:

На самом деле это довольно таки развернутая база по клиентам (адрес, имя и другие свойства)!

Работает это так! Есть скажем проект Х (их может быть много)! Каждый день в течении месяца "советник" может добавлять в календарь "встречи" по определенному проекту X! На эту встречу скажем 2 Октября могут прийти другие "советники", а также клиенты! Для каждого клиента ведется запись - подписал ли он договор или нет! А потом в конце месяца можно из базы данных генерировать отчет!

Проблема в том что только "советники" могут управлять приложением! Для этого я хочу сделать сессии и вход с паролем! Соотвественно мне надо, чтобы "советнику У" показывася скажем только его проект X, а не все сразу!

Все это уже работает, но довольно неудобно! 

Буду рад помощи и советам, как все это организовать и разбить, чтобы было ООП!

Заранее спасибо!

Еще добавлю взаимосвязь

- советник может иметь много клиентов
- в один день ( скажем 02.10.2008) на уровне проекта X  может быть назначено несколько встреч с разными клиентами,
- советник может иметь несколько проектов
- клиент имеет много свойств! Например можно узнать когда были встречи, с какими советниками и подписал ли клиент договор
 

Это сообщение отредактировал(а) Levbald - 24.6.2008, 21:00
PM MAIL   Вверх
skyboy
Дата 24.6.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



это учебная задача и надо по максимуму  "классов и объектов" или все же надо рабочая и достаточно легкая в модификации/расширении/сопровождении система?
PM MAIL   Вверх
Levbald
Дата 24.6.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.1.2006
Где: Germany/Frankfurt

Репутация: нет
Всего: нет



Опять же приходится писать довольно таки много запросов к базе данных и запросы довольно таки однотипные!
И еще одна проблема в том что сейчас приложение построено на многоуровневых for и while + array (много данных) что конечно не может не тормозить!

Поэтому хочу использовать классы и объекты!


Это сообщение отредактировал(а) Levbald - 24.6.2008, 21:24
PM MAIL   Вверх
Levbald
Дата 24.6.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.1.2006
Где: Germany/Frankfurt

Репутация: нет
Всего: нет



Цитата(skyboy @ 24.6.2008,  21:05)
это учебная задача и надо по максимуму  "классов и объектов" или все же надо рабочая и достаточно легкая в модификации/расширении/сопровождении система?

Это рабочая задача, которая должна быть легкая в модификации/расширении/сопровождении!
С проблемой столкнулся когда надо было сделать так чтобы после авторизации каждому советнику показывались только его проекты, клиенты и.т.д! А это опять набор из for и while! Очень не удобно!

Добавлено @ 21:26
Сейчас примерно покажу как это выглядет!

Заходишь на страницу! 

Скажем месяц - Июнь

Проект           Число   1         2     3     4     5   6   7   8   9  10   11    12   13    14    15   16 .....   30
                                 День   Воскр  Пн   Вт    Ср  Чт  Пт.....
 
Проект1                                  (Пн - встреча1,
                                                    встреча2)



Проект2                                                                                        (12 Число Встреча1, Встреча2)



Проект3


Т.е это таблица! И мне теперь надо, что бы советнику Х был виден только проект 1, это можно сделать, но со временем код получается ужасно большой и довольно трудно быстро что-то найти и изменить!

Это сообщение отредактировал(а) Levbald - 24.6.2008, 21:39
PM MAIL   Вверх
Levbald
  Дата 24.6.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.1.2006
Где: Germany/Frankfurt

Репутация: нет
Всего: нет



Есть у кого-нибудь пару идей, советов? 
PM MAIL   Вверх
Feldmarschall
Дата 24.6.2008, 22:53 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



сами по себе "классы, объекты" тебе не помогут. и код волшебным образом читабельным не сделают.
освоить ООП - это значит забыть все свои знания языка, и учиться заново. причем - не обязательно с положительным результатом. ООП не всем дается.

Это сообщение отредактировал(а) Feldmarschall - 24.6.2008, 22:54
PM   Вверх
Glip
Дата 24.6.2008, 23:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



Levbald,  ну вы же сами все и описали в так называемых User Story. у вас там в принципе прослеживаются классы "Проект" "Советник", может быть что-то еще, а может быть получатся совершенно другие. Поищите информацию по Объектно Ориентированному Проектированию, выберите для себя подходящие инструмены, благо их сейчас полно в том числе и опенсорс. Мне кажется у вас не плохая задача для изучения теории и применения её на практике.


--------------------
user posted image
PM MAIL   Вверх
Levbald
Дата 25.6.2008, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.1.2006
Где: Germany/Frankfurt

Репутация: нет
Всего: нет



Цитата(Glip @ 24.6.2008,  23:01)
Levbald,  ну вы же сами все и описали в так называемых User Story. у вас там в принципе прослеживаются классы "Проект" "Советник", может быть что-то еще, а может быть получатся совершенно другие. Поищите информацию по Объектно Ориентированному Проектированию, выберите для себя подходящие инструмены, благо их сейчас полно в том числе и опенсорс. Мне кажется у вас не плохая задача для изучения теории и применения её на практике.

Спасибо, за совет! Я тут посидел подумал... В голове что-то сложилось! Попробую сделать! Если что-то получится или не получится опишу здесь! 

Но все таки какие-нибудь принципы - например от чего плясать хотелось бы услышать!

Я себе пока это так представляю:


объект клиент -  наследует объект советник - наследует объект встреча - наследует объект день (пример 10.02.2008) - наследует объект проект!

Другими словами "клиент" наследует все свойства, вышестоящих классов (родителей)! Вот так я себе это пока представляю!
PM MAIL   Вверх
skyboy
Дата 25.6.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



нет. неверно. иерархия классов должна соответствовать либо абстрациям реального мира(например, "ВАЗ 2101" как подкласс "легкового автомобиля"), либо следовать логике модели. наследование "встреча - наследует день" мне кажется притянутой не только за уши.
мой взгляд: мало того, что Feldmarschall абсолютно все верно сказал и ООП не панацея, при продемонстрированном опыте работы в ООП система у тебя получится на порядок менее читаемой, чем в функционально-процедурном стиле. Именно потому, что для тебя это будет вроде учебного задания, в котором бушь вникать в разные тонкости. потому если тебе дорого время и нет желание потом эту систему переписывать с нуля, делай в том стиле, как ты привык.
в общем случае, замечу, что наследование определяет абстрагирование. т.о. "советник" и "клиент" будут наследовать "учасник". а для "учасника" будет определно назначение встречи. впрочем, можно и интерфейсами обойтись, все равнореализация будет разной.
наследование "днем" класса "проект" кажется мне кошмаром в ООП: абсолютно несвязанные между собой сущности.
PM MAIL   Вверх
Glip
Дата 25.6.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 7
Всего: 18



Цитата(skyboy @  25.6.2008,  09:41 Найти цитируемый пост)
нет. неверно. иерархия классов должна соответствовать либо абстрациям реального мира(например, "ВАЗ 2101" как подкласс "легкового автомобиля"), либо следовать логике модели

полностью поддерживаю.

Цитата(Levbald @  25.6.2008,  02:26 Найти цитируемый пост)
например от чего плясать хотелось бы услышать!

плясать от того что происходит в реальной жизни.


--------------------
user posted image
PM MAIL   Вверх
Feldmarschall
Дата 25.6.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Главная несуразность данного вопроса заключается в том, что проблема, озвученная автором, касается только вывода данных.
Не структуры приложения, не потоков данных, а вывода.
А вывод в веб-приложении все равно делается через шаблонизатор, логика которого не объектная.
PM   Вверх
bobik02
Дата 25.6.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 26.11.2007

Репутация: 2
Всего: 14



Советую вникать в ООП, постепенно (Купить книжек, читать статьи, учить, использовать и т.к. и т.п.), заметил такую осбоненость что многие книги пишут что такое полиморфизм,инкапсуляция, наследование и другие "забавные вещи", не объясняя почему эти возможности существуют. Я вообще это считаю(пока!) способом организации программы (сказанно на коленке smile )


--------------------
Have a nice day
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0831 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.