|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
|||||||||||
Создание нового экземпляра класса, который не известен заранее05.05.2020, 13:40. Показов 5436. Ответов 34
Привет! Есть окно добавления нового сотрудника в структуру организации. Сотрудники разделены классами.
Вопрос: Как создать экземпляр заранее неизвестного класса, когда известен только абстрактный родитель? Как правильно организовать добавление нового сотрудника, что бы избежать такого количества копипаста? Похоже не правильно организована структура?( Проект на ГитХаб Структура классов такая: abstract BasePerson У него 2 потомка abstract BaseSubordinates (родитель для всех рабочих) : BasePerson Intern : BaseSubordinates Worker : BaseSubordinates abstract BaseDirector (родитель для всех управленцев) : BasePerson DepartamentHead : BaseDirector LowDirector : BaseDirector MidDirector : LowDirector TopDirector : MidDirector King : TopDirector Это основное View диалога добавления
Но если логику создания нового работника засунуть в обработчик ClassCB_SelectionChanged, то будет создаваться пустой работник( Это его CB
0
|
|||||||||||
| 05.05.2020, 13:40 | |
|
Ответы с готовыми решениями:
34
Создание нового экземпляра дочернего класса из экземпляра базового Создание нового экземпляра класса а позже его удаление Создание экземпляра класса, разрушение экземпляра класса |
|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
|
| 10.05.2020, 14:27 [ТС] | |
|
Офигеть! Это ж целое приложение!!! Спасибо. буду разбираться и переделывать свое приложение в соответствии с вашим примером. Я тут два дня только логику по департаменту от MV отделял и все равно близко нет к тому что вы сделали!
0
|
|
|
Модератор
|
||
| 10.05.2020, 16:30 | ||
|
Для нормальной реализации начните не с View, а с БД и Репозитория на Entity Framework. Репозиторий - для этой задачи нужен из нескольких типов. У них будет общий Контекст Данных, но внешние интерфейсы будут разные. Репозиторий с Контекстом данных обменивается данными в типах для EF. А для внешнего общения у него должны быть неизменяемые DTO типы. Потом к ним сделайте Модель. Модель должна обмениваться со всеми только в DTO типах. После занимаетесь View. Для каждого типа View создаёте свой интерфейс через который этот тип может получить всю нужную информацию. Для удобства Дизайна можете реализовать некоторые из них в виде временных VM предоставляющих Контекст Данных Времени Разработки. Когда вы завершите View у вас с одной стороны будет готовая Модель с другой готовая View. И создание VM (тоже скорее всего из нескольких типов) значительно упростится. Сразу будет понятно откуда брать данные, куда их отправлять, как реагировать на действия в GUI интерфейсе.
0
|
||
|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
|||
| 10.05.2020, 20:48 [ТС] | |||
|
0
|
|||
|
Модератор
|
||
| 10.05.2020, 20:58 | ||
|
БД - это хранилище данных. А для доступа к нему вы создаёте Контекст БД - производный класс от DbContecxt. В этом контексте есть свойств для доступа ко всем элементам БД. Но одновременно вам они все не нужны. И смысла всё это записывать в один тип нет. Поэтому вы делаете (как пример) репозиторий работающий с персоналом. Он аккумулирует все методы для работы с персоналом: получить персонал по таким то критериям, получить конкретного работника, изменить данные работника, добавить/удалить работника и т.д. Потом делает второй репозиторий для работы со структурой организации. Здесь методы для работы и изменения структуры. Третий тип - для получения различных сводных отчётов. Ну и так далее. Можно их всех запихнуть в один тип, но это сделает его очень громоздким, неудобным для редактирования, модификации. И Модели уже за определёнными данными будет обращаться к тому или иному репозиторию.
0
|
||
|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
||
| 10.05.2020, 21:03 [ТС] | ||
|
0
|
||
|
Модератор
|
||
| 10.05.2020, 21:17 | ||
|
И все Репозитории работают с ним одним. Но только с нужными его частями. Сам по себе DbContext ничего не занимает и не использует. Поэтому большое количество его свойств не мешает. Их заполнение происходит только запроса к значению его свойств. И заполняются только те свойства которые запрашиваются. Поэтому один DbContext можно безболезненно разделить между несколькими репозиториями.
0
|
||
|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
||
| 10.05.2020, 21:36 [ТС] | ||
|
Повторю этот ваш проект, может чего прояснится) Пример создания приложения "Работа с комнатами в студенческих общежитиях" [WPF, SQLite, Элд Хасп] Или можете рекомендовать какой другой пример, где есть объяснения текущих действий?
0
|
||
|
Модератор
|
||||||||||||||||||||||||||||||||
| 10.05.2020, 21:43 | ||||||||||||||||||||||||||||||||
То есть Конструктор их не видит, создавать привязки приходится "на глазок" и нет ни какой возможности их проверить. Чтобы избежать случайных ошибок мы объявляем интерфейс в котором указаны все нужные этому контролу свойства.
Плюс к этому мы получаем готовое ТЗ на VM - в неё надо только реализовать этот интерфейс и наш UC гарантированно будет с ней работать. Но касаемо самого создания дизайна, свойства хоть и есть, но они пустые, незаполненные. И непонятно как будет выглядеть дизайн когда в них будут значения. Для решения этой проблемы, создаём временную частичную VM предоставляющую данные Времени Конструирования. Делается она очень просто: объявляется класс производный от интерфейса и нажимается в "Быстрых Решениях" - "Реализовать Интерфейс". Остаётся только заполнить полученную "рыбу" значениями
Когда подходим к реализации VM, то указываем в ней все требуемые интерфейсы. Нажимаем на каждом "Реализовать интерфейс" и шаблон уже готов.
0
|
||||||||||||||||||||||||||||||||
|
Модератор
|
||
| 10.05.2020, 21:46 | ||
|
У него там две версии. Одна XML, вторая БД SQLite. Хотел сделать ещё третью улучшенную, но нет времени. Появится дополню. Примеров проще есть несколько в подписи моего поста. Но с БД и выделенным репозиторием только эта.
0
|
||
|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
||
| 11.05.2020, 20:09 [ТС] | ||
|
0
|
||
|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
|
| 11.05.2020, 20:49 [ТС] | |
|
0
|
|
|
Модератор
|
|||
| 11.05.2020, 21:05 | |||
|
Иначе весь смысл их создания (для удобства Разработки Дизайна) теряется. Но по ходу реализации, конечно, может обнаружится, что что-то упустили или надо изменить. При необходимости сначала вносятся изменения в интерфейс, потом в Контекст Данных Времени Разработки. Чтобы сразу было ясно какие есть особенности реализации интерфейса. Добавлено через 1 минуту Для вызова Конструктора Привязок надо в окне "Свойства" нажать на маленький квадратик справа от названия и значения нужного свойства. Добавлено через 10 минут Так же подсказки появляются при наборе XAML "в ручную". Появляется всплывающее окошко с подсказками IntelliSense. Но в XAML они не всегда корректно работают. Во-первых, Конструктор XAML смотрит C# не в проектах, а в сборках. Поэтому, если после изменений, не сделать сборку проекта, то изменения Конструктор не увидит. Во-вторых, изредка тупит в шаблонах и стилях. Бывает IntelliSense видит, а Конструктор Привязок - нет. Или наоборот.
1
|
|||
|
8 / 6 / 4
Регистрация: 02.07.2019
Сообщений: 77
|
||
| 11.05.2020, 21:19 [ТС] | ||
KeyUp="{Binding KeyUpCommand}" работать не будет и придется делать в КодБихаенд? А что означает Run перед тегом XAML? Оно объединяет одинаковые теги <Text> в одну строку?
0
|
||
|
Модератор
|
|||
| 11.05.2020, 22:13 | |||
|
Ему надо указать обработчик события (метод с соответствующей сигнатурой). Привязку можно задать к команде. Почитайте: InputBindings KeyBinding MouseBinding Добавлено через 21 минуту
0
|
|||
| 11.05.2020, 22:13 | |
|
Получить константу из экземпляра класса, который является членом другого класса Создание экземпляра класса-наследника для переменной с типом базового класса Создание экземпляра класса, имя класса находиться в строковой переменной Явное создание экземпляра класса и явная специализация шаблона класса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|