Эта заметка инспирирована статей на Хабре Разработка Java-проекта с ChatGPT-4: от идеи до реализации [1]. После ее прочтения автор начал экспериментировать в разработке ПО с различными AI ассистентами.
Увидев статью блога Jmix AI Assistant — ваш помощник в освоении Jmix [2], решил реализовать с помощью Jmix AI Assistant приложение аналогичное приведенному в статье [1].
Главное отличие от указанной статьи в том, что вся разработка будет вестись с помощью одного инструмента Jmix AI Assistant без использования сторонних генераторов кода.
Первая фаза эксперимента: анализ предметной области и генерация UML
Как и в статье [1] мы будем создавать с нуля образовательную платформу по типу условных Udemy или Coursera.
«Я хочу создать систему Образовательная платформа: создание системы для проведения онлайн курсов, тестирования и отслеживания прогресса студентов.
Укажи use cases для данной системы».
И получаем такой ответ:
Для системы образовательной платформы, предназначенной для проведения онлайн-курсов, тестирования и отслеживания прогресса студентов, можно выделить следующие основные сценарии использования (use cases):
Основные Use Cases
Регистрация пользователя
Акторы: Студент, Преподаватель, Администратор
Описание: Пользователь может зарегистрироваться на платформе, предоставив необходимые данные, такие как имя, адрес электронной почты и пароль.
Аутентификация пользователя
Акторы: Студент, Преподаватель, Администратор
Описание: Пользователь может войти в систему, используя свои учетные данные.
Просмотр доступных курсов
Акторы: Студент
Описание: Студент может просматривать список доступных курсов, включая описание, преподавателя и расписание.
Запись на курс
Акторы: Студент
Описание: Студент может записаться на выбранный курс.
Создание и управление курсами
Акторы: Преподаватель
Описание: Преподаватель может создавать новые курсы, добавлять материалы, устанавливать расписание и управлять содержимым курса.
Проведение онлайн-занятий
Акторы: Преподаватель, Студент
Описание: Преподаватель может проводить онлайн-занятия, а студенты могут участвовать в них.
Создание и проведение тестов
Акторы: Преподаватель
Описание: Преподаватель может создавать тесты и назначать их студентам.
Прохождение тестов
Акторы: Студент
Описание: Студент может проходить тесты, назначенные в рамках курса.
Отслеживание прогресса
Акторы: Студент, Преподаватель
Описание: Студент может отслеживать свой прогресс по курсу, а преподаватель может видеть прогресс всех студентов.
Управление пользователями
Акторы: Администратор
Описание: Администратор может управлять учетными записями пользователей, включая их создание, изменение и удаление.
Управление контентом
Акторы: Преподаватель, Администратор
Описание: Управление учебными материалами, включая загрузку, обновление и удаление контента.
Обратная связь и оценка
Акторы: Студент, Преподаватель
Описание: Студенты могут оставлять отзывы о курсах, а преподаватели могут оценивать работу студентов.
Дополнительные Use Cases
Уведомления и напоминания
Акторы: Студент, Преподаватель
Описание: Система отправляет уведомления о предстоящих занятиях, дедлайнах и других важных событиях.
Форумы и обсуждения
Акторы: Студент, Преподаватель
Описание: Возможность участия в форумах и обсуждениях, связанных с курсами.
Эти сценарии использования помогут в проектировании и разработке системы, обеспечивая основные функции, необходимые для эффективного обучения и управления образовательным процессом.
Описанные в ответе сценарии звучат логично, попробуем визуализировать эти требования.
Пишем следующий запрос для Jmix AI Assistant:
«Разработай UML-диаграмму в формате PlantUML для этих use cases.
Уточняющий запрос: могу ли я не использовать псевдонимы UC1, UC2, и т. д.? И разместить эту диаграмму вертикально, чтобы teacher был под student?»
Скрытый текст
Для создания UML-диаграммы use case в формате PlantUML, мы можем использовать текстовый формат, который будет описывать взаимодействие между актерами (студент, преподаватель, администратор) и системой. Мы можем не использовать псевдонимы UC1, UC2 и т. д., и разместить диаграмму вертикально, чтобы актёры были расположены один под другим.
Вот пример PlantUML кода для вашей системы образовательной платформы:
@startuml left to right direction actor Student actor Teacher actor Administrator usecase "Регистрация пользователя" as UC_Register usecase "Аутентификация пользователя" as UC_Authenticate usecase "Просмотр доступных курсов" as UC_ViewCourses usecase "Запись на курс" as UC_Enroll usecase "Создание и управление курсами" as UC_ManageCourses usecase "Проведение онлайн-занятий" as UC_ConductClasses usecase "Создание и проведение тестов" as UC_CreateTests usecase "Прохождение тестов" as UC_TakeTests usecase "Отслеживание прогресса" as UC_TrackProgress usecase "Управление пользователями" as UC_ManageUsers usecase "Управление контентом" as UC_ManageContent usecase "Обратная связь и оценка" as UC_Feedback usecase "Уведомления и напоминания" as UC_Notifications usecase "Форумы и обсуждения" as UC_Forums Student --> UC_Register Student --> UC_Authenticate Student --> UC_ViewCourses Student --> UC_Enroll Student --> UC_TakeTests Student --> UC_TrackProgress Student --> UC_Feedback Student --> UC_Notifications Student --> UC_Forums Teacher --> UC_Authenticate Teacher --> UC_ManageCourses Teacher --> UC_ConductClasses Teacher --> UC_CreateTests Teacher --> UC_TrackProgress Teacher --> UC_ManageContent Teacher --> UC_Feedback Teacher --> UC_Notifications Teacher --> UC_Forums Administrator --> UC_Authenticate Administrator --> UC_ManageUsers Administrator --> UC_ManageContent @enduml
Объяснение:
Актёры: Student, Teacher, и Admin представляют пользователей системы.
Сценарии использования: Каждый use case описывает функциональность, доступную для актёров.
Связи: Стрелки показывают, какие актёры могут выполнять какие сценарии использования.
Вертикальное расположение:
В PlantUML актёры по умолчанию располагаются горизонтально. Чтобы изменить это, можно использовать вертикальное расположение, как показано выше, где Teacher и Admin расположены под Student.
Эта диаграмма поможет визуализировать взаимодействие пользователей с системой и определить основные функциональные требования. Вы можете скопировать этот код в любой PlantUML-редактор, чтобы сгенерировать диаграмму.
Сгенерированный UML-скрипт был затем визуализирован с помощью опенсорсного инструмента PlantUML:

На следующем шаге создаем доменную модель. Задаем такой запрос для Jmix AI Assistant:
«Разработай доменную модель для системы, описанной на use case диаграмме: <сюда подставляем UML-скрипт>».
Получаем доменную модель с ключевыми сущностями, связанными с образовательной платформой, такими как пользователи, курсы, уроки, материалы, тесты, задания и другие:
Скрытый текст
Чтобы разработать модель домена для системы образовательной платформы, описанной в диаграмме вариантов использования, нам необходимо определить ключевые сущности и их взаимосвязи. Модель домена будет представлять основные понятия и их взаимодействие в системе.
Модель домена в PlantUML
Ниже приведен код PlantUML для модели домена образовательной платформы:
@startuml class User { +String username +String password +String email +register() +authenticate() } class Student { +enrollInCourse(Course) +takeTest(Test) +trackProgress() +giveFeedback(Course) } class Teacher { +createCourse() +manageCourse(Course) +conductClass(Course) +createTest(Course) +trackStudentProgress(Student) +manageContent(Content) } class Administrator { +manageUsers(User) +manageContent(Content) } class Course { +String title +String description +List<Content> contents +List<Student> enrolledStudents +addContent(Content) +removeContent(Content) } class Test { +String title +Date date +Course course +List<Question> questions +addQuestion(Question) +removeQuestion(Question) } class Content { +String title +String type +String data } class Question { +String text +List<String> options +String correctAnswer } class Notification { +String message +Date date +sendTo(User) } class Forum { +String topic +List<Post> posts +addPost(Post) } class Post { +String author +String content +Date date } User <|-- Student User <|-- Teacher User <|-- Administrator Course "1" -- "*" Content Course "1" -- "*" Student Course "1" -- "*" Test Test "1" -- "*" Question Forum "1" -- "*" Post @enduml
Объяснение:
Сущности:
User: базовый класс для всех пользователей с общими атрибутами и методами.
Student, Teacher, Administrator: специализированные классы, наследуемые от User, каждый с определенными методами.
Course: представляет курс с такими атрибутами, как название и описание, а также методы управления контентом и учащимися.
Test и Question: представляют тесты и вопросы к ним, связанные с курсами.
Content: представляет учебные материалы в рамках курса.
Notification: представляет сообщения, отправленные пользователям.
Forum и Post: представляют дискуссионные форумы и записи в них.
Отношения:
Наследование используется для определения Student, Teacher, и Administrator как специализированных типов User.
Ассоциации между Course и Content, Student и Test используется для представления их отношений.
Test связан ассоциацией с Question для представления структуры теста.
Эта модель домена обеспечивает структурированное представление ключевых сущностей и их взаимодействий в системе образовательной платформы. Вы можете использовать эту модель в качестве основы для реализации логики бэкенда системы.
Визуализируем доменную модель с помощью того же инструмента:

Созданная модель сыровата, поэтому для ее доработки даем такой запрос Jmix AI Assistant:
«Уточни поля для классов Teacher, Student, Administrator».
Обновленная доменная модель выглядит так:

Теперь классы Teacher, Student и Administrator наследуются от базового класса User и имеют следующие дополнительные поля и связи, специфичные для каждой роли:
Student: Включает поля для отслеживания регистрации и прогресса.
Teacher: Включает поля для управления курсами и специализацией.
Administrator: Включает поля для управления ролями и разрешениями.
Продолжаем уточнять запрос:
«Переименуй Content в Module и добавь информацию по длительности для Material, Test и Assignment».
Получаем:

Теперь класс Content переименован в Module, а для классов Material, Test и Assignment добавлено новое поле «duration» для отражения длительности материала, теста или задания. Эта длительность может быть измерена в минутах, часах или днях в зависимости от контекста и требований системы.
Вторая фаза эксперимента: использование Jmix AI Assistant для реализации доменной модели на Java
Главное отличие от статьи [1] заключается в том, что разработка кода будет вестись с помощью Jmix AI Assistant без использования сторонних генераторов кода.
Для реализации доменной модели на Java даем такой запрос Jmix AI Assistant:
Реализовать доменную модель на JMIX
Получаем ответ:
Чтобы реализовать доменную модель образовательной платформы в Jmix, вам нужно определить сущности, которые представляют основные компоненты вашей системы. Ниже приведено пошаговое руководство по созданию этих сущностей с помощью Jmix, основанное на информации, полученной из документации и форумов.
Скрытый текст
Пошаговое решение
Создайте проект Jmix:
Убедитесь, что в IntelliJ IDEA установлена Jmix Studio.
Создайте новый проект Jmix или откройте существующий.
Определите сущности:
В Jmix сущности - это классы Java, аннотированные @JmixEntity и обычно расширяющие StandardEntity или BaseUuidEntity для автоматической генерации идентификаторов.
Создайте сущность User:
Это будет базовый класс для Student, Teacher и Administrator.
@JmixEntity @Table(name = "USER") @Entity public class User extends BaseUuidEntity { @Column(name = "USERNAME", nullable = false, unique = true) private String username; @Column(name = "PASSWORD", nullable = false) private String password; @Column(name = "EMAIL", nullable = false) private String email; // Getters and setters }
Создайте сущность Student:
Расширьте класс User и добавьте определенные поля.
@JmixEntity @Table(name = "STUDENT") @Entity public class Student extends User { @Column(name = "STUDENT_ID", nullable = false, unique = true) private String studentId; @Column(name = "ENROLLMENT_DATE") private LocalDate enrollmentDate; // Relationships and additional fields }
Создайте сущность Teacher:
Расширьте класс User и добавьте определенные поля.
@JmixEntity @Table(name = "TEACHER") @Entity public class Teacher extends User { @Column(name = "TEACHER_ID", nullable = false, unique = true) private String teacherId; @Column(name = "HIRE_DATE") private LocalDate hireDate; @Column(name = "SPECIALIZATION") private String specialization; // Relationships and additional fields }
Создайте сущность Administrator:
Расширьте класс User и добавьте определенные поля.
@JmixEntity @Table(name = "ADMINISTRATOR") @Entity public class Administrator extends User { @Column(name = "ADMIN_ID", nullable = false, unique = true) private String adminId; @Column(name = "ROLE") private String role; // Additional fields }
Создайте сущность Course:
Определите структуру курса и взаимосвязи.
@JmixEntity @Table(name = "COURSE") @Entity public class Course extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DESCRIPTION") private String description; // Relationships with Module, Student, etc. }
Создайте сущность Module:
Представляет собой модуль в рамках курса.
@JmixEntity @Table(name = "MODULE") @Entity public class Module extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DESCRIPTION") private String description; // Relationships with Material, Test, Assignment }
Создайте сущности Material, Test и Assignment:
Включите поля продолжительности duration.
@JmixEntity @Table(name = "MATERIAL") @Entity public class Material extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "TYPE") private String type; @Column(name = "DATA") private String data; @Column(name = "DURATION") private Integer duration; // Duration in minutes } @JmixEntity @Table(name = "TEST") @Entity public class Test extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DATE") private LocalDate date; @Column(name = "DURATION") private Integer duration; // Duration in minutes // Relationships with Question } @JmixEntity @Table(name = "ASSIGNMENT") @Entity public class Assignment extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DESCRIPTION") private String description; @Column(name = "DURATION") private Integer duration; // Duration in minutes @Column(name = "DUE_DATE") private LocalDate dueDate; }
Объяснение:
Наследование: Student, Teacher и Administrator расширяют сущность User для повторного использования общих полей.
Аннотации: Используйте @JmixEntity и @Table для определения сущностей и их таблиц базы данных.
Отношения: При необходимости определите отношения между объектами, используя аннотации JPA, такие как @OneToMany, @ManyToOne и т.д.
Это определяет комплексную доменную модель для вашей образовательной платформы, используя возможности Jmix по управлению сущностями и их сохранению.
Просим нейросеть разбить классы по пакетам:
Разбей все классы по пакетам, если базовый пакет ru.dva.eduplatform.model.
Каждый пакет должен содержать не более 5 классов.
Получаем ответ:
Чтобы организовать ваши классы модели предметной области в пакеты в базовом пакете ru.dva.eduplatform.model, мы классифицируем их на основе их функциональности и взаимосвязей. Это гарантирует, что каждый пакет будет содержать не более пяти классов, что сделает структуру более управляемой и удобной для сопровождения.
Структура пакетов
Базовый пакет: ru.dva.eduplatform.model
Это корневой пакет для всех ваших классов моделей.
Пакет User: ru.dva.eduplatform.model.user
Содержит классы, связанные с управлением пользователями и ролями.
Пакет Course: ru.dva.eduplatform.model.course
Содержит классы, связанные с курсами и их компонентами.
Пакет Content: ru.dva.eduplatform.model.content
Содержит классы, связанные с образовательным контентом и материалами.
Пакет Assessment: ru.dva.eduplatform.model.assessment
Содержит классы, связанные с тестами, заданиями и вопросами.
Пакет Communication: ru.dva.eduplatform.model.communication
Содержит классы, связанные с уведомлениями и форумами.
Подробное распределение классов
1. Пакет User: ru.dva.eduplatform.model.user
Классы:
User
Student
Teacher
Administrator
2. Пакет Course: ru.dva.eduplatform.model.course
Классы:
Course
Module
3. Пакет Content: ru.dva.eduplatform.model.content
Классы:
Material
4. Пакет Assessment: ru.dva.eduplatform.model.assessment
Классы:
Test
Assignment
Question
5. Пакет Communication: ru.dva.eduplatform.model.communication
Классы:
Notification
Forum
Post
Пример определения класса в пакете
Вот как можно определить класс User в пакете user:
package ru.dva.eduplatform.model.user; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @JmixEntity @Table(name = "USER") @Entity public class User extends BaseUuidEntity { @Column(name = "USERNAME", nullable = false, unique = true) private String username; @Column(name = "PASSWORD", nullable = false) private String password; @Column(name = "EMAIL", nullable = false) private String email; // Getters and setters }
Объяснение:
Организация пакетов: Каждый пакет группирует связанные классы, при этом ни один пакет не превышает пяти классов.
Модульность: Такая структура повышает модульность, облегчая управление и расширение приложения.
Ремонтопригодность: Благодаря организации классов в логические пакеты кодовая база становится более удобной для сопровождения и навигации.
Эта структура пакетов поможет вам поддерживать чистую и организованную кодовую базу для вашей образовательной платформы.
Просим нейросеть разбить все классы по пакетам:
Убедись, что все импорты корректны и соответствуют созданным пакетам.
Выведи код всех классов, указав название пакета каждого класса и импорты.
Для каждого класса должен быть указан пакет.
Убедись, что в результатах есть все классы.
Получаем ответ:
Ниже приведен полный код для всех классов, организованный в соответствующие пакеты с правильным импортом. Каждый класс включает объявление пакета и необходимый импорт.
Скрытый текст
User Package: ru.dva.eduplatform.model.user
User.java
package ru.dva.eduplatform.model.user; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @JmixEntity @Table(name = "USER") @Entity public class User extends BaseUuidEntity { @Column(name = "USERNAME", nullable = false, unique = true) private String username; @Column(name = "PASSWORD", nullable = false) private String password; @Column(name = "EMAIL", nullable = false) private String email; // Getters and setters }
Student.java
package ru.dva.eduplatform.model.user; import io.jmix.core.metamodel.annotation.JmixEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.time.LocalDate; import java.util.List; import java.util.Map; import ru.dva.eduplatform.model.course.Course; @JmixEntity @Table(name = "STUDENT") @Entity public class Student extends User { @Column(name = "STUDENT_ID", nullable = false, unique = true) private String studentId; @Column(name = "ENROLLMENT_DATE") private LocalDate enrollmentDate; // Relationships and additional fields }
Teacher.java
package ru.dva.eduplatform.model.user; import io.jmix.core.metamodel.annotation.JmixEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.time.LocalDate; import java.util.List; import ru.dva.eduplatform.model.course.Course; import ru.dva.eduplatform.model.content.Content; @JmixEntity @Table(name = "TEACHER") @Entity public class Teacher extends User { @Column(name = "TEACHER_ID", nullable = false, unique = true) private String teacherId; @Column(name = "HIRE_DATE") private LocalDate hireDate; @Column(name = "SPECIALIZATION") private String specialization; // Relationships and additional fields }
Administrator.java
package ru.dva.eduplatform.model.user; import io.jmix.core.metamodel.annotation.JmixEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.util.Set; import ru.dva.eduplatform.model.content.Content; @JmixEntity @Table(name = "ADMINISTRATOR") @Entity public class Administrator extends User { @Column(name = "ADMIN_ID", nullable = false, unique = true) private String adminId; @Column(name = "ROLE") private String role; // Additional fields }
Course Package: ru.dva.eduplatform.model.course
Course.java
package ru.dva.eduplatform.model.course; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.util.List; import ru.dva.eduplatform.model.user.Student; import ru.dva.eduplatform.model.content.Module; @JmixEntity @Table(name = "COURSE") @Entity public class Course extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DESCRIPTION") private String description; // Relationships with Module, Student, etc. }
Module.java
package ru.dva.eduplatform.model.course; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.util.List; import ru.dva.eduplatform.model.content.Material; import ru.dva.eduplatform.model.assessment.Test; import ru.dva.eduplatform.model.assessment.Assignment; @JmixEntity @Table(name = "MODULE") @Entity public class Module extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DESCRIPTION") private String description; // Relationships with Material, Test, Assignment }
Content Package: ru.dva.eduplatform.model.content
Material.java
package ru.dva.eduplatform.model.content; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @JmixEntity @Table(name = "MATERIAL") @Entity public class Material extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "TYPE") private String type; @Column(name = "DATA") private String data; @Column(name = "DURATION") private Integer duration; // Duration in minutes }
Assessment Package: ru.dva.eduplatform.model.assessment
Test.java
package ru.dva.eduplatform.model.assessment; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.time.LocalDate; import java.util.List; import ru.dva.eduplatform.model.course.Course; import ru.dva.eduplatform.model.assessment.Question; @JmixEntity @Table(name = "TEST") @Entity public class Test extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DATE") private LocalDate date; @Column(name = "DURATION") private Integer duration; // Duration in minutes // Relationships with Question }
Assignment.java
package ru.dva.eduplatform.model.assessment; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.time.LocalDate; @JmixEntity @Table(name = "ASSIGNMENT") @Entity public class Assignment extends BaseUuidEntity { @Column(name = "TITLE", nullable = false) private String title; @Column(name = "DESCRIPTION") private String description; @Column(name = "DURATION") private Integer duration; // Duration in minutes @Column(name = "DUE_DATE") private LocalDate dueDate; }
Question.java
package ru.dva.eduplatform.model.assessment; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.util.List; @JmixEntity @Table(name = "QUESTION") @Entity public class Question extends BaseUuidEntity { @Column(name = "TEXT", nullable = false) private String text; @Column(name = "OPTIONS") private List<String> options; @Column(name = "CORRECT_ANSWER") private String correctAnswer; }
Communication Package: ru.dva.eduplatform.model.communication
Notification.java
package ru.dva.eduplatform.model.communication; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.time.LocalDate; import ru.dva.eduplatform.model.user.User; @JmixEntity @Table(name = "NOTIFICATION") @Entity public class Notification extends BaseUuidEntity { @Column(name = "MESSAGE", nullable = false) private String message; @Column(name = "DATE") private LocalDate date; // Method to send notification to a user }
Forum.java
package ru.dva.eduplatform.model.communication; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.util.List; import ru.dva.eduplatform.model.communication.Post; @JmixEntity @Table(name = "FORUM") @Entity public class Forum extends BaseUuidEntity { @Column(name = "TOPIC", nullable = false) private String topic; // Relationships with Post }
Post.java
package ru.dva.eduplatform.model.communication; import io.jmix.core.metamodel.annotation.JmixEntity; import io.jmix.core.entity.BaseUuidEntity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.time.LocalDate; @JmixEntity @Table(name = "POST") @Entity public class Post extends BaseUuidEntity { @Column(name = "AUTHOR", nullable = false) private String author; @Column(name = "CONTENT", nullable = false) private String content; @Column(name = "DATE") private LocalDate date; }
Объяснение:
Организация пакетов: Каждый класс помещается в пакет, отражающий его роль в системе, при этом ни один пакет не должен превышать пяти классов.
Импорт: Включены все необходимые файлы импорта, гарантирующие, что каждый класс может корректно функционировать в своем пакете.
Аннотации: Аннотации Jmix используются для определения сущностей и их сохранения в базе данных.
Этот код обеспечивает хорошо организованную и функциональную модель предметной области для вашей образовательной платформы с использованием Jmix.
Заключение
В рамках одной небольшой заметки невозможно рассказать обо всех наших экспериментах по разработке кода с помощью искусственного интеллекта.
Выполнение описанных экспериментов заняло не более пяти минут. К сожалению их описание потребовало значительно больше времени. Вероятно и прочтение этой заметки потребовало больше пяти минут.
Если эта тема интересна для читателей автор готов продолжить описание экспериментов по разработке кода с помощью Jmix AI Assistant, включая следующие:
Генерация класса, заполняющего доменную модель тестовыми данными
Обеспечение персистентности базы данных
Реализация REST API для модели домена, включая создание контроллеров и REST сервисов
Генерация пользовательского интерфейса
