- PVSM.RU - https://www.pvsm.ru -
Эта заметка инспирирована статей на Хабре Разработка Java-проекта с ChatGPT-4: от идеи до реализации [1] [1]. После ее прочтения автор начал экспериментировать в разработке ПО с различными AI ассистентами.
Увидев статью блога Jmix AI Assistant — ваш помощник в освоении Jmix [2][2], решил реализовать с помощью Jmix AI Assistant приложение аналогичное приведенному в статье [1].
Главное отличие от указанной статьи в том, что вся разработка будет вестись с помощью одного инструмента Jmix AI Assistant без использования сторонних генераторов кода.
Как и в статье [1] мы будем создавать с нуля образовательную платформу по типу условных Udemy или Coursera.
«Я хочу создать систему Образовательная платформа: создание системы для проведения онлайн курсов, тестирования и отслеживания прогресса студентов.
Укажи 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 [3]:
На следующем шаге создаем доменную модель. Задаем такой запрос для Jmix AI Assistant:
«Разработай доменную модель для системы, описанной на use case диаграмме: <сюда подставляем UML-скрипт>».
Получаем доменную модель с ключевыми сущностями, связанными с образовательной платформой, такими как пользователи, курсы, уроки, материалы, тесты, задания и другие:
Чтобы разработать модель домена для системы образовательной платформы, описанной в диаграмме вариантов использования, нам необходимо определить ключевые сущности и их взаимосвязи. Модель домена будет представлять основные понятия и их взаимодействие в системе.
Ниже приведен код 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» для отражения длительности материала, теста или задания. Эта длительность может быть измерена в минутах, часах или днях в зависимости от контекста и требований системы.
Главное отличие от статьи [1] заключается в том, что разработка кода будет вестись с помощью Jmix AI Assistant без использования сторонних генераторов кода.
Реализовать доменную модель на JMIX
Получаем ответ:
Чтобы реализовать доменную модель образовательной платформы в Jmix, вам нужно определить сущности, которые представляют основные компоненты вашей системы. Ниже приведено пошаговое руководство по созданию этих сущностей с помощью Jmix, основанное на информации, полученной из документации и форумов.
Создайте проект Jmix:
Убедитесь, что в IntelliJ IDEA установлена Jmix Studio.
Создайте новый проект Jmix или откройте существующий.
Определите сущности:
В Jmix сущности - это классы Java, аннотированные @JmixEntity [4] и обычно расширяющие 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 [4] и @Table [5] для определения сущностей и их таблиц базы данных.
Отношения: При необходимости определите отношения между объектами, используя аннотации JPA, такие как @OneToMany [6], @ManyToOne [7] и т.д.
Это определяет комплексную доменную модель для вашей образовательной платформы, используя возможности 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
Содержит классы, связанные с уведомлениями и форумами.
Классы:
User
Student
Teacher
Administrator
Классы:
Course
Module
Классы:
Material
Классы:
Test
Assignment
Question
Классы:
Notification
Forum
Post
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
}
Организация пакетов: Каждый пакет группирует связанные классы, при этом ни один пакет не превышает пяти классов.
Модульность: Такая структура повышает модульность, облегчая управление и расширение приложения.
Ремонтопригодность: Благодаря организации классов в логические пакеты кодовая база становится более удобной для сопровождения и навигации.
Эта структура пакетов поможет вам поддерживать чистую и организованную кодовую базу для вашей образовательной платформы.
Просим нейросеть разбить все классы по пакетам:
Убедись, что все импорты корректны и соответствуют созданным пакетам.
Выведи код всех классов, указав название пакета каждого класса и импорты.
Для каждого класса должен быть указан пакет.
Убедись, что в результатах есть все классы.
Получаем ответ:
Ниже приведен полный код для всех классов, организованный в соответствующие пакеты с правильным импортом. Каждый класс включает объявление пакета и необходимый импорт.
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
}
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
}
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
}
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
}
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.
}
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
}
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
}
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
}
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;
}
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;
}
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
}
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
}
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 сервисов
Генерация пользовательского интерфейса
Автор: val6852
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/414256
Ссылки в тексте:
[1] Разработка Java-проекта с ChatGPT-4: от идеи до реализации: https://habr.com/ru/companies/ibs/articles/833034/
[2] Jmix AI Assistant — ваш помощник в освоении Jmix : https://www.jmix.ru/blog/jmix-ai-assistant/
[3] PlantUML: https://plantuml-editor.kkeisuke.dev/
[4] @JmixEntity: https://www.pvsm.ru/users/JmixEntity
[5] @Table: https://www.pvsm.ru/users/Table
[6] @OneToMany: https://www.pvsm.ru/users/OneToMany
[7] @ManyToOne: https://www.pvsm.ru/users/ManyToOne
[8] Источник: https://habr.com/ru/articles/891166/?utm_campaign=891166&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.