Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 В каких случаях надо выносить функционал в отдельный модуль?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Вот у меня есть Delphi-проект, хочу правильно его разделить на модули, чтоб в будущем избежать “лапшу” из кода.
Т.е. должны быть какие-то принципы?
Например, пишу новую функцию и новый класс, это надо в общую кучу или в отдельный модуль?

Уважаемые Delphi гуру, поделитесь своим богатым опытом.
1 апр 19, 17:34    [21849214]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Надо разделять код по функциональному смыслу. Когда они совершенно A - B < 0 то разделять.
1 апр 19, 17:40    [21849220]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4522
Artem.1st,

Основам программирования ООП Вас навряд ли учить будут.
Я бы посоветовал детально изучить следующие вопросы:
http://www.maksakov-sa.ru/TehProgram/ObOrientProgr/PrincipOOP/index.html
http://www.codenet.ru/progr/cpp/ipn.php
Ну, а потом: на сколько мозгов хватит... (тех, что в черепной коробке )
1 апр 19, 17:42    [21849224]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
High.Programer
Member [заблокирован]

Откуда:
Сообщений: 22
Artem.1st
Delphi гуру, поделитесь своим богатым опытом.

Можно я поделюсь богатым Java-опытом.
В Java есть четкое правило: Каждый класс описывается в отдельном модуле(файле).
Что мешает в Delphi так делать?
1 апр 19, 17:58    [21849237]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
High.Programer
Member [заблокирован]

Откуда:
Сообщений: 22
Gerasimenko
Основам программирования ООП Вас навряд ли учить будут.
...
http://www.maksakov-sa.ru/TehProgram/ObOrientProgr/PrincipOOP/index.html
http://www.codenet.ru/progr/cpp/ipn.php

... и даны две ссылки где именно "Основы ООП"
Сочувствую Автора топика, ведь он спрашивал про delphi-модули, а не про ООП.
)
1 апр 19, 18:05    [21849240]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Maxim.K
Member

Откуда:
Сообщений: 15
Artem.1st
хочу правильно его разделить на модули, чтоб в будущем избежать “лапшу” из кода.

Хорошая тема.
Попробую немного подсказать. Delphi-модуль управляет видимостью программных сущностей(идентификаторов). Т.е. вынося класс в отдельный модуль мы ограничиваем его видимость. Как класс инкапсулирует поля и методы, так и Delphi-модуль инкапсулирует свое содержимое.
А какие "принципы" это надо вникать, уверен, тема уже обсуждалась...
1 апр 19, 18:18    [21849262]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Василий 2
Member

Откуда:
Сообщений: 757
High.Programer
Artem.1st
Delphi гуру, поделитесь своим богатым опытом.

Можно я поделюсь богатым Java-опытом.
В Java есть четкое правило: Каждый класс описывается в отдельном модуле(файле).
Что мешает в Delphi так делать?

Мешает то, что это ересь неудобная. Тысячи модулей, по которым прыгаешь туда-сюда.
1 апр 19, 18:46    [21849305]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
High.Programer
Member [заблокирован]

Откуда:
Сообщений: 22
Василий 2
ересь неудобная. Тысячи модулей, по которым прыгаешь туда-сюда.

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

Похоже, что автор этого топика(delphi-программист) наткнулся на проблему, как правильно разделять функционал delphi-программы на модули(т.е. на файлы). А в Java такой проблемы нет, т.к. java-программа делится на классы. С классами все понятно из ООП , а вот что делать с delphi-файлами(которые называются модулями) ... Интересно, хоть кто-нибудь сможет дать адекватный ответ.
1 апр 19, 19:20    [21849335]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Dimonka
Member

Откуда:
Сообщений: 1178
Василий 2
High.Programer
пропущено...Можно я поделюсь богатым Java-опытом.
В Java есть четкое правило: Каждый класс описывается в отдельном модуле(файле).
Что мешает в Delphi так делать?
Мешает то, что это ересь неудобная. Тысячи модулей, по которым прыгаешь туда-сюда.

Смысл в разделении классов на файлы в жабе может и есть. Просто там сажают по одному жабисту на каждый класс и всё получается написать быстро и весело. :-)
Для Delphi это не так актуально потому, что на третьем классе дельфисты (или бюджет) заканчиваются. Поэтому и на файлах можно тоже сэкономить.
1 апр 19, 19:29    [21849351]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
ёёёёё
Member

Откуда:
Сообщений: 1002
Василий 2
High.Programer
пропущено...

Можно я поделюсь богатым Java-опытом.
В Java есть четкое правило: Каждый класс описывается в отдельном модуле(файле).
Что мешает в Delphi так делать?

Мешает то, что это ересь неудобная. Тысячи модулей, по которым прыгаешь туда-сюда.

Мешает то, что в дельфи такое просто невозможно. Два класса, разнесенных по разным модулям и ссылающиеся один на другой в интерфейсной секции, вызывают бунт компилятора ("циклические ссылки"). Например, класс-контейнер и класс-элемент контейнера.
Поэтому обычно приходится все сваливать в одно файло (в рамках модуля ограничения видимости ООП не действуют). Или в качестве типа в интерфейсной части использовать безтиповой указатель или общий предок (TObject хоть), а в реализации ручками приводить к нужному типу.
Особенность такая.
Зато в дельфи можно быстро накидать батонов и гридов, а в яве - небыстро.
1 апр 19, 19:43    [21849371]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1579
Если у вас монолит, то: Сначала разбиваете на слои. Например: слой отображения, слой домена, слой хранения.
Затем каждый слой делится на подслои: слой отображения делится на view и presenter. Слой домена содержит бизнес-объекты и бизнес-логику. Слой храгения отвечает за то где будут данные: бд, файлы, кеш, сервисы.
Ну и затем уже внутри подслоев разбиваете по модулям.
Если на проекте будет 5+ разработчиков и измений будет много, то потом проще сопровождать и расширять.
1 апр 19, 19:47    [21849378]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
X-Cite
разбиваете на слои... отображения, домена, хранения. Затем на подслои...

Выглядит весьма логично, большое спасибо за идею.
Я поищу информацию в этом нарпавлении.
1 апр 19, 22:04    [21849482]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4010
Чем меньше в программе модулей - тем сильнее и быстрее разростаются те, что есть. И тем сложнее их потом разделить.
Не надо бояться разделять модули. Их потом легче будет использовать отдельно. Хотябы потому, что меньше текста.
До абсурда доводить тоже не стоит, конечно - не надо на каждый класс отдельный модуль.
Но если функционал каких-то объектов реально различается в любом смысле (имеет какую-либо независимость) - хорошо, если он разделен.
1 апр 19, 22:09    [21849486]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1579
Artem.1st,

https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
Есть довольно неплохая статья https://habr.com/ru/company/mobileup/blog/335382/

Ну и вообще у Фаулера можно много чего почитать и поучиться
https://martinfowler.com/tags/application architecture.html
1 апр 19, 22:18    [21849495]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1579
И вдогонку если у вас Enterprise решения с неограниченными(почти) ресурсами
https://blog.cleancoder.com/uncle-bob/2014/10/01/CleanMicroserviceArchitecture.html
1 апр 19, 22:20    [21849496]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
X-Cite,
Именно эту информацию я ищу.
Спасибо за ссылки.
1 апр 19, 22:37    [21849512]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Что в java, что в delphi это namespace
1 апр 19, 23:14    [21849542]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3370
High.Programer,

автор
Можно я поделюсь богатым Java-опытом.
В Java есть четкое правило: Каждый класс описывается в отдельном модуле(файле).
Что мешает в Delphi так делать?


У нас одна либа переписана с примерно двух тысяч файлов на плюсах, где вот как раз так - каждый класс отдельно на примерно 5 файлов.
В плюсах я на примерно тридцатом открытом файле в цепочке запутался окончательно. К счастью, в Delphi такого идиотства нет.
2 апр 19, 00:52    [21849588]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58940
Блог
Artem.1st
Вот у меня есть Delphi-проект, хочу правильно его разделить на модули

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

Artem.1st
Т.е. должны быть какие-то принципы?

Общий принцип - учёт связей. Каждое место, где одна функция вызывает другую, где один класс так или иначе ссылается на другой - это связь. Так вот, наиболее общий принцип в том, что сильно связанные вещи должны лежать вместе, а слабо связанные - отдельно. Если визуализировать составляющие программы и их связи в виде графа, то один модуль должен накрывать "плотный клубок", кластер из связанных друг с другом составляющих, относительно слабо привязанных к остальной программе.

High.Programer
В Java есть четкое правило: Каждый класс описывается в отдельном модуле(файле).

Во-первых, это неправда.

High.Programer
Что мешает в Delphi так делать?

Головной мозг, присутствующий в черепной коробке.
2 апр 19, 01:05    [21849593]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
High.Programer
Member [заблокирован]

Откуда:
Сообщений: 22
makhaon
я на примерно тридцатом открытом файле в цепочке запутался окончательно.

Т.е. вы работаете с 30 окрытыми файлами?
Мне так жаль, что спешу подсказать: Из этих 30 файлов целых 27 вы открыли напрасно, закройте лишние!
Архитектура программы должна иметь иерархический вид. Для конретной задачи достаточно пройтись по узлам нужной ветки, а не открывать все дерево.
2 апр 19, 07:45    [21849658]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 545
High.Programer
makhaon
я на примерно тридцатом открытом файле в цепочке запутался окончательно.

Т.е. вы работаете с 30 окрытыми файлами?
Мне так жаль, что спешу подсказать: Из этих 30 файлов целых 27 вы открыли напрасно, закройте лишние!
Архитектура программы должна иметь иерархический вид. Для конретной задачи достаточно пройтись по узлам нужной ветки, а не открывать все дерево.
Ммм, очередной "гуру" :-)
2 апр 19, 09:02    [21849695]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3370
asutp2,

угу. очередной гуру по ходу либа - сторонняя. написана она вполне себе слоями. колл-стэк вызова разбросан по 30-ти файлам, и концов там найти было почти невозможно. спасибо, кушайте свои идеи (один класс - один файл) сами, смотрите не подавитесь.
2 апр 19, 09:21    [21849705]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
softwarer
Общий принцип - учёт связей. Каждое место, где одна функция вызывает другую, где один класс так или иначе ссылается на другой - это связь. Так вот, наиболее общий принцип в том, что сильно связанные вещи должны лежать вместе, а слабо связанные - отдельно. Если визуализировать составляющие программы и их связи в виде графа, то один модуль должен накрывать "плотный клубок", кластер из связанных друг с другом составляющих, относительно слабо привязанных к остальной программе.

"Учёт связей" - похоже, это ценная информация сильно облегчит построение архитектуры программы. Я могу лишь примерно "подозревать" о методиках и принципах, а Вы раскладываете по полочкам.
Спасибо.
2 апр 19, 09:26    [21849710]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3370
Artem.1st,

X-Cite вот всё хорошо расписал. добавлю, что чем меньше между слоями связей, тем лучше. связи должны быть оправданы и продуманы.
2 апр 19, 09:29    [21849712]     Ответить | Цитировать Сообщить модератору
 Re: В каких случаях надо выносить функционал в отдельный модуль?  [new]
Василий 2
Member

Откуда:
Сообщений: 757
На самом деле это процесс живой, итеративный. С ростом кода выделяются логические блоки и почкуются модули. Грубо говоря, поначалу есть пара утилиток в модуле главной формы. Потом их становится пять, и они просятся в отдельный модуль. Потом их уже двадцать, часть отвечает за файлы, часть - за БД, и вот у нас уже два модуля утилит. И т.п.
А мельчение я невзлюбил еще с тех пор, когда в универе изучали Паскаль и Си параллельно, и на Сях для простейшего printf надо было подключать ДВА инклюда
2 апр 19, 10:31    [21849766]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить