{"id":28089523,"url":"https://github.com/crowdcode-de/kissmda","last_synced_at":"2025-06-15T07:04:47.953Z","repository":{"id":3229312,"uuid":"4265123","full_name":"crowdcode-de/KissMDA","owner":"crowdcode-de","description":"Keep It Simple Stupid, MDA!","archived":false,"fork":false,"pushed_at":"2020-10-13T10:39:14.000Z","size":12556,"stargazers_count":33,"open_issues_count":21,"forks_count":8,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-05-13T13:04:18.445Z","etag":null,"topics":["java","mda","uml"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crowdcode-de.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-05-08T20:20:49.000Z","updated_at":"2024-05-18T15:51:23.000Z","dependencies_parsed_at":"2022-08-19T01:01:10.860Z","dependency_job_id":null,"html_url":"https://github.com/crowdcode-de/KissMDA","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/crowdcode-de/KissMDA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdcode-de%2FKissMDA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdcode-de%2FKissMDA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdcode-de%2FKissMDA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdcode-de%2FKissMDA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crowdcode-de","download_url":"https://codeload.github.com/crowdcode-de/KissMDA/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crowdcode-de%2FKissMDA/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259935601,"owners_count":22934386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","mda","uml"],"created_at":"2025-05-13T12:59:32.169Z","updated_at":"2025-06-15T07:04:47.929Z","avatar_url":"https://github.com/crowdcode-de.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"KissMDA - Keep It Simple Stupid, MDA!\n=====================================\n\n[![Build Status](https://travis-ci.org/crowdcode-de/KissMDA.svg?branch=master)](https://travis-ci.org/crowdcode-de/KissMDA)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/de.crowdcode.kissmda.core/kissmda-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/de.crowdcode.kissmda.core/kissmda-core)\n\nAfter working a while with MDA / MDSD technologies like AndroMDA, oAW, ... we feel like we need just another MDA tool!\nWhy?\n\n1. We still like [AndroMDA](http://andromda.sourceforge.net), yes the project is very much alive and it has already proven itself to be a strong Open Source \nproject, since AndroMDA has survived the come and go of its comitters. AndroMDA is in our humble opinion the best \nproject in MDA / MDSD area sofar.\nOne problem we see is the complexity of the project. Yes, you need to model the cartridge to build your own cartridge. \nIn the beginning it looks like \"eat your own dog food\" but at the end it makes the things much more complex to build. \nJust take a look [how you can build your own cartrige in AndroMDA](http://www.andromda.org/docs/andromda-documentation/steps-to-write-a-cartridge/index.html).\nYou also need to use a lot of XML files and elements to [configure your cartridge](http://www.andromda.org/docs/andromda-documentation/steps-to-write-a-cartridge/site9.html).\nAs an application developer you have all those XML elements to be able [configure AndroMDA](http://www.andromda.org/docs/configuration.html) \nwhich makes AndroMDA a configuration monster.\n\n2. [oAW](https://de.wikipedia.org/wiki/OpenArchitectureWare) has a different story. Until the version 4.3 it seems everything looks very smooth. After the project went \nto Eclipse it seems that the project has no activity anymore. No news anymore from oAW 5 release. \nIt's really a pitty. The big problem of oAW is its Domain Specific Language (DSL) Xtend und Xpand. Since\nthey depend on their own editor capabilities in Eclipse and because the project seems to be dead, you will \ndefinitely stuck with Eclipse 3.4! No development anymore in the future.\n\n3. [Acceleo](http://www.eclipse.org/acceleo) looks pretty nice. The project is active and alive. \nThe main problem is that it uses a DSL named MOFM2T (MTL) to generate artifacts. You can read the [getting started document\nof Acceleo](http://wiki.eclipse.org/Acceleo/Getting_Started) to understand how Acceleo generator works. Additionally everything in Acceleo is quite Eclipse centered.\nSo you need the MTL editor from Eclipse, imagine if something happens just like oAW. You will stuck with an old Eclipse\nversion!\n\n4. [TigerTeam TRIMM – Model Driven Generator](http://trimm.tigerteam.dk) is just Open Sourced in July 2013.\nWe analyzed the code at [Bitbucket.org](https://bitbucket.org/tigerteam/trimm/src) and found out that the idea with the Events and Listeners as [Extensions](http://trimm.tigerteam.dk/trimm-java/trimm-java-extensions) is a very good idea.\nTRIMM also uses Maven and does not have any dependencies to Eclipse. Special to this framework is that it uses its own [metamodel](http://goo.gl/MHIfLw) and does not use UML2 metamodel for the generators. \nThis framework works for [MagicDraw and Enterprise Architect](http://goo.gl/Z5QQrq) and it can read the files directly from those UML tools. It also uses its [own Java code generator](http://goo.gl/A5HLEm) which is basically based on String outputs.\nTRIMM offers some ready to use cartridges like Java, JPA and Webservice. It seems that TRIMM does not suffer the problems mentioned above and uses almost the same approach of KissMDA (see our solution below). Following are the differences:\n  * TRIMM is using its own [Java generator](http://goo.gl/A5HLEm) which is basically based on String outputs and this is not the best way to generate Java codes. Using Eclipse JDT is a lot more easier and you always get syntactically correct Java codes which can be easily unit tested like this [example](http://goo.gl/Au42Ql).\n  * Interesting to compare the transformers for Java code generation. In TRIMM you have the class [JavaGenerator.java](http://goo.gl/XpKQSM). In KissMDA you use the class [SimpleJavaTransformer.java](http://goo.gl/YuUVRS). \nThey both are the main entering point for the generation of Java codes. Both classes look quite similar from the way of doing the works they need to do. Using DI framework like Guice in KissMDA makes the code more readable and easier to understand.\n  * Unit tests are crucial in KissMDA. The simple Java cartridge has in the mean time about [35 test cases](http://goo.gl/6paF5M). This is possible because we use Mockito extensively. TRIMM Java cartridge has also [some unit tests](http://goo.gl/2PP9WP) which are not many in comparison with the [available implementation classes](http://goo.gl/FYDLhy).\n\nThere are some other MDA / MDSD tools available outside: [Taylor](http://taylor.sourceforge.net), [Topcased](http://www.topcased.org), [openMDX](http://www.openmdx.org). But all of them suffer the problems we mentioned above.\n\n**Our solution is KissMDA (Keep It Simple Stupid, MDA!)**.\n\n1. KissMDA is a pure Java API approach \n--------------------------------------\n[No DSL, no Polyglot Programming](http://lofidewanto.blogspot.de/2011/10/why-is-polyglot-programming-or-do-it.html). OK, we still need a templating engine and it also depends on an Eclipse plugin. Therefore we will choose the best templating engine available wisely. Nope! This is not true!\n* For generating Java code we will use Eclipse JDT. Check this out: http://stackoverflow.com/questions/121324/a-java-api-to-generate-java-source-files\n* For generating XML documents we will use Java DOM API, StAX API or just simple JAXB from already generated Java classes. Check this out for comparison: http://docs.oracle.com/javase/tutorial/jaxp/stax/why.html\n* For generating any other things we will use Java! Only Java, no DSL!    \n     \n2. No need to have special Eclipse plugins\n------------------------------------------\nWe just use Java with its Java editor in [Eclipse](http://www.eclipse.org)! Or if you like you can choose other Java IDE. \nWe are independent from Eclipse.\n\n3. We use the best UML tool available \n-------------------------------------\nAt the moment we prefer [MagicDraw](http://www.nomagic.com/products/magicdraw.html) as our UML tool. Important is that we use Eclipse UML2 API to access our UML model.\nAs long as your UML tool offers Eclipse UML2 API you can integrate it in KissMDA. \nJust don't forget this: your UML model is your source code so treat it as a first class citizen just like your Java code.\n\n4. We'll try not to use XML in our framework\n--------------------------------------------\nInstead we'll implement annotations as much as we need it.\n\n5. Maven is the core part of KissMDA \n-----------------------------------------\nWe use [Maven](http://maven.apache.org) standard project layout. We'll generate the codes with a Maven plugin, we'll generate the skeleton of \nthe MDA application and the cartridge project with Maven archetypes. No other choice! Maven is our core!\n\n6. IoC / DI is everywhere\n--------------------------------------------\nWe use DI (Dependency Injection) everywhere to make our code testable. \nWe choose [Guice](https://code.google.com/p/google-guice) for our DI framework.\n\n\nWe are still in the beginning of the project, so if you want to influence our direction, you are welcome to do so!\n\n**For more information please check out our Wiki pages: https://github.com/crowdcode-de/KissMDA/wiki**   \n**For the latest news please check out our [KissMDA Google+](https://plus.google.com/u/0/b/118347092823913152560/118347092823913152560/posts)**\n\n**KissMDA team    \n[Lofi](http://lofidewanto.blogspot.com), [Ingo](http://www.dueppe.com), Markus**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrowdcode-de%2Fkissmda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrowdcode-de%2Fkissmda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrowdcode-de%2Fkissmda/lists"}