Skip to content

Desired Architecture #1579

@lenhard

Description

@lenhard

Following the discussion from today's devcall, here comes an outline of our desired high-level architecture for JabRef and some data on the status quo. This is a refinement from our high-level documentation.

@JabRef/developers Please have a look, mention anything that you find worth remarking or discussing, and eventually I will update the high level documentation to reflect our desired architecture. Here is a screenshot from my architecture modeling tool for JabRef 3.4 (apologies for overlapping arrows and numbers, there's no possibility to avoid this tool-wise):
jabref-high-level-architecture
Arrows mark dependencies and the number of an arrow reflects the number of dependencies. Dashed arrows mark forbidden dependencies, whereas complete arrows mark allowed dependencies. The model depicts the desired architecture, not the actual architecture. I manually sorted all classes of jabref into these high-level packages, for instance the MetaData class should be in jabref.model and that would currently lead to forbidden dependencies from jabref.model to jabref.gui. Based on my sorting and the actual current source code, the architecture tool computes the number of dependencies between the packages.

The content of jabref.model, jabref.logic, and jabref.gui is described in our high-level documentation. On top of that jabref.globals should contain bootstrapping classes and global information (JabRefMain, Defaults, Globals, etc.). jabref.preferences should bundle the classes JabRefPreferences and JabRefPreferencesFilter. jabref.cli should bundle the CLI classes (already a top level package). According to the model, the only allowed dependencies in jabref should be:

jabref.logic -> jabref.model

jabref.globals -> everywhere

jabref.gui -> everywhere

jabref.cli -> jabref.preferences
jabref.cli -> jabref.globals
jabref.cli -> jabref.logic
jabref.cli -> jabref.model

This is an open discussion, any comments are welcome!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions