# IDEology 设计文档

## 绪论

### 项目背景和意义

在现代软件开发领域，集成开发环境（IDE）扮演着至关重要的角色。随着软件开发的不断发展和复杂化，开发者需要一个强大的工具，来帮助他们提高生产力、降低开发成本、减少错误，并在项目开发周期内快速迭代。IDEology
作为一款综合性集成开发环境，旨在满足这些需求。

### 国际研究现状

国际上有许多集成开发环境（IDE），如 Visual Studio、IntelliJ IDEA、Visual Studio Code、Eclipse、PyCharm、NetBeans
等。这些软件可以满足不同领域和项目的需求。

### 传统项目的不足

传统项目使用的技术比较陈旧和臃肿以及性能不足,比如使用 Java Swing 框架作为 UI 开发的 IntelliJ IDEA、使用 OSGi (Open
Service Gateway Initiative) 框架为基础核心的 Eclipse、拥有孱弱的性能的 Visual Studio Code、无法跨平台的 Visual Studio。

### 本项目的研究内容和目标

本项目将使用微内核架构来开发一个全新的 IDE,解决传统项目的不足,并且对JavaFX的开发提供额外的支持。

## 项目计划

### v0.0.1

完善设计文档、开发文档和软件编写并且打包成功。

### v0.0.2

移植老项目 [JNotepad](https://gitee.com/jcnc-org/JNotepad) 的大部分功能,使用模块化重构项目。

## 架构设计

IDEology 采用微内核架构，主要分为[用户模块](#用户模块)
、[核心模块](#核心模块)、[IMC](#imc)和[微内核](#微内核)。

![IDEology　架构图](img/IDEology-Framework.svg)

### 用户模块

主要包含一些非必要的模块，包括 IDE 模块(IDE模块里面也包含很多模块,如代码编辑器模块等)
，内存管理模块，文件管理模块，网络模块，资源文件模块，插件模块，内存管理模块等。

这个设计旨在实现IDE功能、有效管理内存资源、处理文件和网络通信、管理资源文件以及支持插件扩展。

这些模块是上层用户模块不是底层核心模块所以一个 IDEology 程序可以不包含这些模块而运行。

#### IDE模块

负责提供应用程序的IDE功能实现。

- 用户界面：提供可定制的用户界面，包括主题、窗口布局和快捷键设置等。


- 文件管理：提供文件和文件夹的管理功能，允许用户轻松浏览项目文件。


- 多种编程语言：包括常见的编程语言如Java、Python、C/C++等。


- 代码编辑器：提供语法高亮、代码提示、代码折叠等功能。


- 项目管理：能够创建、打开、保存和管理项目。


- 调试器：集成调试工具，能够在开发过程中进行调试代码。


- 版本控制：支持常见的版本控制系统如Git，允许用户进行版本管理。


- 构建和部署：集成构建工具，方便用户构建和部署应用程序。

#### 内存管理模块

负责管理应用程序的内存资源。

- 内存分配和释放： 管理应用程序的内存分配和释放，确保有效利用内存资源，避免内存泄漏和溢出。


- 内存优化： 实施内存优化策略，包括垃圾回收、内存池等，以提高内存利用率和减少内存泄漏。


- 内存监控： 提供内存监控工具，以帮助开发者识别和解决内存相关问题。

#### 文件管理模块

负责管理项目中的文件和文件夹。

- 文件浏览： 提供文件浏览器，允许用户轻松访问和浏览项目文件。


- 文件操作： 支持文件的创建、删除、复制、剪切、重命名等操作。


- 版本控制整合： 集成版本控制系统，以便开发者可以轻松管理和跟踪文件版本。

#### 网络管理模块

负责处理与网络通信相关的功能。

- 网络连接： 提供网络连接管理，包括建立、维护和断开网络连接。


- 数据传输： 实现数据传输功能，支持网络请求、响应和数据解析。


- 网络安全： 考虑网络安全问题，如加密通信、身份验证和防止网络攻击。

#### 资源文件管理模块

负责管理应用程序的资源文件，如图像、音频、文本文件等。

- 资源加载： 提供资源加载和管理功能，以确保应用程序能够访问所需的资源。


- 资源更新： 支持资源的更新和替换，以便应对应用程序版本迭代。


- 资源编辑： 考虑资源文件的编辑和导出功能，以支持开发者对资源进行定制和修改。

#### 插件模块

负责管理应用程序的插件功能，如提供API、插件市场等。

- 插件 API：提供丰富的插件 API，使插件开发者可以轻松地与IDE的核心功能进行交互。这包括对编辑器、项目管理、调试器、文件管理等的访问。


- 插件生态系统：允许第三方开发者创建和发布插件，为 IDE 增加功能。


- 插件安全性：确保插件不会危害IDE的稳定性和安全性。


- 插件市场：提供一个插件市场，使用户可以轻松查找、安装和更新插件。提供用户评价和反馈的功能。

### 核心模块

主要包含一些必要的模块，例如通用组件模块(包含UI组件模块和发工具模块)。

核心模块是底层核心模块所以一个 IDEology 程序必须包含这个模块才能运行。

#### 通用组件模块

包括UI组件模块（如 JavaFX），开发工具模块等重要功能模块。

- UI组件模块：提供了与用户界面相关的功能，例如窗口、按钮、文本框等，封装了一些组件


- 开发工具模块：提供开发时常用的工具。

### IMC

Inter Module Communication (IMC) 负责提供标准接口和通信协议，用于模块之间的信息传递和功能调用，

- IMC模块：是标准化的接口和通信协议，模块可以通过IMC调用来进行信息传递和功能调用（如消息队列、共享对象、信号量等）。

### 微内核

负责模块管理等功能，是整个项目的核心，除了内核以上设计都是运行在内核上的模块。

- 模块管理：能够发现、加载、安装、卸载、更新和管理模块。

## 项目设计优势

### 技术可行性

- JavaFX 提供了现代、交互式和富客户端用户界面的功能，包括多媒体支持和丰富的用户界面组件。它非常适合构建一个功能丰富的 IDE。

### 文档和支持

- 提供详细的文档和在线帮助资源。


- 提供用户支持，包括论坛、社交媒体和电子邮件支持。

### 成本可行性

- JavaFX 是一个免费的开源工具包，不会增加额外的许可费用。相对于商业GUI工具包，成本较低。

### 社区和生态系统

- Java 拥有一个活跃的用户社区和丰富的生态系统。有大量教程、文档和第三方库可用，以帮助项目解决问题和支持开发。

### 未来可维护性

- JavaFX 仍然得到支持和更新，满足 IDE 项目的长期可维护性要求。

### 性能和稳定性

- JavaFX 已在项目 [JNotepad](https://gitee.com/jcnc-org/JNotepad) 证明了其性能和稳定性。它可以提供足够的性能和稳定性，以满足IDE
  项目的需求。

### 跨平台支持

- JavaFX 提供了跨平台支持，可以在多个操作系统上运行，包括 Windows、macOS、Linux 和嵌入式系统。这与IDE 的跨平台目标一致。

### 微内核架构设计

- 模块化：微内核架构将系统分为相对独立的模块，每个模块负责一个特定的核心功能。这使得系统更容易理解、维护和扩展，因为不同的模块可以独立开发和测试。


- 可扩展性：由于微内核服务是相对独立的，可以相对容易地添加新的服务或升级现有的服务，从而实现系统的功能扩展。这对于不断演化的需求非常重要。


- 灵活性：微内核架构使系统更加灵活，因为它可以根据不同的需求和环境配置不同的服务。这允许定制化以及作为基础二次开发。


- 可维护性：由于模块化性和清晰的接口，微内核架构提高了系统的可维护性。单独的模块可以更容易地进行维护、测试和替换。


- 高性能：一些微内核架构可以通过合理的模块划分和通信机制设计来提高性能。例如，只加载和运行必要的服务，减少了不必要的开销。


- 安全性：微内核架构可以提高系统的安全性，因为不同的服务可以运行在独立的隔离环境中。这有助于防止错误的传播，提高了系统的稳定性和安全性。


- 接口清晰性：微内核架构强调定义清晰的接口和通信机制，这有助于不同服务之间的协作。它提供了一种标准化的方式来进行通信和数据交换。


- 可测试性：模块化的微内核架构更容易进行单元测试，因为每个服务可以独立测试。这有助于及早发现和解决问题。

## 详细设计

### 模块设计
IDEology 的内核之上一切皆模块，开发人员需要设计自己的模块并且在内核进行注册。

模块设计指南：
- 清单文件：规定插件的版本，简介，作者，版本等。
- 拓展节点：模块通过设计自己的暴露点，可以让其他模块加载到自己的拓展节点上。
- 逻辑代码区域：模块可以使用　IDEology SDK或者 JDK 来别写模块工作代码。

### 内核设计
IDEology 的内核采用简单设计，仅仅负责模块的发现，加载，卸载等功能。
详情见[开发文档(待编写)](#ideology-设计文档)

## 软件部署
(待编写)

## 维护和支持
(待编写)

## 文档和帮助
(待编写)

## 反馈和改进
(待编写)


## 沟通和合作
(待编写)
