glato / emerge

Emerge is a browser-based interactive codebase and dependency visualization tool for many different programming languages. It supports some basic code quality and graph metrics and provides a simple and intuitive way to explore and analyze a codebase by using graph structures.
MIT License
783 stars 46 forks source link

New graph: File system view combined with dependency information. #45

Open achtelik opened 11 months ago

achtelik commented 11 months ago

We are currently using the "Clean Architecture" (https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) in our projects, combined with the idea of a "Modulith" (multiple packages on the top level for different domains/features).

It would be fantastic to have a graph that provides an overview of this structure and shows the dependencies between the modules, including any circular dependencies.

I believe a graph that combines the file system view with the dependency information would be ideal for this use case.

To give you an idea of what we are looking for, it should look something like this: image

What are your thoughts on this? I will try to create a prototype, but perhaps for someone else, this could be an easy task. :D

glato commented 11 months ago

@achtelik Sorry for the delay, I was on vacation for ~ the last two weeks. Interesting graph, to generalize a bit: the idea would be to create a variant of the filesystem graph (as I understand from the given structure: "module1" is a directory that contains subdirectories "core", "dataproviders" and "entrypoints") which can be enriched by an additional dependency visualization. One dependency (shown as a directed edge) from a directory path p1 to p2 (e.g. "root/module1/core" to "root/module2/core") is shown if and only if there is an import dependency from at least one file f1 in p1 (e.g. "root/module1/core") to at least some other file f2 in p2 (e.g. "root/module2/core"), is that correct?

I guess such a visualization can be implemented by creating a complete new graph type, calculating the whole new graph structure as described above (if understood correctly) and simply rendering it in a similar way that graphs are rendered in emerge.

Some questions: a) Would such a graph not be showing any files at all? b) Would it make sense to also show dependencies from all directory paths to potentially all others (e.g. in the example above showing a dependency from "root/module1" to "root/module2" or would it only make sense to be strict about only showing dependencies if there is actually at least one file in the current directory)

Could you give me some short feedback if I understood the idea?