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

start [/forum/topic.php?fid=45&mobile=1&tid=1675137]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 483ms |

| 0 / 0 |
