Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для zontik24
36 / 33 / 10
Регистрация: 14.06.2013
Сообщений: 432

Модульное программирование на php

08.12.2016, 15:25. Показов 2047. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу веб-приложения с помощью шаблона MVC, недавно столкнулся с концепцией модульного программирования

Нашел такое мнение:
"Написал работающую функцию (процедуру) закинул её в модуль и забыл о её реализации"

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

Еще вопрос: каким образом оптимально связать MVC и модульное программирование, если это целесообразно

Выскажите свое мнение по этому поводу
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2016, 15:25
Ответы с готовыми решениями:

Выполнить программирование: модульное, без модульное
Буду премного благодарен если поможете с этими задачами.

Модульное программирование
Привет форумчане! В общем, решил сделать модуль с 3-мя ф-циями: mod.h void ChangeNumber(sport * obj, int n); void...

Модульное программирование
Задание: Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над одномерными массивами: 1) заполнение массива; ...

12
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.12.2016, 17:26
Цитата Сообщение от zontik24 Посмотреть сообщение
по концепции модульного программирования мне нужно разбить по 3-м отдельным файлам(модулям) эти методы
Почему вы решили, что нужно разбивать?

Цитата Сообщение от zontik24 Посмотреть сообщение
каким образом оптимально связать MVC и модульное программирование
Наверное композер.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
08.12.2016, 18:39
Цитата Сообщение от Jodah Посмотреть сообщение
Наверное композер.
оО это же просто пакетный менеджер.

Я тоже эксперементирую в этом направлении. Пока так:
1) модули храню в папке modules
2) каждый модуль эта папка с нужными классами.
3) модули вызываю из контроллера, остальные слои приложения стараюсь из контроллера не дергать.
4) методы модулей выполняют свою задачу и возвращают true/false. В случае ошибки достаю ее отдельно через метод getError.
5) пока что все модули статические
1
 Аватар для zontik24
36 / 33 / 10
Регистрация: 14.06.2013
Сообщений: 432
08.12.2016, 18:58  [ТС]
tarasalk, спасибо, хотел видеть ответ в таком формате

По поводу пункта 4: а если задача состоит в возвращении структуры, к примеру? Или вы геттеры используете здесь?

Кстати, неплохая статья:
http://structuralist.narod.ru/... hesion.htm
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
08.12.2016, 20:05
Цитата Сообщение от zontik24 Посмотреть сообщение
По поводу пункта 4: а если задача состоит в возвращении структуры, к примеру? Или вы геттеры используете здесь?
Возвращаю структуру, пустую коллекцию, либо null. Вообще по ситуации, пока еще не пришел к однозначному решению.

1) в самых простых случаях беру сразу из модели, благо есть ORM
2) в средних случаях из репозитория
3) в сложных из модуля.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.12.2016, 21:01
Цитата Сообщение от tarasalk Посмотреть сообщение
оО это же просто пакетный менеджер.
Имел ввиду, что пакет - это модуль, набор классов.

Цитата Сообщение от tarasalk Посмотреть сообщение
2) каждый модуль эта папка с нужными классами.
А как реализуете зависимости между классами?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
10.12.2016, 11:42
Цитата Сообщение от Jodah Посмотреть сообщение
А как реализуете зависимости между классами?
Силами laravel)
Сервис контейнер автоматически создает объект класса, достаточно указать его в качестве параметра для конструктора/метода.

Сейчас такой вариант пробую:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Modules
    User
        Identity
            Forms
                AuthForm.php
                PasswordForm.php
                RegistrationForm.php
            Logic
                Password.php
                Registration.php
    Error
        ...
    Sms
        ...
Формы валидируют данные и управляют логикой.
Ошибки теперь сохраняю в статическом классе Error, чтобы не тянуть их через все слои. Потом в контроллере смотрю есть ли ошибки.
Переносить контроллеры и вьюхи в модули пока смысла не вижу.

Круто было бы если кто то тоже поделился своей структурой.
0
16.12.2016, 11:27

Не по теме:

Цитата Сообщение от tarasalk Посмотреть сообщение
Круто было бы если кто то тоже поделился своей структурой.
Жадные все :D

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

0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.12.2016, 12:56
Цитата Сообщение от zontik24 Посмотреть сообщение
когда можно родственные операции объединить в один класс, например, вычисление интегралов методом Симпсона, трапеций и парабол я могу занести в один класс, описав данные методы, но по концепции модульного программирования мне нужно разбить по 3-м отдельным файлам(модулям) эти методы
Лучше объявить интерфейс с методом "взять интеграл" и создать 3 класса, реализующих данный интерфейс. Вот тебе и "3 файла"
1
100 / 70 / 26
Регистрация: 19.12.2014
Сообщений: 332
19.12.2016, 02:55
Знаю что навлеку на себя шквал критики, но выскажу своё мнение. Просто чтобы знали, что такое мнение тоже есть.

Программисты PHP очень любят свою работу. Они любят её настолько, что никогда не упускают возможности сделать свою жизнь сложнее, чтобы подольше проектировать и писать побольше кода, прежде чем приступить непосредственно к решению поставленной задачи. Поэтому в своём коде они предусматривают всё. Всё, что никогда не потребуется.
Не буду говорить что я профессионал, но по роду деятельности мне доводилось и доводится копаться в огромном количестве php-приложений, написанных иногда гуру, а иногда совсем не гуру. И часто я вижу, что задачу можно было решить проще, а иногда гораздо проще, если убрать пару слоёв абстракции. Да, это будет не модно. Да, нельзя будет радоваться своей крутизне, но это будет работать быстро и эффективно.
Для постройки своих приложений использую свой же движок. В нём "глубина" вложенности классов не превышает трёх. В большинстве случаев 1-2. Для веб-сайтов глубина вложенности по файловой структуре от index.php до самой глубокой точки не превышает 4.
Какие преимущества это даёт? Любой человек сможет разобраться в моём коде за несколько минут. Код работает очень быстро. На проектирование тратится очень мало времени. Количество файлов и строк кода минимально. Отсутствуют подводные камни, когда программист становится заложником структуры и вынужден тратить часы и писать убогие костыли чтобы уложить код в рамках выбранного подхода.
Какие недостатки? Никак нельзя похвалиться тем, что знаком со всеми модными парадигмами. Когда кто-то видит мой код, он всегда говорит "Фу, как просто, это же банальный mvc. Я бы сделал сложнее. Так как ты никто СЕЙЧАС не пишет".

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

Таково моё мнение. Конечно, можно неделю ломать голову над идеальной структурой, а можно за один день решить задачу и перейти к следующей. Я выбираю второй путь.
1
 Аватар для ProCode
37 / 37 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
19.12.2016, 08:42
cia, сразу видно реального писаку! -)

Согласен полностью.

Я как раз недавно примерно о том же подумал в контексте dbal.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
19.12.2016, 09:33
cia, согласен частично.

Цитата Сообщение от cia Посмотреть сообщение
На проектирование тратится очень мало времени.
Если мы говорим о чём-то простом вроде блога/визитки/магазина, там проектировать особо нечего.

Цитата Сообщение от cia Посмотреть сообщение
Количество файлов и строк кода минимально.
Лично для меня наглядность важней. Т.е. лучше 10 файлов с чётко разграниченными задачами, чем 1 винегрет из всего и вся.

Цитата Сообщение от cia Посмотреть сообщение
Отсутствуют подводные камни, когда программист становится заложником структуры и вынужден тратить часы и писать убогие костыли чтобы уложить код в рамках выбранного подхода.
Только если программист неопытен и сам создал себе кривую структуру. Тогда это можно назвать процессом обучения, а не минусом конкретного подхода.

Цитата Сообщение от cia Посмотреть сообщение
Я не хочу сказать, что модульный или иной шаблон - это зло.
Что вы имеете ввиду под шаблоном?

Цитата Сообщение от cia Посмотреть сообщение
Конечно, можно неделю ломать голову над идеальной структурой, а можно за один день решить задачу и перейти к следующей. Я выбираю второй путь.
Странное разделение. Мне кажется логичным сначала один раз придумать идеальную структуру (как минимум для типовых задач), а затем идти по второму пути. У вас же тоже есть своя структура, и вряд ли вы её придумали в 1-ый день изучения PHP.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
19.12.2016, 10:14
Цитата Сообщение от cia Посмотреть сообщение
но это будет работать быстро и эффективно... использую свой же движок. В нём "глубина" вложенности классов не превышает трёх
Не думаю что это заслуга именно малой глубины вложенности. У меня 1кк объектов создаются за 0.1 сек. Это ничтожно мало, чтобы на них экономить.
Цитата Сообщение от cia Посмотреть сообщение
Любой человек сможет разобраться в моём коде за несколько минут
Что по вашему понятнее?
PHP
1
$this->oSms->send($phone, $text);
PHP
1
2
3
4
5
6
$url = sprintf('http://smsserver.ru?phone=%s&message=%s', $phone, $message);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
Имхо первый вариант понятней. Мне абсолютно не важно сколько там слоев: curl, curl + guzzle, curl + guzzle + guzzleWrapper... я прочитал одну строчку и все понятно.

Цитата Сообщение от cia Посмотреть сообщение
вынужден тратить часы и писать убогие костыли чтобы уложить код в рамках выбранного подхода
Плохая архитектура, вот и все. Я к примеру на ларавел пишу, и никто не мешает там писать хоть в контроллере, хоть сразу в роутере.
Отдельные модули кстати сильно помогают. Я вызываю модуль из контроллера и все. Сам модуль может быть как в 1 слой, так и в 10. Связи с другими модулями минимальны.
Цитата Сообщение от cia Посмотреть сообщение
а можно за один день решить задачу и перейти к следующей
А через неделю вернуться к этой задачи и потратить еще день, вместо часа.

Цитата Сообщение от cia Посмотреть сообщение
Знаю что навлеку на себя шквал критики, но выскажу своё мнение. Просто чтобы знали, что такое мнение тоже есть.
Все норм) Аргументы немного не те. Преимущество описанного вами подхода в том, что такой код можно писать гораздо быстрее, но при росте проекта такой код становится ужасным.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2016, 10:14
Помогаю со студенческими работами здесь

модульное программирование
Модуль. реализовать набор подпрограмм для работы с векторами: сложение, вычитание, вычисление длины вектора, скалярное произведение...

Модульное программирование
Прошу помощи в решении моей задачи.Заранее благодарен. "Модульное программирование" Примечание. Разместить определение...

модульное программирование
Народ я тут прилягу написал по своей лабе но у меня проблема она не запускаеться вот кидает эти ошибки хелп плиз это...

Модульное программирование
Есть задача по модульному программированию. Некоторые действия выполняются в case1, case2, case3, case4 в зависимости от выбранной задачи....

Модульное программирование
Вот решение задачи: Program matrix_; uses crt; const n=5; type Tmatr=array of real; {Процедура ввода элементов матрицы} ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru