All Projects → Riduidel → agile-architecture-documentation-system

Riduidel / agile-architecture-documentation-system

Licence: Apache-2.0 license
A maven archetype to generate easily projects allowing architecture description using a mix of C4, agile architecture, Asciidoc and PlantUML

Programming Languages

java
68154 projects - #9 most used programming language
ASL
165 projects
Gherkin
971 projects
kotlin
9241 projects
groovy
2714 projects
CSS
56736 projects

Projects that are alternatives of or similar to agile-architecture-documentation-system

ngecilin
Chrome Extension to shorten your looooong URL
Stars: ✭ 23 (-14.81%)
Mutual labels:  hacktoberfest2020
o-fish-android
Android app for the Officer's Fishery Information Sharing Hub (O-FISH). The mobile app allows fisheries officers to document and share critical information gathered during a routine vessel inspection.
Stars: ✭ 19 (-29.63%)
Mutual labels:  hacktoberfest2020
templates
tsParticles website templates collection
Stars: ✭ 42 (+55.56%)
Mutual labels:  hacktoberfest2020
sugestoes-temas
Repositório de sugestões para temas para talks, posts, podcasts, vídeos e/ou qualquer outro conteúdo voltado Android.
Stars: ✭ 33 (+22.22%)
Mutual labels:  hacktoberfest2020
RustLabs
The Ultimate Workshop Track for #Rust Developer
Stars: ✭ 22 (-18.52%)
Mutual labels:  hacktoberfest2020
competetive-code-hacktoberfest
For Hacktoberfest Contribution
Stars: ✭ 14 (-48.15%)
Mutual labels:  hacktoberfest2020
companies-on-blm
We are collecting corporate statements in response to racial injustice, along with Diversity/Inclusion reports and ICE contract information. We have several issues for requested companies, please feel free to add more!
Stars: ✭ 21 (-22.22%)
Mutual labels:  hacktoberfest2020
home-automation-app
An app to show weather, todos, calendar events, and a grocery list using a touch display and a raspberry pi.
Stars: ✭ 32 (+18.52%)
Mutual labels:  hacktoberfest2020
Instagram-Giveaways-Winner
Instagram Bot which when given a post url will spam mentions to increase the chances of winning. Win Instagram Giveaways!
Stars: ✭ 95 (+251.85%)
Mutual labels:  hacktoberfest2020
o-fish-realm
Realm application code and sample data for the Officer's Fishery Information Sharing Hub (O-FISH). The mobile app allows fisheries officers to document and share critical information gathered during a routine vessel inspection. The web app allows agencies to gain insights from the aggregated information.
Stars: ✭ 23 (-14.81%)
Mutual labels:  hacktoberfest2020
HACKTOBERFEST-2020-flutter-interview-questions
Flutter interview questions with answers
Stars: ✭ 44 (+62.96%)
Mutual labels:  hacktoberfest2020
DigiPass
DigiPass (Paywall) WordPress plugin
Stars: ✭ 11 (-59.26%)
Mutual labels:  hacktoberfest2020
Good-Client-Bad-Client
Help us build a Credit Card Approval system - using Machine Learning!
Stars: ✭ 18 (-33.33%)
Mutual labels:  hacktoberfest2020
Ecommerce-Site
A simple E-commerce site made with HTML, SCSS and JavaScript.
Stars: ✭ 13 (-51.85%)
Mutual labels:  hacktoberfest2020
moon-cheeser
Moon Cheeser is an infinite runner where the player plays as a mouse gathering cheese pieces and avoiding craters and other astronomical objects, such as comets and planets, on a moon made of cheese.
Stars: ✭ 32 (+18.52%)
Mutual labels:  hacktoberfest2020
react-simple-boilerplate
Simple React Boilerplate with Webpack, Github Actions, Scss, Lazy Loading etc....
Stars: ✭ 38 (+40.74%)
Mutual labels:  hacktoberfest2020
archifacts
archifacts is a library to extract your architectural concepts out of your application's code
Stars: ✭ 40 (+48.15%)
Mutual labels:  asciidoc
power-doctest
JavaScript Doctest for JavaScript, Markdown and Asciidoc.
Stars: ✭ 45 (+66.67%)
Mutual labels:  asciidoc
docs
No description or website provided.
Stars: ✭ 16 (-40.74%)
Mutual labels:  hacktoberfest2020
andaluh-js
Transliterate español (spanish) spelling to andaluz proposals using javascript
Stars: ✭ 22 (-18.52%)
Mutual labels:  hacktoberfest2020

Welcome to Agile architecture documentation archetype 👋

GitHub Workflow Status GitHub version Twitter: Riduidel

A Maven archetype allowing you to easily create your agile architecture documentation using a mix of C4, Asciidoc and PlantUML. This archetype uses Structurizr to build the architecture model, and Agile architecture documentation template, all by Simon Brown.

Install

You can use the archetype by running this maven-friendly 😅command. Don't forget to replace ${VERSION} by GitHub version

mvn archetype:generate -DarchetypeGroupId=io.github.Riduidel.agile-architecture-documentation-system -DarchetypeArtifactId=archetype -DarchetypeVersion=${VERSION}

This will ask you a few questions and generate the project. Finally, don't forget to replace the value of agile-architecture-version maven property by GitHub version

Usage

Once the archetype has been run, you'll have a project with Structurizr compatible source in src/main/java and asciidoc files following Agile architecture documentation template in src/docs/asciidoc.

Generating architecture documentation

Running mvn install will

  1. compile and run Java code to have C4 model-compatible diagrams generated by PlantUML
  2. generate AsciiDoc HTML and PDF files

Using the archetype at 100%

The archetype contains two Java classes.

  1. Architecture contains initial definition of your architecture. This is where you should put all the systems, containers, components that are directly described.
  2. ViewsGenerator allow you to generate the various views by using elements of the architecture model.

Faster edit loop

A faster developer feedback loop can be achieved using the fizzed-watcher-maven-plugin. Don't worry, you don't have to configure it by yourself! You can run mvn -Plivereload when working on documents. This will watch both the src/docs (if it exists), src/slides (if it exists) and the src/main/java folder and run a mvn package when any of these folders have changes in.

Visit http://localhost:35729/docs/html/ to view your generated slides in HTML form. Visit http://localhost:35729/slides/html/ to view your generated slides in HTML form.

If you have installed the livereload browser extension (but not the livereload desktop application, which job is handled by the maven build), any change in the project will be immedialety visible in browser, allowing you to work in a pleasant environment (well, I hope)

Best practices

  • Define systems, containers and components options only through structurizr properties. The useful method for that is ModelItem#addProperty(String, String). Don't try to load properties from other means, cause it'll introduce incoherence.
  • Try to stay close to describe=>extend=>generate. In other words, first describe architecture in Architecture class. Then use available extension points (provided by CDI) to add additional infos.

describe=>extend=>generate

What are we talking about here ? In fact, the simplest way to have a good model, from what we've already tested, is to

  1. Create a valid and complete model, by either describing all elements or finding them (using enhancers like MavenDetailsInfererEnhancer)
  2. Extend that model by adding associated resources (that's typically the case of the SCMLinkGenerator and SCMReadmeReader)
  3. Generate the good resources, like the views (using the archetype provided ViewsGenerator) and the document includes

Writing an Enhancer

Since we're talking about the Enhancer interface, this is the main interface allowing us to have an extendable architecture model. So how to write an Enhancer ? First, choose what to enhance : model or views ? Both of them have dedicated subinterfaces (ModelEnhancer and ViewEnhancer). There even is a ModelElementAdapter that will ease things out for model enhancers, since it's the interface you may extend. So, once you've chosen what to extend, choose when this enhancer will run by setting a priority. This priority defines the order in which the enhacer will run, and all running enhancers are displayed ordered by priority at start of generation. Now, you'll have to implement the visiting methods, for which you can find numerous examples in our code. Don't forget to take a look at the isParallel() method, which may fasten things a lot, since it can allow the enhancer to be run using parallel features of Java system executor services.

Developing

There are not many things to do (except improving the archetype source). However, if you want to improve things, please run mvn verify which will create a project from the archetype and run mvn package which will trigger Java class compilation and run and Asciidoc documentation generation.

Releasing

Can be performed only on a machine having Nicolas Delsaux GPG key allowing to sign to maven central (not yet enabled on GitHub).

Don't forget to activate the -Prelease profile, which enable all the good things (Sonatype staging, signing, ...)

Architecture

Way more details are available in the architecture documentation (which uses this system, obviously).

Author

👤 Nicolas Delsaux

🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Show your support

Give a ⭐️ if this project helped you!


This README was generated with ❤️ by readme-md-generator

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].