1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/agile-framework-agile-mvc

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Agile-Framework

Серия Agile-MVC стремится помочь разработчикам освободиться от сложного кода. Она основана на неизменной концепции «использовать самый простой код для создания самого красивого искусства». Spring-Agile предоставляет комплексное решение для веб-разработки. Этот проект включает в себя различные необходимые компоненты и вспомогательные инструменты, связанные с веб-разработкой, которые облегчают разработчикам использование этих компонентов для разработки монолитных и распределённых приложений с помощью модели программирования Agile.

Agile-mvc является основой серии фреймворков Agileframework. В настоящее время он успешно породил более десятка независимых и специализированных функциональных компонентов разработки, таких как cloud.agileframework, что заслуживает вашего ожидания.

Основные функции:

  • Почти нулевое вторжение кода. Компоненты agile-mvc почти достигли нулевых требований к спецификации, даже без ощутимого эффекта разработки. За исключением объявления @AgileService (управление слоем Agile) и @Mapping (адресное сопоставление, которое также можно опустить), практически нет необходимости в появлении специальных следов кода Agile в нашем коде. Это гарантирует, что все возможности традиционного MVC трёхслойной архитектуры реализованы с использованием самых основных методов Java.
  • Абстракция слоя управления. Наиболее выдающейся особенностью agile-mvc в традиционном MVC трёхслойном режиме является предоставление абстрактного контроллера MainController, который решает проблемы суждения параметров, переадресации запросов и сборки представлений. Большая часть кода слоя управления опущена, и цель одного метода Java — реализовать API-сервис. В то же время, благодаря идее нулевого вторжения кода, поддержка сложных бизнес-сценариев для пользовательских контроллеров и сервисов по-прежнему сохраняется. Эта функция значительно снижает объём кода и стоимость обучения веб-проектов, а также позволяет достичь цели написания API-сервисов с использованием методов Java.
  • Автоматическое сопоставление адресов API. В spring-mvc часто требуется большое количество аннотаций, таких как RequestMapping и GetMapping, для сопоставления адресов. Agile-mvc предоставляет адресное сопоставление по умолчанию для @AgileService сервисов (имя класса + имя метода + размытие). Таким образом, в проектах, не использующих стиль Restful API, все объявления о сопоставлении адресов могут быть опущены. Кроме того, agile-mvc предоставляет аннотацию @Mapping, которая реализует эффект RequestMapping в традиционном слое обслуживания через встроенный обработчик AgileMappingHandlerMapping. Использование такое же, как и у RequestMapping, без каких-либо различий, что гарантирует отсутствие затрат на обучение разработчиков.
  • Мощный анализатор параметров. Анализатор параметров предоставляется комплектом common-util серии agile для расширения возможностей spring-mvc сверх воображения. Он включает анализ параметров, разделение запятыми строк в коллекции, преобразование JSON в объекты POJO с подчёркиванием атрибутов, многоуровневые вложенные объекты, распознавание различных типов данных коллекций, анализ строковых времён, загрузку файлов и ввод потоков файлов и т. д. Разработчики могут напрямую опускать сложные типы преобразования параметров, тем самым дополнительно сокращая объём кода, не связанного с бизнесом.
  • Настраиваемый унифицированный шаблон ответа. Agile-mvc обеспечивает настраиваемый вход шаблона ответа, позволяя определять индивидуальные унифицированные форматы ответов в разных проектах. Ответные заголовки и тела информации могут быть настроены.
  • Интеграция agile-validate для проверки параметров. С помощью компонента проверки параметров agile-validate реализуется проверка параметров для методов слоя управления springmvc и методов сервиса @AgileService. Он компенсирует недостатки springmvc в проверке параметров и поддерживает проверку параметров с настраиваемой логикой.
  • Автоматическая конфигурация сканирования. Благодаря инструменту PropertiesUtil комплекта common-util, реализуется сканирование конфигурации в среде, избегая жёсткого кодирования конфигурации и распечатывая конфигурацию в порядке приоритета при инициализации функций. Принцип сканирования конфигурации: внешняя > внутренняя, та же самая внутренняя сортировка по имени в порядке приоритета.
  • Унифицированная обработка исключений. Все исключения обрабатываются единообразно, включая перехват, форматирование ответов и ведение журнала.
  • Связь между исключениями и интернационализацией сообщений. Все исключения поддерживают связь с конфигурацией интернационализации, чтобы при перехвате исключений можно было получить конфигурацию интернационализации и составить ответное сообщение. Таким образом, разработчики могут непосредственно возвращать сообщения об ошибках, связанных с бизнесом, с помощью оператора throw в любом месте программы.
  • Глобальный асинхронный запрос. Все сервисы AgileService используют асинхронные запросы, и разработчикам нужно только написать методы Java для реализации асинхронных запросов, время ожидания которых можно настроить гибко.
  • CORS междоменный. Встроенный фильтр CORS решает проблему междоменного доступа переднего плана. Можно выделить следующие фрагменты текста, которые удалось перевести:
  1. Данный фрагмент представляет собой метод с аргументом типа Set<MultipartFile>:
public Object myBusinessMethod(Set<MultipartFile> file){
}
  1. В этом фрагменте содержится предупреждение о том, что в AgileService не добавлены некоторые аннотации из Spring MVC:
警告:

1. AgileService代理服务中,未增加对原生springmvc中的参数类注解如@PathVariable、@RequestHeader、@Validated等等一类的注解解析。后续会根据用户反馈考虑增加该部分能力。
  1. Здесь говорится о том, как работает параметр TypeReference:
TypeReference由common-util提供,包为cloud.agileframework.common.util.clazz,使用时一般为匿名内部类方式,具体方式请参照common-util组件
  1. Этот фрагмент описывает использование аннотации @Mapping:
@Mapping(path = "/test/{id}")
  1. Далее идёт описание параметра проверки:
该参数验证适用于传统控制层与AgileService代理服务,API方式访问时会调用参数验证注解,实现请求拦截。注解支持声明业务代码方式参数验证,例:
  1. Приведён пример использования аннотаций @Validate и @Mapping:
@Validate(value = "file", nullable = false)
@Validate(value = "id", customBusiness = {MyValidate.class})
@Mapping(path = "/test/{id}")
public Object test(int id, MultipartFile[] file) {
        //业务代码
        }
  1. Описан класс MyValidate, который реализует проверку параметров:
//自定义业务验证
public static class MyValidate implements ValidateCustomBusiness {

    //此处params为id值,当验证失败后需要自行组装错误信息List<ValidateMsg>,当错误信息为空集合时,认为参数准确,不进行拦截
    @Override
    public List<ValidateMsg> validate(Object params) {
        return null;
    }
} 
  1. Приведена структура ответа на запрос:
{
    "head": {
        "ip": "192.168.101.42",
        "code": "100002",
        "msg": "参数错误",
        "status": "OK"
    },
    "result": [
        {
            "message": "不允许为空值",
            "state": false,
            "item": "file",
            "itemValue": null
        }
    ]
}
  1. Описана структура унифицированного ответа:
{
    "head": {
        "ip": "172.29.128.1",
        "code": "100000",
        "msg": "操作失败",
        "status": "INTERNAL_SERVER_ERROR"
    },
    "result": null
}
  1. Описано создание собственного шаблона для унифицированных ответов:
@Component
public class CommonResponseFormate extends AbstractResponseFormat {
    @Override
    public Map<String, Object> buildResponseData(Head head, Object result) {
        //head为组件整理后的响应头部信息
        //result为响应体信息
        //自行定制返回结果状态为Map格式返回,该Map将作为ModelAndView中的Model组装成视图写入response
        return null;
    }
}
  1. Описаны различия в обработке запросов между контроллером и сервисом:
+ 控制层

```java
@Controller
public class MyController {
    @RequestMapping("/test")
    public ModelAndView test(String a) {
        //业务代码...
        //设置响应头 head
        AgileReturn.setHead(RETURN.SUCCESS);
        //设置响应体 result
        AgileReturn.add("a", a);
        //构建返回视图
        return AgileReturn.build();
    }
}
  • AgileService 代理服务

@AgileService
public class MyService {
    //任何 return 结果都将组装成 result 部分
    //头部信息则会根据是否捕获 Exception 异常界定 head 内部信息,未捕获情况下均使用正常 success 头
    public Object myBusinessMethod(String param) {
        //业务编码及持久层能力调用...
        return xx;
    }

    //手动设置响应头,返回类型设为 RETURN,该方式存在代码入侵,尽在该方法不存在复用情况下使用为好
    public RETURN myBusinessMethod(String param) {
        //业务代码...

        //构建返回视图
        return RETURN.SUCCESS;
    }

    //利用国际化构造响应头 head,更多 RETURN 用法请参照 wiki
    public RETURN myBusinessMethod(String param) {
        //业务代码...

        //构建返回视图
        return RETURN.byMessage("国际化 key", "国际化参数 1", "国际ization参数 2...");
    }

    //手动设置响应体 result
    public void myBusinessMethod(String param) {
        //业务代码...
        // 设置响应体 result
        AgileReturn.add("a", param);
    }

    //通过异常声明响应头
    //统一一场拦截器捕捉到异常后,会根据异常类引用名去国际化配置文件中获取响应文与响应编码信息,可阅读步骤 11 统一异常处理
    public void myBusinessMethod(String param) throws YourException {
        //业务代码...
        //设置响应体 result
        AgileReturn.add("a", param);
        throw new YourException();
    }}
  1. Описан процесс автоматической конфигурации:
借助 agile 系列套件 common-util 中 PropertiesUtil 的配置加载能力,实现在工程启动阶段自动扫描应用类所在包下以及编译路径下配置文件。避免杂乱的配置文件位置声明。

+ 重点:配置文件加载优先级从编译路径开始计算,层级越深,优先级越低,同层级则按照配置文件名顺序排列。application 配置文件保留最高优先级,优先级越高约被最后加载,覆盖低优先级配置
  覆盖方式为内容覆盖,而不是文件覆盖,所以不同内容且文件名相同的配置文件,内容不会存在覆盖关系,仅对相同 key 值的配置项进行覆�зи。项目在启动阶段会于控制台按照由低到高的优先级顺序打印加载到的配置文件。例如

``` **Конфигурация загрузки процесса не зависит от Spring, загрузка будет заполнена в контейнер Spring впоследствии.**

Параметры конфигурации PropertiesUtil будут использовать эффективные параметры среды из контейнера Spring. Поэтому этот процесс загрузки не влияет на использование динамической конфигурации управления в микросервисной среде.

**Шаг 10: Интернационализация конфигурации**

MessageUtil в пакете spring-util инструментального комплекта Agile позволяет сканировать пути к файлам конфигурации в стиле Ant и совместим с исходным способом настройки. Исходный Spring не поддерживает `spring.messages.basename` с подстановочным знаком `*`, но Agile расширяет эту функцию и сохраняет поддержку для разделения нескольких basename с помощью английской запятой `,`.

В качестве примера интернационализации конфигурации используется файл message.properties. В этой конфигурации компонент будет загружать файлы message_xx.properties из любого уровня пути. Это позволяет избежать сложных объявлений путей к конфигурационным файлам в многомодульных средах разработки.

```yaml
spring:
  messages:
    encoding: UTF-8
    basename: '**/message'

Шаг 11: Унифицированная обработка исключений

Компонент реализует унифицированную обработку исключений с помощью @ControllerAdvice и HandlerExceptionResolver. Любые перехваченные исключения обрабатываются как ответное представление. Разработчики могут определять различные сообщения интернационализации для разных классов исключений. Например, настраиваемый класс исключений com.agile.YourException настраивается следующим образом:

com.agile.YourException=100017: Неверное имя пользователя или пароль, пожалуйста, войдите снова

Здесь ключ — это ссылка на исключение, а значение — код ответа +: + ответное сообщение. Окончательный заголовок ответа выглядит следующим образом:

{
    "head": {
        "ip": "192.168.101.42",
        "code": "100017",
        "msg": "Неверное имя пользователя или пароль, пожалуйста, войдите снова",
        "status": "INTERNAL_SERVER_ERROR"
    },
    "result": null
}

Статус в разделе head определяется по первой цифре кода ответа. По умолчанию код ответа, начинающийся с 2, считается ошибкой сервера и использует HttpStatus.INTERNAL_SERVER_ERROR. Также печатается журнал ошибок. Другие исключения считаются нормальными бизнес-исключениями и используют HttpStatus.OK без печати журнала ошибок.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Spring-Agile предоставляет комплексное решение для веб-разработки. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/agile-framework-agile-mvc.git
git@api.gitlife.ru:oschina-mirror/agile-framework-agile-mvc.git
oschina-mirror
agile-framework-agile-mvc
agile-framework-agile-mvc
master