|
|
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Я в одной книжке прочитал, что нехорошо мешать в кучу эти три вида "логики", поскольку такой стиль затрудняет сопровождение. И автор советует всегда их разделять. В той книге был такой пример. Предположим, надо покрасить какие-то суммы выше какой-то величины красным цветом. Если прямо в интерфейсе прописать эту границу, то получится, что интерфейс осведомлен о бизнес-правиле, что считается делом нехорошим, поскольку интерфейс про бизнес-логику знать ничего не должен. Типа в этом случае интерфейс должен спросить бизнес-логику "А числа выше какой границы красить". Имея нехорошую привычку мешать все в кучу в модулях форм, мне бывает непросто определить, как правильно разнести эти три вида кода. Если у кого есть успехи в данном деле, поделитесь опытом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2004, 17:25 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
У меня опыта мало, но меня учили так: представь, что завтра та же программа будет работать с другой базой (совсем другой синтаксис обращений к данным) и с другим интерфейсом (совсем другой синтаксис обращений к экрану). Соответственно, писать надо так, чтобы было как можно проще эти две вещи найти в программе и заменить на другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2004, 20:13 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Хотя в Аксессе это крайне сложно, потому что форма сразу выводит данные на экран, минуя всякую бизнес-логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2004, 20:15 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч, Сижу, пробую создать псевдообъектноориетированный код. Получается такой изврат. Предположим, по нажатию кнопки что-то должно происходить. Из модуля формы программа сразу идет в глобальный модуль, где расположена основная программа. Код, связанный с интерфейсом формы вынесен в отдельную функцию и разбит метками на секции, чтоб легче было вызывать. Из основного куска кусок кода интерфейса вызвается типа такого call Forms.MyFrmName.InterfaceX(1) 1- метка секции. Разбить функцию на части мне показалось как-то удобнее, чем делать несколько функций и процедур. Получается, как бы вызываешь метод класса в ОО-языках. Ну и с методами хранения наподобие, неудобно только, что все функции сваливаются в кучу, а не прячутся внутри классов, как в ОО-языках. Читать код стало вроде бы полегче, чем одну простыню, где все подряд наколбашено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2004, 21:05 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Ну так это просто что-то из области структурного программирования. Тоже хорошая вещь, но не про то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 00:13 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Varan, занимался чем-то вроде и пришел к выводу, что самым красивым решением является использование конструкции "WithEvents". Т.е. форма только отражает данные, а созданный модуль, перехватывающий события в этой форме, занимается бизнес-логикой. Таким образом, одна и та же форма, при наличии разных "обрабатывающих" модулей может вести себя абсолютно по-разному, при этом нет необходимости что-либо вызывать из модуля формы - необходимый "бизнес-лоджик-модуль" будет сам вызываться по событиям формы. Если правильно понял задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 08:19 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Exquisite, А нет ли примера, где можно посмотреть, как применяется такой подход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 11:48 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Для Varan: >А нет ли примера, где можно посмотреть, как применяется такой подход? Есть, но он слишком наворочен. Выдернуть - лучше с нуля накидать, что и сделал... И отослал бы на мыло, ежли б знал А это про то, что "накидал": Примитивно сделано, но понять можно. Да, и не пугайся обилия кода в модулях классов - потом этот "стандартный", я бы даже сказал служебный код попросту не замечаешь. При этом обрати внимание на полное отсутствие кода внутри суб-формы, из которой благодаря этой схеме не надо вызывать функций с параметром-указателем на то, какая бизнес-логика является текущей. По большому счету этот вариант (в таком его использовании) просто позволяет физически разделить строки кода, реализующие различные функциональные задачи. Кстати, можно "подключить" одновременно несколько модулей класса. И еще много чего "можно"... С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 21:28 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Exquisite, Мой почтовый адрес в профиле. Бросьте, если есть возможность, туда пример. А обилия кода я уже давно не боюсь, главное, чтоб он интересным и красивам был... Надо стремиться к прекрасному... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 21:52 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Отослал... Формат - А2000 (А97 и ниже WithEvents не понимают). По поводу красоты кода в примере... ээээээ... Ну вообщем, увидишь сам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 22:10 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Exquisite , получил, спасибо. Открывается. Завтра посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 22:29 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Интересная вещь. Если можно намыль пожалуйста на TisAlex@yahoo.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2004, 23:17 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Мне тоже можно кусочек кода пожалуйста? :) englishchannel@rambler.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 01:39 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
ну и мне... мыло в профиле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 07:20 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Даже не думал, что будет такой интерес к теме. Сейчас уже надо бежать (не программисты мы), а вечером кое-что добавлю в пример, кое-что "прикрасивлю" и отошлю тем, кто попросил. Ну и выложу где-нибудь у АМ'а (на русьимпорте). Ссылку дам. ОК? З.Ы. Если Varan не придет со словами: "Что за ерунду мне подсунули?!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 08:54 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
ОК, жду (ждем) ссылку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 09:26 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
присоединяюсь..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 12:15 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Exquisite , Не знал, что события формы можно отлавливать через независимые модули класса. Если делать тупо, то для того, чтобы реализовать несколько вариантов поведения формы, пришлось бы, наверное, в каждом обработчике события в модуле формы устраивать select ....case, который бы выбор по какому варианту обработать событие. Наверное, таким способом можно реализовать разное поведение одной и той же формы для разных групп пользователей. При запуске происходит идентификация пользователя, подключается соответствущая "логика"... В общем, интересная идея, как-нибудь попробую ее применить, заодно освежив знания про независимые модули класса, которыми я как-то не очень увлекаюсь. Зря, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 14:19 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
Пример немного переделал (в лучшую сторону) - теперь в нем можно подсоединить сразу два модуля. Высылаю всем попросившим, а выложить... выложить чуть позже, видимо... Сорри... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 16:45 |
|
||
|
Разнесение логики представления, бизнес-логики и логики хранения по разным модулям
|
|||
|---|---|---|---|
|
#18+
В догонку: в случае подключени сразу нескольких модулей к форме можно как раз функционально разделить код: например, в одном модуле код обрабатывает событие "Текущая запись" с какой-то одной целью, а в другом - с другой целью. Звучит геморно, но как раз при ФУНКЦИОНАЛЬНОМ разделении кода - лучше трудно придумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2004, 16:48 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32491471&tid=1675137]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 511ms |

| 0 / 0 |
