{"id":19520909,"url":"https://github.com/sebastianbach/architecture","last_synced_at":"2026-05-12T12:01:59.911Z","repository":{"id":144574019,"uuid":"568458539","full_name":"SebastianBach/architecture","owner":"SebastianBach","description":"Architecture Playground","archived":false,"fork":false,"pushed_at":"2022-11-27T13:10:50.000Z","size":45,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-08T13:51:57.633Z","etag":null,"topics":["cpp","modularity","qt5"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SebastianBach.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-20T15:45:42.000Z","updated_at":"2023-02-06T19:51:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"b40364c9-9b70-4fe7-a11c-61c86c64d7b6","html_url":"https://github.com/SebastianBach/architecture","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBach%2Farchitecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBach%2Farchitecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBach%2Farchitecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SebastianBach%2Farchitecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SebastianBach","download_url":"https://codeload.github.com/SebastianBach/architecture/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240769211,"owners_count":19854597,"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":["cpp","modularity","qt5"],"created_at":"2024-11-11T00:28:17.566Z","updated_at":"2025-11-20T12:01:57.129Z","avatar_url":"https://github.com/SebastianBach.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Architecture Playground\n\nPlayground for some (C++) software architecture ideas.\nMore detailed documentation will be added in the future.\n\n# Dependencies\n\n- QT5 (https://www.qt.io/)\n- Google Test (https://github.com/google/googletest); will be installed by CMake\n\n# Build\n\nBuild with *CMake*:\n\n```\nmkdir build\ncd build\ncmake .. -DQt5_DIR=C:/my_qt_5_install/msvc2017_64/lib/cmake/Qt5 \ncmake --build .\nctest\n\n```\n\n\n# Domains\n## Core \u0026 Utility\n\nThe core allows new functions to be registered and provides access to those functions.\nExtending the core means that new types of functions can be handled.\n\n## Features\n\nNew functions can be implemented and made available by registering them in the core.\nFor example, adding a new image operation means implementing such a function in a function library:\n\n```\nauto grey(image::Image* img)\n{\n    img-\u003efill({0.5f, 0.5f, 0.5f});\n\n    return core::SUCCESS;\n}\n\nREGISTER_COMMAND(grey, \"cmd.fill.grey\", \"Grey\");\n```\n\n## Product Design\n\nProducts are designed by composing features.\nBasic product settings (name, version, file name) are defined with CMake:\n\n```\nadd_executable(app_product_new)\nmake_generic_app(\"The New Product\" ${PRODUCT_VERSION} \"product_new\" config_product_new.cpp app_product_new)\nuse_qt_ui(app_product_new)\ntarget_link_libraries(app_product_new PRIVATE lib_cmd_colors)\ntarget_link_libraries(app_product_new PRIVATE lib_cmd_filters)\ntarget_link_libraries(app_product_new PRIVATE lib_cmd_random)\ntarget_link_libraries(app_product_new PRIVATE lib_cmd_pattern)\ntarget_link_libraries(app_product_new PRIVATE lib_exports)\n```\n\nIf a certain feature library is not linked to the product, the corresponding features are not available.\nE.g. a demo version is simply created by using the same settings as the default version minus linking exporter features.\n\nThe UI settings of a product are defined by implementing a ```create_config()``` function, found in the referenced source code file (e.g. ```config_product_new.cpp```).\nThe menus are filled using the IDs used to define certain features.\n\n```\n#include \"config.h\"\n#include \"config_standard.h\"\n\nnamespace core\n{\nvoid create_config(Config\u0026 c)\n{\n    fill_app_menu(c);\n\n    generic_menu_element menu;\n    menu.name = \"Menu\";\n    add_to_menu(CommandID{\"cmd.fill.grey\"}, \"Fill Grey\", menu);\n    c.generic_menus.push_back(menu);\n\n    c.width  = 512;\n    c.height = 512;\n}\n}\n```\n\n## UI\n\nThe UI for all UI-based products is implemented as a separate library.\nThe UI elements are created based on the configuration defined in above ```create_config()``` function.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastianbach%2Farchitecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebastianbach%2Farchitecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastianbach%2Farchitecture/lists"}