|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
Доброго вечера Подскажите пож-та пытаюсь реализовать "жадную" загрузку двух таблиц при загрузке формы (Load). Корректно ли так делать? Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2020, 23:21 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
Скорее всего надо Код: c# 1.
Но, сама суть того, что у тебя UI напрямую работает с DbContext уже изначально говнокодна. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2020, 23:28 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
fkthat,как надо делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 00:23 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
mavrodi Подскажите пож-та пытаюсь реализовать "жадную" загрузку двух таблиц при загрузке формы (Load). Корректно ли так делать? Я правильно понял, вы взяли это отсюда: https://metanit.com/sharp/entityframework/3.1.php Всё зависит от задач и проекта. Для небольшого проекта сойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 00:29 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
hVostt, да. Может быть можете посоветовать что-нибудь получше чем метанит? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 00:32 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
mavrodi hVostt, да. Может быть можете посоветовать что-нибудь получше чем метанит? Ну как, что-нибудь, вот оно, основное что-нибудь: https://docs.microsoft.com/en-us/ef/core/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 00:59 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
mavrodi fkthat,как надо делать? MVC, MVP, MVVM - выбирай на вкус :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 01:01 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
mavrodi hVostt, да. Может быть можете посоветовать что-нибудь получше чем метанит? Метанит хороший ресурс для старта. Я его всячески рекомендую новичкам. Это не отменяет чтение родной документации на сайте Microsoft. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 01:31 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
hVostt, понял спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 09:15 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
fkthat, спасибо за подсказку ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 09:32 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
fkthat mavrodi fkthat,как надо делать? MVC, MVP, MVVM - выбирай на вкус :)) С WinForms разве что MVP, да и то наверняка будет перебором в проекте ТСа. Достаточно разделить уровень доступа к данным от бизнес логики. https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 10:58 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
skyANA С WinForms разве что MVP, да и то наверняка будет перебором в проекте ТСа. Достаточно разделить уровень доступа к данным от бизнес логики. Винформс он больше МВВМ по своей природе, только для нормального МВВМ надо все данные и обработчики выносить в отдельный класс вьюмодели. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 11:50 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
fkthat skyANA С WinForms разве что MVP, да и то наверняка будет перебором в проекте ТСа. Достаточно разделить уровень доступа к данным от бизнес логики. Винформс он больше МВВМ по своей природе, только для нормального МВВМ надо все данные и обработчики выносить в отдельный класс вьюмодели. По какой такой своей природе? MVP в WinForms видел, даже пару книг знаю, а вот MVVM ни разу. Это WPF по своей природе MVVM. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 09:31 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
skyANA По какой такой своей природе? MVP в WinForms видел, даже пару книг знаю, а вот MVVM ни разу. Это WPF по своей природе MVVM. Two-way databinding есть ведь. Если перестать говнокодить button100500_Click() пихая туда всю работу с гуи, а оставить там только изменения данных модели, а потом все данные модели вместе с button_Click вынести в отдельный класс, то как раз MVVM и получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 12:57 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
fkthat skyANA По какой такой своей природе? MVP в WinForms видел, даже пару книг знаю, а вот MVVM ни разу. Это WPF по своей природе MVVM. Two-way databinding есть ведь. Если перестать говнокодить button100500_Click() пихая туда всю работу с гуи, а оставить там только изменения данных модели, а потом все данные модели вместе с button_Click вынести в отдельный класс, то как раз MVVM и получится. Я в твоём предложении могу заменить MVVM, на MVP и смысл не изменится ;) Первый вопрос: почему получится именно MV-*? Второй: почему не MVP? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 13:58 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
skyANA Первый вопрос: почему получится именно MV-*? Второй: почему не MVP? В MVP нет байндинга между UI и моделью - UI обновляется путем вызовов презентером вьюхи (через абстрактный интерфейс). А MVVM изначально был задуман для работы в условиях фреймворка с 2-вей байндингом, где чистый MVC использовать было бы нерационально. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 14:57 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
Так много умных слов.. А суть-то проста как трусы пожарника: Вместо Onчто-то-тоClick() {Код реализации какого-то алгоритма} надо писать Onчто-то-тоClick() { Вызов функции, которая реализует какой-то алгоритм} что напрямую соответствует не каким-то там надуманным паттернам типа MVVM, а SOLID - совершенно научной концепции проектирования решений. Помницца, еще в васике лет дцать назад били меня за все эти Button100500 и пихание кода непосредственно в обработчик. Что касается модели, точнее ORM, то ее никто не мешает использовать в ЛЮБЫХ приложениях, в т.ч. при написании ОС и драйверов. Лишь бы вес коробки не превышал веса его содержимого :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 16:43 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
MsGuns Помницца, еще в васике лет дцать назад били меня за все эти Button100500 и пихание кода непосредственно в обработчик. Ну от того что ты просто перенесешь код в другой метод сам-то код ничуть не изменится. Все эти паттерны они как раз не о том, куда перенести код, а о том, чтобы отделить код логики от кода работы с UI. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 17:11 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
По поводу "бизнес-логики". У меня в последнее время возникают мысли, что многие девелоперы работают с ораклом, причем к самому ораклу (БД) их не пускают на пушечный выстрел. Знаю, что это за ситуация на примере саппорта АС "Парус". Дерьмо то еще - все выкрутасы приходится мастерить на "клиенте", порождая монстроидальные SQL-конструкции. Но ведь SQL-серверы обладают мощнейшим инструментом реализации этой самой бизнес-логики (триггеры, констрэйнты, индексы, хранимки, UDF, вьюхи и куча еще всего). Причем при грамотной настройке алгоритмов все это летает на миллионных таблицах. Но нет ! Мы не знаем SQL, SQL-сервера, нам не дают, требует заказчик, хочет любимая (нужное подчеркнуть) - и мы тянем в ORM только таблички, а там ( в ORM) строим небоскребы, висячие сады и каскадные водопады логики. И героически пытаемся рулить транзакциями, чтобы все это ложилось в концепцию целостности БД. Возможно, я ошибаюсь, но именно такое складывается впечатление :) Еще замечание. Пускать девелопера в проекты с БД (а таких сейчас немного больше, чем все) без знания хотя бы основ этих самых СУБД - все равно, что сажать блондинку с картой-маршрутом в самолет. Грохнется, еще не взлетев :) Мне сейчас возразят - а нафих например linq. Ну во-первых, этим псевдоинструментом никак не заменишь полноценный скрипт на SQL, во-вторых, чтобы понять все его нюансы, нужно немногим меньше времени, чем изучить "родной" SQL. В-третьих, как быть с планами запросов ? Т.е. с оптимизацией выполнения этих самых запросов ? В хранимке у меня полный набор от создания индексов до использования особенностей конкретного SQL-сервера. А что есть в LINQ кроме заявления его авторов о его крутости ? Не проще ли всю бизнес-логику вынести на этот самый SQL-сервер ? Что гарантированно удобнее как при масштабировании, так и при "перезде" на сервер иного типа - просто переписал БЛ с MS SQL на MySQL (к примеру), оставив неизменными названия и типы сущностей модели. И все ! Хотелось бы услышать мнение уважаемых постояльцев форума по этому поводу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 17:12 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
fkthat MsGuns Помницца, еще в васике лет дцать назад били меня за все эти Button100500 и пихание кода непосредственно в обработчик. Ну от того что ты просто перенесешь код в другой метод сам-то код ничуть не изменится. Все эти паттерны они как раз не о том, куда перенести код, а о том, чтобы отделить код логики от кода работы с UI. Да что Вы говорите. А вынос алгоритмики (кода) из обработчика (UI) в основной блок кода (Model), о чем и было написано выше - это не есть "перенос", о котором так трындят все эти псевдотеоретики ? Или будем спорить чтоб было раньше - яйцо или курица ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 17:15 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
MsGuns Лишь бы вес коробки не превышал веса его содержимого :) Нужно рассказать это домохозяйкам, которые чудо инженерной мысли, мощи, способные производить вычисления, о которых лет 5-10 назад и не мечтали.... используют, чтобы зырить фоточки в инстаграмм ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 17:48 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
Вот есть конкретный пример. Существует крупное предприятие типа коммунэнерго. Есть БД (даже не одна, но это - мелочь). В этих базах около 1000 таблиц. Со связами. Задач на этой БД навешано с сотню. От бухучета до автоматизированной системы управления состояния теплотрасс. Как решить ? Немного упрощаем и получаем два основных пути. 1. Создаем ОДНУ ORM и туда пихаем всю БД всей СУБД. На выходе имеем: Плюс: все, что надо, есть. Берем только то, что надо для решения конкретной задачи. Минус: получаем монстроидальный код ORM, куда не заглядываем дабы не посетил Панкратий (инфаркт миокарда) Минус 2: имеющейся в ORM имплиментации и классов не хватает, чтобы оптимально решить задачу. Выход - пишем собственные маленькие ORM-ки, городим модельки, сеем репозиторийки и прочее. Лезть в "большую" ORM нам, сермяжным и посконно-лапотным, ессно, не дозволяют. И, кстати, правильно делают ! Минус 3: отладка. "проверенный" метод ORM жутко тормозит или возвращает эксепшн на моих параметрах. Решается долгими и частыми перебранками с орм-щиками. Чаще всего не в нашу пользу. В итоге переделываем логику своего проекта. "А это бандитизм" (с) 2. Для решения каждой задачи лезем на сервер и там строим БЛ. Получаем кучу "своих" хранимок, UDF и т.д. Т.е. строим свою ORM для задачи. Плюс: в проекте нет ничего лишнего. Каждую строчку кода знаем как белье собственной жены. Все оптимизации, модернизации и прочие "ции" - в наших руках. Минус: т.к. мы не одни, а задач много, БЛ на сервере разбухает как чиряк на носу - стремительно и независимо. На мой взгляд (непросвещенный) - ну и Христофор Бонифатьич с ним ! Чиряком в смысле. На то он и сервер, он железный. Кроме того, существуют схемы, роли и т.д., позволяющие гибко управлять объектами этой БЛ, отдавая нужные ее части в нужные руки. Что имеем в сухом остатке: - если судить с т.з. конечного юзера, то он явно выигрывает при втором пути: приложение на его десктопе (точпаде) не тормозит. - С т.зр. инвестора - тоже второй предпочтительнее - не надо платить космические зарплаты орм-щикам ибо без них "все станет" - достаточно иметь одного-двух эскюэлщиков (которых, кстати, все равно нужно иметь) . - С т.зр. разраба тоже предпочтительнее. Почему ? Ведь время на проектирование конкретной задачи резко уменьшается, не так ли ? Не так ! Ибо разобраться в чудовищно раздутой ORM может оказаться куда труднее, чем спроектировать свою собственную, "под задачу". Я уже не упоминаю затраты на отладку, тестирование и опытную эксплуатацию - говорил об этом выше. Итак, господа, мой вывод - "корпоративный" ORM-фтопку ! Больше децентрализации, господа, больше власти и свободы на места ! Пусть каждый увидит как собственное величие, так и дурь. Аминь ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 17:49 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
MsGuns Еще замечание. Пускать девелопера в проекты с БД (а таких сейчас немного больше, чем все) без знания хотя бы основ этих самых СУБД - все равно, что сажать блондинку с картой-маршрутом в самолет. Грохнется, еще не взлетев :) Мне сейчас возразят - а нафих например linq. Ну во-первых, этим псевдоинструментом никак не заменишь полноценный скрипт на SQL, во-вторых, чтобы понять все его нюансы, нужно немногим меньше времени, чем изучить "родной" SQL. В-третьих, как быть с планами запросов ? Т.е. с оптимизацией выполнения этих самых запросов ? В хранимке у меня полный набор от создания индексов до использования особенностей конкретного SQL-сервера. А что есть в LINQ кроме заявления его авторов о его крутости ? Не проще ли всю бизнес-логику вынести на этот самый SQL-сервер ? Что гарантированно удобнее как при масштабировании, так и при "перезде" на сервер иного типа - просто переписал БЛ с MS SQL на MySQL (к примеру), оставив неизменными названия и типы сущностей модели. И все ! Хотелось бы услышать мнение уважаемых постояльцев форума по этому поводу :) Если у вас модель данных плохая и не спроектирована для выполнения определённых запросов, вам никакое мастерство SQL не поможет, никакие хинты и молитвы dba богам. Хорошо же продуманная модель, отвечающая задачам будет быстро работать через LINQ запросы без всяких премудростей. Как обычно, ищем компромисс. Ваше RAW SQL тоже это не сахар (уж простите за тавтологию) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 17:52 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
MsGuns Итак, господа, мой вывод - "корпоративный" ORM-фтопку ! Больше децентрализации, господа, больше власти и свободы на места ! Пусть каждый увидит как собственное величие, так и дурь. Больше свободы на местах приводит к зоопарку, бардаку, и по сути свинарнику. При чём растёт эта проблема в геометрической прогрессии и очень скоро становится абсолютно неуправляемой. Когда вы приходите в такую контору, вы понимаете (вам дают понять), что ЭТО вам ни за что и никогда не зарефакторить, поэтому нужно в достаточной степени очерстветь и жить в гадюшнике :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 17:54 |
|
EF6 + WinForms
|
|||
---|---|---|---|
#18+
Еще про ORM. Каковы истинные причины ее возникновения ? Вернее, даже не ее самой, а мысли о ней ? Дела в том, что в те годы, когда такая мысль могла возникнуть, дела с скл-серверами обстояли совсэм не так пушисто-розово как сейчас. Промышленных серверов было "обмаль", стоили они как небольшое предприятие и их обслуживание обходилось инвесторам в кругленькие суммы. Доступ к "телу" был либо закрыт, либо чреват всякими "негараздами". Вот и думали чуваки, как бы сделать чтоб и клубничку съесть и на сервер не залезть. Вот они и придумали выход. Но очень скоро "ураклисты" (я буду их так называть, всяк поймет кто имеется в виду) смекнули, что денюжки ("Ух, какие крупные деньжищи") уплывают мимо их алчных ротов. И они взялись за сооружение собственных ORM. И теперь: нужна вам АС управления все- равно-чем ? Пожалте к нам - мы вам дадим (вернее продадим) ORM в красивой коробочке. Есно, с Хранилищем. С каким ? А нафих вам знать - все будет замеч т ательно бегать, даже летать ! Так появился отряд привилегированных айтишников, которые сами себе и выдумали название - бэкенд. Но не "попа с концом", как подумала бы учительница английского в начальных классах, а совсем-совсем иное. Т.е. условные "ураклисты" переобулись на лету в бэкэндистов. Гордо носящих это имя, что и понятно, их средние жалования в разы превосходят подаяния, получаемые "фронтами". Что мы имеем в сухом остатке ? А имеем деление разрабов на две основные касты - каста "белых" и каста .."афроамериканцев" :) И ладно бы.. Но ведь лезут же изо всех форумов эти "спесилисты", освоившие драг-энд-дроп всяких оэрэмовских эсдэкашек, и с выпяченной хилой грудью громогласно пинают тех, кто пытается что-то мастерить на SQL-серверах. Несправедливо это, господа :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 18:16 |
|
|
start [/forum/topic.php?fid=17&fpage=2&tid=1349060]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
50ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 181ms |
0 / 0 |