-(Implementations in other languages will look differently) - -**Everything below is provided as a recommendation, not a rule**. Different projects have different requirements, so any pattern mentioned in this readme should be adjusted to project needs or even skipped entirely if it doesn't fit. In real world production applications, you will most likely only need a fraction of those patterns depending on your use cases. More info in [this](#general-recommendations-on-architectures-best-practices-design-patterns-and-principles) section. - ---- - -- [Domain-Driven Hexagon](#domain-driven-hexagon) -- [Architecture](#architecture) - - [Pros](#pros) - - [Cons](#cons) -- [Diagram](#diagram) -- [Modules](#modules) -- [Application Core](#application-core) -- [Application layer](#application-layer) - - [Application Services](#application-services) - - [Commands and Queries](#commands-and-queries) - - [Commands](#commands) - - [Queries](#queries) - - [Ports](#ports) -- [Domain Layer](#domain-layer) - - [Entities](#entities) - - [Aggregates](#aggregates) - - [Domain Events](#domain-events) - - [Integration Events](#integration-events) - - [Domain Services](#domain-services) - - [Value objects](#value-objects) - - [Domain Invariants](#domain-invariants) - - [Replacing primitives with Value Objects](#replacing-primitives-with-value-objects) - - [Make illegal states unrepresentable](#make-illegal-states-unrepresentable) - - [Validation at compile time](#validation-at-compile-time) - - [Validation at runtime](#validation-at-runtime) - - [Guarding vs validating](#guarding-vs-validating) - - [Domain Errors](#domain-errors) - - [Using libraries inside Application's core](#using-libraries-inside-applications-core) -- [Interface Adapters](#interface-adapters) - - [Controllers](#controllers) - - [Resolvers](#resolvers) - - [DTOs](#dtos) - - [Request DTOs](#request-dtos) - - [Response DTOs](#response-dtos) - - [Additional recommendations](#additional-recommendations) - - [Local DTOs](#local-dtos) -- [Infrastructure layer](#infrastructure-layer) - - [Adapters](#adapters) - - [Repositories](#repositories) - - [Persistence models](#persistence-models) - - [Other things that can be a part of Infrastructure layer](#other-things-that-can-be-a-part-of-infrastructure-layer) -- [Other recommendations](#other-recommendations) - - [General recommendations on architectures, best practices, design patterns and principles](#general-recommendations-on-architectures-best-practices-design-patterns-and-principles) - - [Recommendations for smaller APIs](#recommendations-for-smaller-apis) - - [Behavioral Testing](#behavioral-testing) - - [Folder and File Structure](#folder-and-file-structure) - - [File names](#file-names) - - [Enforcing architecture](#enforcing-architecture) - - [Prevent massive inheritance chains](#prevent-massive-inheritance-chains) -- [Additional resources](#additional-resources) - - [Articles](#articles) - - [Websites](#websites) - - [Blogs](#blogs) - - [Videos](#videos) - - [Books](#books) - -# Architecture - -This is an attempt to combine multiple architectural patterns and styles together, such as: - -- [Domain-Driven Design (DDD)](https://en.wikipedia.org/wiki/Domain-driven_design) -- [Hexagonal (Ports and Adapters) Architecture](https://blog.octo.com/en/hexagonal-architecture-three-principles-and-an-implementation-example/) -- [Secure by Design](https://www.manning.com/books/secure-by-design) -- [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) -- [Onion Architecture](https://herbertograca.com/2017/09/21/onion-architecture/) -- [SOLID Principles](https://en.wikipedia.org/wiki/SOLID) -- [Software Design Patterns](https://refactoring.guru/design-patterns/what-is-pattern) - -And many others (more links below in every chapter). - -Before we begin, here are the PROS and CONS of using a complete architecture like this: - -#### Pros - -- Independent of external frameworks, technologies, databases, etc. Frameworks and external resources can be plugged/unplugged with much less effort. -- Easily testable and scalable. -- More secure. Some security principles are baked in design itself. -- The solution can be worked on and maintained by different teams, without stepping on each other's toes. -- Easier to add new features. As the system grows over time, the difficulty in adding new features remains constant and relatively small. -- If the solution is properly broken apart along [bounded context](https://martinfowler.com/bliki/BoundedContext.html) lines, it becomes easy to convert pieces of it into microservices if needed. - -#### Cons - -- This is a sophisticated architecture which requires a firm understanding of quality software principles, such as SOLID, Clean/Hexagonal Architecture, Domain-Driven Design, etc. Any team implementing such a solution will almost certainly require an expert to drive the solution and keep it from evolving the wrong way and accumulating technical debt. - -- Some practices presented here are not recommended for small-medium sized applications with not a lot of business logic. There is added up-front complexity to support all those building blocks and layers, boilerplate code, abstractions, data mapping etc. Thus, implementing a complete architecture like this is generally ill-suited to simple [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) applications and could over-complicate such solutions. Some principles which are described below can be used in smaller sized applications, but must be implemented only after analyzing and understanding all pros and cons. - -# Diagram - - -Diagram is mostly based on [this one](https://github.com/hgraca/explicit-architecture-php#explicit-architecture-1) + others found online - -In short, data flow looks like this (from left to right): - -- Request/CLI command/event is sent to the controller using plain DTO; -- Controller parses this DTO, maps it to a Command/Query object format and passes it to an Application service; -- Application service handles this Command/Query; it executes business logic using domain services and entities/aggregates and uses the infrastructure layer through ports(interfaces); -- Infrastructure layer maps data to a format that it needs, retrieves/persists data from/to a database, uses adapters for other I/O communications (like sending an event to an external broker or calling external APIs), maps data back to domain format and returns it back to Application service; -- After the Application service finishes doing its job, it returns data/confirmation back to Controllers; -- Controllers return data back to the user (if application has presenters/views, those are returned instead). - -Each layer is in charge of its own logic and has building blocks that usually should follow a [Single-responsibility principle](https://en.wikipedia.org/wiki/Single-responsibility_principle) when possible and when it makes sense (for example, using `Repositories` only for database access, using `Entities` for business logic, etc.). - -**Keep in mind** that different projects can have more or less steps/layers/building blocks than described here. Add more if the application requires it, and skip some if the application is not that complex and doesn't need all that abstraction. - -General recommendation for any project: analyze how big/complex the application will be, find a compromise and use as many layers/building blocks as needed for the project and skip ones that may over-complicate things. - -More in details on each step below. - -# Modules - -This project's code examples use separation by modules (also called components). Each module's name should reflect an important concept from the Domain and have its own folder with a dedicated codebase. Each business use case inside that module gets its own folder to store most of the things it needs (this is also called _Vertical Slicing_). It's easier to work on things that change together if those things are gathered relatively close to each other. Think of a module as a "box" that groups together related business logic. - -Using modules is a great way to [encapsulate](
What are "Use Cases"?
- -[wiki](https://en.wikipedia.org/wiki/Use_case): - -> In software and systems engineering, a use case is a list of actions or event steps typically defining the interactions between a role (known in the Unified Modeling Language as an actor) and a system to achieve a goal. - -Use cases are, simply said, list of actions required from an application. - ---- - -Note: Using validation library instead of custom guards
- -Instead of using custom _guards_ you could use an external validation library, but it's not a good practice to tie domain to external libraries and is not usually recommended. - -Although exceptions can be made if needed, especially for very specific validation libraries that validate only one thing (like specific IDs, for example bitcoin wallet address). Tying only one or just few `Value Objects` to such a specific library won't cause any harm. Unlike general purpose validation libraries which will be tied to domain everywhere, and it will be troublesome to change it in every `Value Object` in case when old library is no longer maintained, contains critical bugs or is compromised by hackers etc. - -Though, it's fine to do full sanity checks using validation framework or library **outside** the domain (for example [class-validator](https://www.npmjs.com/package/class-validator) decorators in `DTOs`), and do only some basic checks (guarding) inside of domain objects (besides business rules), like checking for `null` or `undefined`, checking length, matching against simple regexp etc. to check if value makes sense and for extra security. - -Note about using regexp
- -Be careful with custom regexp validations for things like validating `email`, only use custom regexp for some very simple rules and, if possible, let validation library do its job on more difficult ones to avoid problems in case your regexp is not good enough. - -Also, keep in mind that custom regexp that does same type of validation that is already done by validation library outside of domain may create conflicts between your regexp and the one used by a validation library. - -For example, value can be accepted as valid by a validation library, but `Value Object` may throw an error because custom regexp is not good enough (validating `email` is more complex than just copy - pasting a regular expression found in google. Though, it can be validated by a simple rule that is true all the time and won't cause any conflicts, like every `email` must contain an `@`). Try finding and validating only patterns that won't cause conflicts. - ---- - -Click to see dependency graph
-- -Example tools: - -- [Dependency cruiser](https://github.com/sverweij/dependency-cruiser) - Validate and visualize dependencies for JavaScript / TypeScript. -- [ArchUnit](https://www.archunit.org/) - library for checking the architecture of Java applications - -Read more: - -- [Validate Dependencies According to Clean Architecture](https://betterprogramming.pub/validate-dependencies-according-to-clean-architecture-743077ea084c) -- [Clean Architecture Boundaries with Spring Boot and ArchUnit](https://reflectoring.io/java-components-clean-boundaries/) - -## Prevent massive inheritance chains - -Classes that can be extended should be designed for extensibility and usually should be `abstract`. If class is not designed to be extended, prevent extending it by making class `final`. Don't create inheritance more than 1-2 levels deep since this makes refactoring harder and leads to a bad design. You can use [composition](https://en.wikipedia.org/wiki/Composition_over_inheritance) instead. - -**Note**: in TypeScript, unlike other languages, there is no default way to make class `final`. But there is a way around it using a custom decorator. - -Example file: [final.decorator.ts](src/libs/decorators/final.decorator.ts) - -Read more: - -- [When to declare classes final](https://ocramius.github.io/blog/when-to-declare-classes-final/) -- [Final classes by default, why?](https://matthiasnoback.nl/2018/09/final-classes-by-default-why/) -- [Prefer Composition Over Inheritance](https://medium.com/better-programming/prefer-composition-over-inheritance-1602d5149ea1) - ---- - -# Additional resources - -- [Backend best practices](https://github.com/Sairyss/backend-best-practices) - more best practices that are used here -- [Full-stack application example](https://github.com/Sairyss/full-stack-application-example) - architecture example of a simple full stack application - -## Articles - -- [DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together](https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together) -- [Hexagonal Architecture](https://www.qwan.eu/2020/08/20/hexagonal-architecture.html) -- [Clean architecture series](https://medium.com/@pereiren/clean-architecture-series-part-1-f34ef6b04b62) -- [Clean architecture for the rest of us](https://pusher.com/tutorials/clean-architecture-introduction) -- [An illustrated guide to 12 Factor Apps](https://www.redhat.com/architect/12-factor-app) - -## Websites - -- [The Twelve-Factor App](https://12factor.net/) -- [Refactoring guru - Catalog of Design Patterns](https://refactoring.guru/design-patterns/catalog) - -## Blogs - -- [Vladimir Khorikov](https://enterprisecraftsmanship.com/) -- [Derek Comartin](https://codeopinion.com/) -- [Kamil Grzybek](https://www.kamilgrzybek.com/) -- [Martin Fowler](https://martinfowler.com/) -- [Khalil Stemmler](https://khalilstemmler.com) -- [Herberto Graca](https://herbertograca.com/) - -## Videos - -- [More Testable Code with the Hexagonal Architecture](https://youtu.be/ujb_O6myknY) -- [Playlist: Design Patterns Video Tutorial](https://youtube.com/playlist?list=PLF206E906175C7E07) -- [Playlist: Design Patterns in Object Oriented Programming](https://youtube.com/playlist?list=PLrhzvIcii6GNjpARdnO4ueTUAVR9eMBpc) -- [Herberto Graca - Making architecture explicit](https://www.youtube.com/watch?v=_yoZN9Sb3PM&feature=youtu.be) - -## Books - -- ["Domain-Driven Design: Tackling Complexity in the Heart of Software"](https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215) by Eric Evans -- ["Secure by Design"](https://www.manning.com/books/secure-by-design) by Dan Bergh Johnsson, Daniel Deogun, Daniel Sawano -- ["Implementing Domain-Driven Design"](https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577) by Vaughn Vernon -- ["Clean Architecture: A Craftsman's Guide to Software Structure and Design"](https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164/ref=sr_1_1?dchild=1&keywords=clean+architecture&qid=1605343702&s=books&sr=1-1) by Robert Martin diff --git a/docs/more/ddd/assets/dependency-graph.svg b/docs/more/ddd/assets/dependency-graph.svg deleted file mode 100644 index 48c23e1..0000000 --- a/docs/more/ddd/assets/dependency-graph.svg +++ /dev/null @@ -1,2033 +0,0 @@ - - - - - diff --git a/docs/more/ddd/assets/images/DomainDrivenHexagon.png b/docs/more/ddd/assets/images/DomainDrivenHexagon.png deleted file mode 100644 index d7fdcb4..0000000 Binary files a/docs/more/ddd/assets/images/DomainDrivenHexagon.png and /dev/null differ diff --git a/docs/more/erupt/crud-show.png b/docs/more/erupt/crud-show.png deleted file mode 100644 index bc415f0..0000000 Binary files a/docs/more/erupt/crud-show.png and /dev/null differ diff --git a/docs/more/erupt/crud-simple-menu.png b/docs/more/erupt/crud-simple-menu.png deleted file mode 100644 index 4628092..0000000 Binary files a/docs/more/erupt/crud-simple-menu.png and /dev/null differ diff --git a/docs/more/erupt/menu-main.png b/docs/more/erupt/menu-main.png deleted file mode 100644 index ca730f3..0000000 Binary files a/docs/more/erupt/menu-main.png and /dev/null differ diff --git a/docs/more/erupt/quick-start.md b/docs/more/erupt/quick-start.md deleted file mode 100644 index 0c7450d..0000000 --- a/docs/more/erupt/quick-start.md +++ /dev/null @@ -1,18 +0,0 @@ -# Erupt Quick Start - - -## Simple CRUD -单表操作 -代码: - -```java - -``` -## Menu 配置 - - - - - -## 功能结果 - - \ No newline at end of file diff --git a/docs/more/gradle/gradle-cheatsheet.md b/docs/more/gradle/gradle-cheatsheet.md deleted file mode 100644 index 33b90b4..0000000 --- a/docs/more/gradle/gradle-cheatsheet.md +++ /dev/null @@ -1,7 +0,0 @@ -# Gradle Cheat Sheet - -## Upgrade Gradle Version - -```shell -gradle wrapper --gradle-version 8.3 -``` \ No newline at end of file diff --git a/docs/more/project-structure.png b/docs/more/project-structure.png deleted file mode 100644 index 08aab13..0000000 Binary files a/docs/more/project-structure.png and /dev/null differ diff --git a/docs/more/qa-learn-java/What-to-do.md b/docs/more/qa-learn-java/What-to-do.md deleted file mode 100644 index 9b4ef12..0000000 --- a/docs/more/qa-learn-java/What-to-do.md +++ /dev/null @@ -1,30 +0,0 @@ -# 测试学习JAVA - -如何快速学习? - -- 学习不是目的,目的是可以解决你实际中的问题 -- 实际过程中有什么问题需要使用JAVA解决 - - 接口测试 - - 测试开发平台 - - 集成其他系统 - -## 先大致了解JAVA - -- 环境搭建 -- 基本语法 -- 常见代码运行方式 - -## 学习JAVA的检验供借鉴 - -- 基本操作库 -- 利用现有的仓库 -- 定义问题,快速阅读文档,解决问题 -- 通过例子学习/阅读源码 -- chatgpt - -## 推荐一些基本操作库 - -- [hutool] -- [](fluentqa-qabox) - -## 学习中前进 diff --git a/docs/more/qabox/1-mindmap.md b/docs/more/qabox/1-mindmap.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/more/qabox/application/6-error-handler.md b/docs/more/qabox/application/6-error-handler.md deleted file mode 100644 index d9d235e..0000000 --- a/docs/more/qabox/application/6-error-handler.md +++ /dev/null @@ -1,131 +0,0 @@ -# Error Handler - -- [core-errors](https://github.com/linux-china/java-error-messages-wizard.git) - -Java Error Messages Wizard - Write Good Error Message -====================================================== - -# Features - -* Error Code Design -* Standard Error Message Format -* Resource Bundle: properties file and i18n -* slf4j friendly -* IntelliJ IDEA friendly - -# Error Code Design - -Error code a unique string value for a kind of error, and includes 3 parts: - -* System/App short name: such as RST, APP1. Yes, Jira alike -* Component short name or code: such as LOGIN, 001 -* Status code: a 3 digital number to describe error's status, such as 404, 500. - Reference from HTTP Status Code. - -Error Code examples: - -* OSS-001-404 -* RST-002-500 -* UIC-LOGIN-500 - -# Error Message - -A good error message with following parts: - -* Context: What led to the error? What was the code trying to do when it failed? - where? -* The error itself: What exactly failed? description and reason -* Mitigation: What needs to be done in order to overcome the error? Solutions - -Fields for an error: - -* context: such as app name, component, status code -* description: Long(Short) to describe error -* because/reason: explain the reason with data -* documentedAt: error link -* solutions: possible solutions - -Message format for an -error: `long description(short desc): because/reason --- document link -- solutions` - -# Use properties file to save error code and message - -Example as following: - -```properties -ERROR-CODE:long description(short desc): because/reason --- document link -- solutions -RST-100400=Failed to log in system with email and password(Email login failed): can not find account with email {0} --- please refer https://example.com/login/byemail --- Solutions: 1. check your email 2. check your password -RST-100401=Failed to log in system with phone and pass(Phone login failed): can not find account with phone {0} --- please refer https://example.com/login/byphone --- Solutions: 1. check your phone 2. check your pass code in SMS -``` - -# FAQ - -### Why Choose HTTP Status Code as Error status code? - -Most developers know HTTP status code: 200, 404, 500 - -* Informational responses (100–199) -* Successful responses (200–299) -* Redirection messages (300–399) -* Client error responses (400–499) -* Server error responses (500–599) - -### Why Choose properties file to store error messages? - -Properties file is friendly for i18n and IDE friendly now - -* Code completion support for error code -* Error Code rename support -* Quick view support -* MessageFormat support -* Resource Bundle for i18n support - -Yes, you can choose Enum and POJO class, but some complication. - -If you use Rust, and Enum is good choice, for example `thiserror` -+ `error-stack` : - -```rust -use thiserror::Error as ThisError; - -/// errors for config component: app-100 -#[derive(ThisError, Debug)] -pub enum ConfigError { - #[error("APP-100404: config file not found: {0}")] - NotFound(String), - #[error("APP-100422: invalid JSON Format: {0}")] - Invalid(String), -} - -fn parse_config() -> Result
The Purpose
- -> The purpose of this roadmap is to give you an idea about the DevOps arena and to guide you if you are confused about what to do next. I will try to furnish the relevant information. If you feel something is misleading or suggestion, please submit a PR. - -# ⚡ Learning Roadmap - -This roadmap has been created using [Coggle](https://coggle.it/recommend/5f319149992aa26cd62beaae). Right click on the image to open in a new tab to zoom in/out. - - - ---- - -# 📖 Read / Courses -* [LinkedIn SRE School](https://linkedin.github.io/school-of-sre/) 🆕 -* [Linux Command Line for Beginners](https://ubuntu.com/tutorials/command-line-for-beginners#1-overview) -* [AWS DevOps](https://aws.amazon.com/devops/) -* [Google DevOps](https://cloud.google.com/devops) -* [DevOps Practices and Principles from Microsoft](https://www.edx.org/course/devops-practices-and-principles) -* [Docker for Beginners](https://docker-curriculum.com/) -* [Learn Docker](https://learndocker.online/) -* [The Docker Handbook](https://github.com/fhsinchy/docker-handbook-projects) 🆕 -* [Kubernetes Basics](https://kubernetes.io/docs/tutorials/kubernetes-basics/) -* [Kubernetes Handbook](https://github.com/fhsinchy/kubernetes-handbook-projects) 🆕 -* [Kubernetes Bootcamp](https://www.cockroachlabs.com/kubernetes-bootcamp) 🆕 -* [Kubernetes: Up and Running: Dive into the Future of Infrastructure](https://amzn.to/2PuoSjx) -* [Kubernetes in Action](https://www.manning.com/books/kubernetes-in-action) -* [Kubernetes Patterns](https://www.redhat.com/en/engage/kubernetes-containers-architecture-s-201910240918) -* [Kubernetes Learning Path](https://azure.microsoft.com/en-us/resources/kubernetes-learning-path) 🆕 -* [Free Elastic Training](https://www.elastic.co/training/free) 🆕 -* [Site Reliability Engineering](https://landing.google.com/sre/) -* [Site Reliability Engineering: How Google Runs Production Systems](https://amzn.to/33yoIzZ) -* [Seeking SRE: Conversations About Running Production Systems at Scale](https://amzn.to/33x2VZk) -* [Chaos Engineering](https://www.gremlin.com/chaos-engineering/) 🆕 -* [Chaos Monkey](https://www.gremlin.com/chaos-monkey/) 🆕 -* [Gremlin SRE](https://www.gremlin.com/site-reliability-engineering) 🆕 -* [Fundamentals of Software Architecture: An Engineering Approach](https://amzn.to/3igKQTG) -* [Architecting with Google Compute Engine Specialization](https://www.coursera.org/specializations/gcp-architecture?) -* [The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win](https://amzn.to/3gyctHe) -* [Prometheus LFS241](https://training.linuxfoundation.org/training/monitoring-systems-and-services-with-prometheus-lfs241/) -* [Kubernetes Tutorial for Beginners – Basic Concepts and Examples](https://spacelift.io/blog/kubernetes-tutorial) - ---- - -# 📺 Watch - -* [Start Kubernetes](https://gumroad.com/a/488174707/CgjFn) -* KodeKloud -* Linux Academy -* [Kube Academy](https://kube.academy/) -* [Whiz Labs](https://found.ee/JsuU) -* [Channel 9](https://channel9.msdn.com/Shows/DevOps-Lab) -* [Cognitive Class - Introduction to Containers, Kubernetes, and OpenShift](https://cognitiveclass.ai/courses/kubernetes-course) -* [Learn Kubernetes with your kids](https://redhat.lookbookhq.com/c/ne-bpmp_esi?x=Z3V20d&sc_cid=7013a000002gmsuAAA) 🆕 - ---- - -# 🏑 Play - -* [k3s](https://bit.ly/30Rkx0B) - Free credits during beta (Referral Link) -* [KataKoda](https://www.katacoda.com/) -* [Play with Docker](https://labs.play-with-docker.com/) -* [QwikLabs](https://www.qwiklabs.com/) -* [k8s basicLearning](https://github.com/knrt10/kubernetes-basicLearning) 🆕 -* [Git](https://learngitbranching.js.org/) 🆕 - ---- - -# 🎉 Show-off - -* [Certified Rancher Operator: Level 1](https://academy.rancher.com/courses/course-v1:RANCHER+K101+2019/about) 0️⃣ -* [Certified Kubernetes Administrator](https://qain.si/cka) -* [Certified Kubernetes Application Developer](https://qain.si/ckad) -* [Microsoft Certified: DevOps Engineer Expert](https://docs.microsoft.com/en-us/learn/certifications/devops-engineer) -* [Exam AZ-400: Designing and Implementing Microsoft DevOps Solutions](https://docs.microsoft.com/en-us/learn/certifications/exams/az-400) -* [AWS Certified DevOps Engineer - Professional](https://aws.amazon.com/certification/certified-devops-engineer-professional/) -* [Puppet Professional](https://puppet.com/learning-training/certification/) -* [Professional Cloud DevOps Engineer](https://cloud.google.com/certification/cloud-devops-engineer) -* [Gremlin Chaos Engineering Practitioner](https://www.gremlin.com/blog/announcing-the-gremlin-chaos-engineering-practitioner-certificate-program/) 0️⃣ - ---- - -# 📌 Others - -* [Dynatrace DevOps](https://www.dynatrace.com/resources/ebooks/what-is-devops-and-release-management/) -* [New Relic DevOps](https://newrelic.com/devops/) -* [New Relic AI](https://newr.ai/) 🆕 - ---- - -## 💲 Donate -☕ Buy me a tea - ---- - -> 🆕 - recently added -> 0️⃣ - free certification diff --git a/docs/raw-materials/awesome/Roadmap.png b/docs/raw-materials/awesome/Roadmap.png deleted file mode 100644 index dcfde76..0000000 Binary files a/docs/raw-materials/awesome/Roadmap.png and /dev/null differ diff --git a/docs/raw-materials/backup/qabox-alt/README.md b/docs/raw-materials/backup/qabox-alt/README.md deleted file mode 100644 index 9c006c9..0000000 --- a/docs/raw-materials/backup/qabox-alt/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# README - -Springboot Alternative - diff --git a/docs/raw-materials/backup/qabox-alt/api-mock/README.md b/docs/raw-materials/backup/qabox-alt/api-mock/README.md deleted file mode 100644 index 1c8b609..0000000 --- a/docs/raw-materials/backup/qabox-alt/api-mock/README.md +++ /dev/null @@ -1,1064 +0,0 @@ -# Mock.java使用说明手册 - - - -## 简介 - -这是一个仿照Mock.js语法的Java语言使用的假数据生成工具框架。 -部分方法与类介绍详细可查看JavaDoc文档(推荐先下载下来再看):[JavaDoc文档](helpDoc/index.html) - -码云生成的在线javaDoc文档:[在线文档](https://apidoc.gitee.com/ForteScarlet/Mock.java/) - -如果存在BUG或者有什么意见、建议,可以通过 issue 进行反馈。 - - -github: [github](https://github.com/ForteScarlet/Mock.java) - -gitee : [码云地址](https://gitee.com/ForteScarlet/Mock.java) - -此框架中不仅仅只可以作为假数据获取用,还有一些比较实用的工具类可以拿来单独使用。 - -*工具类介绍:工具类介绍 - -当前版本:](https://img.shields.io/maven-central/v/io.gitee.ForteScarlet/mock.java) - -最低JDK版本:JDK8 - -※ 版本更新内容与预期更新计划详见于文档末尾 : 更新公告 - -# **WIKI** - -文档将会开始转移至WIKI处,转移完成后,此处README中的说明性文档将不再更新并择日删除,替换为简单的介绍与demo示例。 - -**wiki文档:[github wiki](https://github.com/ForteScarlet/Mock.java/wiki) or [gitee wiki](https://gitee.com/ForteScarlet/Mock.java/wikis/pages)** - -## 注意 -未来2.x版本将会使用与1.x版本不同的包路径。如果迭代版本请注意包路径的修改。 -仅为修改包路径,其余内容不变。 -如果有2.x的话 - -- -## 友情链接 -|项目名称|项目介绍|项目地址| -|---|---|---| -|Mock.JDBC|基于Mock.java与JDBC向数据库插入假数据(暂时停工)|https://github.com/ForteScarlet/Mock.JDBC| - - -
- -## 使用方法 -### **Maven** - -在maven项目下,从pom.xml中导入以下地址: -> 最新版本以maven仓库中的地址为准。仓库地址:`https://mvnrepository.com/artifact/io.gitee.ForteScarlet/mock.java` - -```xml -