Учебный проект на C#, посвящённый моделированию конструктора образовательных программ.
Основной фокус работы — объектно-ориентированное проектирование, применение SOLID/GRASP, порождающих паттернов и покрытие ключевой бизнес-логики тестами.
В рамках лабораторной реализована предметная область системы, в которой можно создавать и редактировать:
- пользователей;
- лабораторные работы;
- лекционные материалы;
- предметы;
- образовательные программы.
Проект построен вокруг доменной модели с авторством, поддержкой создания сущностей на основе уже существующих объектов и in-memory репозиториями для хранения и поиска.
- модель пользователя с идентификатором и именем;
- лабораторные работы с описанием, критериями оценивания и количеством баллов;
- лекционные материалы с описанием и контентом;
- предметы со списками лабораторных и лекционных материалов;
- образовательные программы со списком предметов по семестрам и руководителем программы;
- создание новых сущностей на основе уже существующих;
- сохранение ссылки на исходную сущность при копировании;
- ограничения на изменение сущности только её автором;
- проверки доменных инвариантов, включая суммарное количество баллов по предмету;
- in-memory репозитории для хранения объектов и поиска по идентификатору;
- unit-тесты для ключевых сценариев.
В реализации использован подход с акцентом на чистую доменную модель и разделение ответственности между объектами.
Проект демонстрирует:
- применение порождающих паттернов для создания сущностей;
- использование прототипирования/копирования для создания объектов на основе существующих;
- инкапсуляцию бизнес-ограничений внутри доменной логики;
- отказ от прямого “ручного” конструирования сложных сущностей в пользу фабрик/билдеров и абстракций;
- отсутствие необходимости повторно задавать автора при работе через соответствующие абстракции создания.
- сущность может изменять только её автор;
- копия сущности должна хранить идентификатор исходного объекта;
- количество баллов лабораторной работы остаётся неизменным при редактировании;
- для предмета с экзаменом и набором работ суммарное количество баллов должно составлять 100;
- у предмета сохраняется логика разных форм аттестации: экзамен и зачёт.
Покрыты основные сценарии, в том числе:
- попытка изменить сущность не её автором;
- создание сущности на основе существующей с сохранением ссылки на исходник;
- ошибка при создании предмета с некорректной суммой баллов.