Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Базовый класс для бизнес-сущностей  [new]
wsnet
Member

Откуда:
Сообщений: 861
JaDi, а можете коротенький пример кода как у вас это реализовано ?
16 сен 18, 22:07    [21676184]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
Котовасия
Member

Откуда:
Сообщений: 920
Котовасия
wsnet
Котовасия, а Read Commited не хватит ?

Ну, если ты уверен, что в поцессе формировпния клиентского датасета никто другой не закоммитит изменения - хватит.

Жадачи могут быть разными. Представь, что ты для формирования отчеты часть данных загрузил позавчера, а часть - сегодня. Наверное, такое допустимо в период новогодних праздников, когда никто больше не работает.
16 сен 18, 22:09    [21676185]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3691
wsnet,

неа, нельзя коротенько... Если на словах: подгружается объект, передается на форму, на форме данные из объекта грузятся в контролы, пользователь редактирует, при сохранении данные из контролов сохраняются в объект, проверяется корректность, подгружается текущая версия объекта и проверяется, были ли изменени, сохраняется объект в базу. Форма закрывается.
16 сен 18, 22:25    [21676191]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
wsnet
Member

Откуда:
Сообщений: 861
JaDi, а если за это время были изменения? Пользователь видит изменения или просто ему уведомление мол данные были изменены ?
17 сен 18, 06:50    [21676295]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3691
wsnet
JaDi, а если за это время были изменения? Пользователь видит изменения или просто ему уведомление мол данные были изменены ?

В это время стоит таймер, который проверяет изменения и подгружает их в открытые журналы/справочники, если что-то поменялось (например, оставил программу на пол дня, а потом решил поработать). В карточках для редактирования ничего не подгружается, только предупреждение -- данные на момент открытия. Кроме того для важных данных есть еще всплывающие уведомления пользователей, мол их задача или заказ был изменен, кликните сюда для перехода.

Короче, стандартный функционал, который есть во многих CRM/ERP.
17 сен 18, 09:25    [21676368]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
чччД__
Guest
wsnet
JaDi, а если за это время были изменения? Пользователь видит изменения или просто ему уведомление мол данные были изменены ?

Вообще, часто ничего такого и не нужно. Ну, прикинь, тётя Маша редактировала полдня документ, а потом, при попытке нажать "Сохранить" вдруг узнала, что дядя Петя что-то поменял раньше нее. И что ей делать - принять к сведению, идти ругаться с Петром или забить на свою работу? Пустой гемор на ровном месте.
...
При создании документа ничего не нужно делать, ибо документ существует только на клиенте, никто его не сможет испортить.
При редактировании - скорее всего, документ принадлежит его создателю, то есть - "кто создал, тот и правит", то есть, все кто не лень не смогут влезть. Т.обр., вопрос чисто организационный, и "проблемы" нет.

А если нужно все же дать возможность что-то менять нескольким юзерам - тут варианты разные. Например:
1. "Кто последний нажал Сохранить - тот и прав". Совершенно ничего страшного в этом нет, главное - предупредить людей об этом.
2. Автоматически выставляется флажок "документ редактируется Марией Ивановной", все остальные могут только смотреть. Если МарьИванна ушла на обед и не вернулась (а работать с документом нужно"), флажок можно сбросить (с регистрацией сего непотребства в логе, если очень хочется). Флажок может сбросить либо админ, либо кто-нибудь из группы юзеров, допущенных до редактирования документа.
3. и т.п.

Мы и так, и сяк, и эдак делали. Никакой разницы с т.зр. эксплуатации, но чаще всего "вариант 1". Если документ - сложная структура, то, возможно, "вариант 2": юзеру проще принять, что документ в его монопольном доступе.

Юзеры - они народ терпеливый. Что им подсунешь, то они и съедят.
17 сен 18, 09:49    [21676390]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
wsnet
Member

Откуда:
Сообщений: 861
чччД__, Jadi спасибо, что делитель опытом!

чччД__, если я реализовать хочу второй вариант - то кто первый открыл документ для правки - того и тапки?
То есть нужно хранить с документом поле статус и ФИО редактора формы?
А ежели я хочу реализовать права работы с документом - то понадобится реализовать еще и группу для редактирования?

А как организовать группу - это лучше делать на уровне СУБД или на клиентском уровне?
17 сен 18, 10:36    [21676447]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
wsnet
Member

Откуда:
Сообщений: 861
Ну не буквально я имею ввиду ФИО редактора формы, а его ID конечно же!
17 сен 18, 10:37    [21676448]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
alekcvp
Member

Откуда:
Сообщений: 1102
чччД__
2. Автоматически выставляется флажок "документ редактируется Марией Ивановной", все остальные могут только смотреть. Если МарьИванна ушла на обед и не вернулась (а работать с документом нужно"), флажок можно сбросить (с регистрацией сего непотребства в логе, если очень хочется). Флажок может сбросить либо админ, либо кто-нибудь из группы юзеров, допущенных до редактирования документа.

Идея мне нравится, только, ИМХО, лучше сделать что если документ не правится в течении X минут (выбирается админом системы), то сохраняется в черновик и статус "редактируется" сбрасывается сам. А при открытии черновика проверяется, были ли изменения исходного документа, и если были то открывается и новая версия и черновик в отдельном окне, с возможностью переноса выбранных изменений в основной документ.
Да, так сложнее, зато удобнее пользователю НМВ :)
17 сен 18, 10:48    [21676470]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1521
Пишу файловую базу данных. Объясните, что такое файлы
Программерский фольклор


wsnet
... пример кода как у вас это реализовано ?

Позвольте вмешаться...
wsnet, судя по вопросам опыт в Delphi у Вас не большой. По этой причине сильно рекомендую, сосредоточится на изучении стандартных подходов с использованием TDataModule-TDataSet-TDataSource и не придумывать свой неповторимый стиль (пока во всяком случае). Всегда найдется задача которую лучше решить иными способами, но для 90% случаев стандартный подход вполне годен. Кроме того это сильно упрощает жизнь последователям, которые будут поддерживать и развивать Ваш код (людей, которые знают про TDataSet много, а про вашу объектную модель бизнес сущностный знает ровно 1).
Кроме того вопросы общего характера, типа как бы мне организовать архитектуру заранее обречены на флуд и холивары, т. к. чтобы дать более мене вменяемый ответ нужно очень хорошо разбираться в предметной области, организации вашей компании и прочей куче вещей о которой ни кто не знает. В результате все будут заниматься домыслами и выдавать рекомендации на основе своего личного опыта/задачи/конторы. То, что для одного будет вполне верно и очевидно, для другого буде абсолютным бредом.
17 сен 18, 11:00    [21676484]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
Dimonka
Member

Откуда:
Сообщений: 1066
wsnet
Коллеги, использовал в своих программах бизнес-сущности, типа
TPerson = class
FID:Integer;
….
property ID:Integer read FID write FID;


В итоге поняв, что это ни что иное как DataSet, сделал:
...
Например как с помощью них реализовать поиск по имени?

Если уж действительно хочется "бизнес-сущности" с преферансом и томными барышнями, то можно начать пользоваться каким-нибудь ORM. Например Aurelius или от DevEx. Первый мне прям очень нравится. Не без недостатков, но очень такоой рабочий.
17 сен 18, 12:27    [21676686]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
wsnet
Member

Откуда:
Сообщений: 861
roschinspb, опыт есть, но он таки связан с формошлепством, вот и ищу другие подходы.
17 сен 18, 13:50    [21676857]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
L_argo
Member

Откуда:
Сообщений: 319
по сабжу: полнейший бред и тупосць.
Не нужно тулить ООП туда, для чего оно не предназначено.

зы: афтар конеш мой совет не послушает. Но это уже его буратинские проблемы. :)
17 сен 18, 14:07    [21676878]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1521
wsnet
roschinspb, опыт есть, но он таки связан с формошлепством, вот и ищу другие подходы.

Переходите к даташлёпству :o)
Писать свою компонентную модель, фреймворк и т.д. в реальном проекте можно только когда есть четкое понимание, того как должно быть и что своя модель будет радикально лучше стандартной, т.е. на столько лучше, что сферический Вася Пупкин предпочтет тратить своё время на её изучение, а не накидает DataSet-ов которые он и так знает. Обычно такое понимание приходит когда уже много что сделано на стандартных компонентах.
Смотрите исходники TPersistent, TCollection, TStrings, TActionList. Подумайте почему, зачем сделано так а не иначе, может какие идеи для себя почерпнете.
Это как бы совет от человека, который программировал когда небо над Невой еще чернело от птеродактелей
17 сен 18, 14:20    [21676909]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
wsnet
Member

Откуда:
Сообщений: 861
L_argo
по сабжу: полнейший бред и тупосць.
Не нужно тулить ООП туда, для чего оно не предназначено.

зы: афтар конеш мой совет не послушает. Но это уже его буратинские проблемы. :)


Да вроде бы не тупость и не бред, не ? http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=919104&msg=12104238
17 сен 18, 15:50    [21677091]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
чччД__
Guest
wsnet
L_argo
по сабжу: полнейший бред и тупосць.
Не нужно тулить ООП туда, для чего оно не предназначено.

зы: афтар конеш мой совет не послушает. Но это уже его буратинские проблемы. :)


Да вроде бы не тупость и не бред, не ? http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=919104&msg=12104238

А, так ты не просто из тех, кто скл осилить не в состоянии, а особо упоротый...
Ну, феллируй. В энтерпрайз попадешь.
17 сен 18, 17:58    [21677243]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
wsnet
Member

Откуда:
Сообщений: 861
чччД__, ни о чем!
17 сен 18, 19:01    [21677296]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
L_argo
Member

Откуда:
Сообщений: 319
wsnet
L_argo
по сабжу: полнейший бред и тупосць.
Не нужно тулить ООП туда, для чего оно не предназначено.

зы: афтар конеш мой совет не послушает. Но это уже его буратинские проблемы. :)


Да вроде бы не тупость и не бред, не ? http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=919104&msg=12104238
Там же русским по белому написано "для этой задачи это не нужно". Так что все таки "НЕ". :)

Хотите научиться удалять гланды автогеном ? ОК, бро...
18 сен 18, 09:22    [21677635]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
Dimonka
Member

Откуда:
Сообщений: 1066
L_argo
wsnet
пропущено...


Да вроде бы не тупость и не бред, не ? http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=919104&msg=12104238
Там же русским по белому написано "для этой задачи это не нужно". Так что все таки "НЕ". :)

Хотите научиться удалять гланды автогеном ? ОК, бро...


Ага. Если ООП не нужно, тогда и Delphi нафик не нужён. Пущай автор голым SQL-ом обойдётся. Декларативненько так.
18 сен 18, 14:16    [21678160]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 898
Банальная пустая форма уже ООП
18 сен 18, 17:05    [21678442]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5076
энди
Банальная пустая форма уже ООП

не обязательно
18 сен 18, 17:08    [21678449]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
L_argo
Member

Откуда:
Сообщений: 319
Dimonka
Ага. Если ООП не нужно, тогда и Delphi нафик не нужён.
Не ага. Речь не шла про ненужность ООП как такового.
Речь шла про использование ООП по назначению.
Попытка притянуть за уши ООП в описание бизнес-сущностей - тупосць. В любом случае это будет не ООП, а фарс и посмешище.
19 сен 18, 09:20    [21679002]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
schi
Member

Откуда: Москва
Сообщений: 2601
"ОО-языки упрощают абстракцию, возможно, даже слишком ее упрощают. Они поддерживают
создание структур с большим количеством связующего кода и сложными уровнями.
Это может оказаться полезным в случае, если предметная область является
действительно сложной и требует множества абстракций, и вместе с тем такой
подход может обернуться неприятностями, если программисты реализуют простые
вещи сложными способами, просто потому что им известны эти способы и они умеют
ими пользоваться.
Все ОО-языки несколько склонны "втягивать" программистов в ловушку избыточной
иерархии. Чрезмерное количество уровней разрушает прозрачность: крайне
затрудняется их просмотр и анализ ментальной модели, которую по существу
реализует код. Всецело нарушаются правила простоты, ясности и прозрачности,
а в результате код наполняется скрытыми ошибкми и создает постоянные проблемы
при сопровождении.
Данная тенденция, вероятно, усугубляется тем, что множество курсов по
программированию преподают громоздкую иерархию как способ удовлетворения
правила представления. С этой точки зрения множество классов приравнивается
к внедрению знаний в данные. Проблема данного подхода заключается в том, что
слишком часто "развитые данные" в связующих уровнях фактически не относятся
у какому-либо естественному объекту в области действия программы -
они предназначены только для связующего уровня.
Одной из причин того, что ОО-языки преуспели в большинстве характерных для них
предметных областей (GUI-интерфейсы, моделирование, графические средства),
возможно, является то, что в этих областях относительно трудно неправильно
определить онтологию типов. Например, в GUI-интерфейсах и графических средствах
присутствует довольно естественное соотвествие между манипулируемыми
визуальными объектами и классами. Если выясняется, что создается большое
количество классов, которые не имеют очевидного соответствия с тем, что
происходит на экране, то, соотвественно, легко заметить, что связующий уровень
стал слишком большим.
"

Эрик Реймонд, Искусство программирования для Unix
19 сен 18, 10:12    [21679085]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1521
Обсуждение перешло в курилку :o)
Слышал еще такую аналогию:
SQL работает со множествами, а ООП с объектами. Объекты и множества отдаленно похожи, как например стая селедки похожа на кита, если смотреть через эхолот. Но вот не стоит селедку ловить с использованием гарпуна, а кита ловить используя сеть, или удочку.
19 сен 18, 10:30    [21679134]     Ответить | Цитировать Сообщить модератору
 Re: Базовый класс для бизнес-сущностей  [new]
Dimonka
Member

Откуда:
Сообщений: 1066
L_argo
Dimonka
Ага. Если ООП не нужно, тогда и Delphi нафик не нужён.
Не ага. Речь не шла про ненужность ООП как такового.
Речь шла про использование ООП по назначению.
Попытка притянуть за уши ООП в описание бизнес-сущностей - тупосць. В любом случае это будет не ООП, а фарс и посмешище.

Ну давай рассмотрим гипотетический пример. У тебя есть: Пользователи, Клиенты, Заказы, Элементы заказа, Товары на складе итд.
Используя ORM и ООП ты пишешь примерно следующий код:
Client := Manager.Find<TClient>(ClientID);
Order := Client.Orders[0];
for Item in Order.Items do
  if not Item.WarehouseItem.IsAvailable then
    raise EOrderError bla bla

А теперь напиши всё тоже самое "без ООП". :-)
19 сен 18, 12:47    [21679363]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить