Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/htomsik/simplecrm
Simple CRM with patically autogenerated GUI
https://github.com/htomsik/simplecrm
crm database entity-framework-core mvvm wpf
Last synced: about 18 hours ago
JSON representation
Simple CRM with patically autogenerated GUI
- Host: GitHub
- URL: https://github.com/htomsik/simplecrm
- Owner: Htomsik
- Created: 2022-07-27T08:33:35.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-02-04T17:58:33.000Z (almost 2 years ago)
- Last Synced: 2024-10-10T19:44:25.858Z (26 days ago)
- Topics: crm, database, entity-framework-core, mvvm, wpf
- Language: C#
- Homepage:
- Size: 11.9 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Инструкция
### Первый запуск
Перед первым включением требуется провести настройку конфигурации приложения - appsettings.json.
>В проекте используется Entity Framework Core с системой миграции, в следствии чего бд создаётся при первом подключении к MsSql серверу или к существующией бд.
>
> Файл конфигурации в каталоге ProjectMateTask
>
> Файл импортированной базы данных находится в AssetsВ appsettings.json в строке MSSQL указать ссылку на ваш MsSql сервер и выбрать название каталога, после чего можно приступать к запуску приложения.
{
"Database":
{
"Type": "MSSQL",
"ConnectionStrings":
{
"MSSQL": "Data Source=ССЫЛКА НА СЕРВЕР;Initial Catalog=НАЗВАНИЕ КАТАЛОГА;Integrated Security=True"
}
},
"AppInfo":
{
"AppVersion": "0.0.1"
}
}## Описание идей. Трудности с которыми столкнулся и как решал.
### 1. Создание автоматически генерируемых страниц для редактирования рзных сущностей (Таблиц из бд).
#### Режим просмотра:
* У всех сущностей есть базовый набор атрибутов (Id и Имя) (Дальше: базовая сущность).
* Для сущностей создаются базовые шаблоны отображения (DataTemplate).
* Когда нужно вывести данные в список, достаточно указать сущность и интерфейс сам подставит нужный Datatemplate.
* Если у сущности нет своей карточки то она отображаетя как базовая сущность.> Полная реализация как и планировал.
#### Режим редактирования:
* Так как многие сущности содержат ссылки (связи в таблицах) на другие сущности то сама сущность состоит из набора определенных атрибутов.
* Для атрибутов создаются карточки редактирования по типу атрибута. (Datatemplate)
* Когда сущность помещается в поле для редактирования то оно автоматически генерируется из Datatemplate-ов для тех атрибутов которые есть в редактирумой сущности.> Не удалось сделать так как планировал, изначально не смог найти способа отображать сущность как список атрибутов.
>
> Уже в конце создания я понял что можно было бы сущности сделать IEnumerable типами, и в качестве Enumerator-а для них указать массив всех атрибутов сущности.
>
> Таким образом можно было бы использовать списочные контейнеры (listbox, listview и т.д.), которые сами подбирали бы Datatemplate-ы по типу атрибута.
>
> В текущей реализации система частично как в режиме просмотра. Для каждой заранее известной сущности создана отдельная карточка редактиования, а если карточки нет,
> то сущность невозможно редактировать.### 2. Межстраничная навигация.
* Навигация осуществляется с помошью контейнеров, хранящих текущую Viewmodel определенного типа и сервисов которые отвечают за смену этих Viewmodel-ей в контейнерах.
* Контейнеры бывают как глобальные, смена Viewmodel-ей в которых может осуществлятся из любой точки проекта, куда передан его сервис. Так и локальные, навигация в которых осуществляется в определенных рамках проекта.> Полная реализация как и планировал.
### 3. Логирование и глобальная отловка необработанных исключений
* Глобальный Exception handler выявляет необработанные исключения, а также исключения полученные вследствви повреждения appsettings.json
* Логирование происходит в файл и в шину сообщений которая выводит часть информации для уведомления пользователя о проделанном событии.> Новая лично для меня функция, еще не полностью разобрался.
>
> Вследствии чего не все исключения удаётся отлавливать, а также отловка необработанных исключений зависит от момента их возникновения.
>
> Если исключение возникнет до момента создания логгера, то приложение покажет ошибку и аварийно завершит работу, но в файл ошибку не запишет.## Отклонения от тз
### Функциональность:
* Для всех сущностей все атрибуты являются обязательными, так было сделано из за неудачного использования INotiyDataError для валидации данных и ошибочного изначально планирования в некоторых пунктах.
> В остальном все требования к функциональности самого приложения по моему мнению выполнены.
> На счёт дизайна особо сильно не заморачивался, главное в этом проекте считай что сама суть.### Проектирование бд:
#### Товар (Product):
* Не знал как правильно реализовать тип и срок подписки.
Если использовать два атрибута (тип и срок) то получалось что требовалось каким либо образом в самой бд запрещать для определенных типов иметь срок.
Или если вести учёт подписок, то требовалась бы отдельная таблицу куда записывались дата начала подписки и дата окончания, и в ней бы хранились все купленные когда либо
пользователем подписки* Решил просто сделать типы со сроками.Указывается дата начала подписки и тип подписки.
> Если бы кто нибудь подсказал где посмотреть как такое реализуется по нормальному было бы неплохо.
### Тестирование:
* Юнит тесты были написаны по мере возможности. В основном тесты присуствуют для базовой инфраструктуры.
> Хотелось бы узнать что можно почитать о том как писать тесты для сложных типов.
>
> Например для таких: у меня есть навигационный сервис который взаимодейтсвует с IOC контейнером.