{"id":22963119,"url":"https://github.com/samuelasherrivello/rmc-umvcs","last_synced_at":"2025-07-29T19:35:00.092Z","repository":{"id":52113308,"uuid":"337795836","full_name":"SamuelAsherRivello/rmc-umvcs","owner":"SamuelAsherRivello","description":"Unity MVCS (Model-View-Controller-Service) Architecture. This heavily depends on MonoBehaviours. Created by (RMC) Rivello Multimedia Consulting.","archived":false,"fork":false,"pushed_at":"2024-07-04T19:02:10.000Z","size":1015,"stargazers_count":38,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-15T01:21:12.743Z","etag":null,"topics":["best-practices","design-patterns","unity"],"latest_commit_sha":null,"homepage":"http://SamuelAsherRivello.com","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/SamuelAsherRivello.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-10T17:13:53.000Z","updated_at":"2024-09-21T10:59:14.000Z","dependencies_parsed_at":"2024-11-15T01:21:09.087Z","dependency_job_id":"19d65019-16a1-453b-aff8-5fa428a305e5","html_url":"https://github.com/SamuelAsherRivello/rmc-umvcs","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelAsherRivello%2Frmc-umvcs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelAsherRivello%2Frmc-umvcs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelAsherRivello%2Frmc-umvcs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelAsherRivello%2Frmc-umvcs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SamuelAsherRivello","download_url":"https://codeload.github.com/SamuelAsherRivello/rmc-umvcs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229744940,"owners_count":18117655,"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":["best-practices","design-patterns","unity"],"created_at":"2024-12-14T19:20:41.701Z","updated_at":"2024-12-14T19:20:42.249Z","avatar_url":"https://github.com/SamuelAsherRivello.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![npm package](https://img.shields.io/npm/v/com.rmc.rmc-umvcs)](https://www.npmjs.com/package/com.rmc.rmc-umvcs)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)\n\n\u003cimg src=\"./RMC UMVCS/Documentation~/Images/Banner.png\" width=\"600\"\u003e\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n# RMC Architectures\n\nRivello Multimedia Consulting has multiple frameworks for MVC in Unity.\n\n\n| --              | Requires MonoBehaviour?  | Lightweight?       | More Info    | Created    | Updated    |\n|-----------------|--------------------------|--------------------|--------------|------------|------------|\n| uMVCS           | ✔️                      | ✔️ (Light)         | See Below    | 2018       | 2023       |\n| Mini MVCS       | ❌                       | ✔️ (Even Lighter!)  | [rmc-mini-mvcs](https://github.com/SamuelAsherRivello/rmc-mini-mvcs/)    | 2023   | 2024   |\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n# RMC Umvcs Architecture - For Unity\n\nThe UMVCS library for Unity is a custom framework embracing the [MVCS architecture](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller).\n\nMVCS is one of many solutions for organizing a Unity projec efficiently. It may or may not be the best solution for you.\n\n## UMVCS MVCS Is Light\n\nThe UMVCS library a solution for MVCS architecture within Unity. It is **heavily-dependent** on **MonoBehaviour** as a It has no dependencies on 3rd party libraries.\n\n## UMVCS Is Free\n\nThe UMVCS MVCS library for Unity Development is free. Created by Rivello Multimedia Consulting.\n\n## UMVCS Is Simple \u0026 Proven\n\n\u003cimg width=\"200\" src=\"./RMC UMVCS/Documentation~/Images/simplicity-chart.jpg\"/\u003e\n\n\n## UMVCS is Flexible\n\nIt has few classes and a flexible pattern. Following the conventions of MVCS requires discipline as the system is purposefully light and flexible. For example the a model instance **can** access another model instance, but it is recommended not to do so.\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n## UMVCS Best Practices\n\n### Communication\n\nUMVCS is flexible and does not prevent actor-actor communication. However, best practices are to limit communication.\n\n\n**Communication Channels**\n\n* Methods - The caller scope has a reference to the called scope and \"calls a method\" in the typical sense. This is the most coupled communication channel\n* Events - [Observer pattern](https://www.dofactory.com/net/observer-design-pattern) where the reciever **has** a reference to the sender\n* Commands - [Observer pattern](https://www.dofactory.com/net/observer-design-pattern) where the reciever **has no** reference to the sender. This is the least coupled communication channel\n\n**Communication Suggestions**\n\n| --              | To Model     | To View                 | To Controller | To Service     |\n|-----------------|--------------|-------------------------|---------------|----------------|\n| From Model      | ❌           | ❌                     | ✔️(Events)    | ❌           |\n| From View       | ❌           | ❌                     | ✔️(Events)    | ❌           |\n| From Controller | ✔️(Methods)  | ✔️(Methods/Commands)  | ✔️(Commands)  | ✔️(Methods)  |\n| From Service    | ❌           | ❌                    | ✔️(Events)    | ❌           |\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n**Communication Diagram**\n\n\u003cdiv align=\"center\" width=\"100%\"\u003e\n\u003cimg width=\"400\" src=\"./RMC UMVCS/Documentation~/Images/mvcs_diagram.png\"/\u003e\n\u003c/div\u003e\n\n\n## UMVCS Appropriateness\n\nMVCS is one of many solutions for organizing a Unity projec efficiently. It may or may not be the best solution for you.\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n\n| MVCS Pros                         | MVCS Cons     |\n|-----------------------------------|---------------|\n| Code is highly maintainable       | Code is highly repetitive                                   | \n| Code is highly extensible         | Project navigation requires more time                       | \n| Faster to update an existing project    | Slower To start a new project                         | \n| Adding a new feature is prescriptive          | Adding a new feature may require more classes     | \n| Faster learning curve to onboard veterans     | Slower learning curve to onboard newbies          | \n| Suggested for projects of medium/large scope  | Not Suggested for projects of small scope         | \n| Model is highly testable (TDD)                |                                                  | \n| Coding invites less debate                   | Coding requires more discipline                  | \n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n**Appropriateness For Games**\n\nFor projects where runtime optimization is essential, coding directly (without MVCS), may yield better performance.\n\nHowever, that is likely a subsection of a game. The rest of the game may still benefit from MVCS. There is indeed flexibility for such a hybrid solution.\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n\u003cdiv align=\"center\" width=\"100%\"\u003e\n\u003cimg width = \"400\" src=\"https://raw.githubusercontent.com/SamuelAsherRivello/rmc-core/main/RMC%20Core/Documentation~/com.rmc_namespace_logo.png\" /\u003e\n\u003c/div\u003e\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n# RMC UMVCS\n\n- [How To Use](#how-to-use)\n- [Install](#install)\n  - [Via NPM](#via-npm)\n  - [Via Git URL](#via-git-url)\n  - [Tests](#tests)\n  - [Samples](#samples)\n- [Configuration](#configuration)\n- [Credits](#credits)\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n## How to use\n\nThe UMVCS library for Unity is a custom framework embracing the [MVCS architecture](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller).\n\nMVCS is one of many solutions for organizing a Unity projec efficiently. It may or may not be the best solution for you. Enjoy!\n\n## Install\n\n### Via NPM\n\nYou can either use the Unity Package Manager Window (UPM) or directly edit the manifest file. The result will be the same.\n\n**UPM**\n\nTo use the [Package Manager Window](https://docs.unity3d.com/Manual/upm-ui.html), first add a [Scoped Registry](https://docs.unity3d.com/2023.1/Documentation/Manual/upm-scoped.html), then click on the interface menu ( `Status Bar → (+) Icon → Add Package By Name ...` ).\n\n**Manifest File**\n\nOr to edit the `Packages/manifest.json` directly with your favorite text editor, add a scoped registry then the following line(s) to dependencies block:\n\n```json\n{\n  \"scopedRegistries\": [\n    {\n      \"name\": \"npmjs\",\n      \"url\": \"https://registry.npmjs.org/\",\n      \"scopes\": [\n        \"com.rmc\"\n      ]\n    }\n  ],\n  \"dependencies\": {\n    \"com.rmc.rmc-umvcs\": \"1.5.6\"\n  }\n}\n```\nPackage should now appear in package manager.\n\n\n### Via Git URL\n\nYou can either use the Unity Package Manager (UPM) Window or directly edit the manifest file. The result will be the same.\n\n**UPM**\n\nTo use the [Package Manager Window](https://docs.unity3d.com/Manual/upm-ui.html) click on the interface menu ( `Status Bar → (+) Icon → Add Package From Git Url ...` ).\n\n**Manifest File**\n\nOr to edit the `Packages/manifest.json` directly with your favorite text editor, add following line(s) to the dependencies block:\n```json\n{\n  \"dependencies\": {\n      \"com.rmc.rmc-umvcs\": \"https://github.com/SamuelAsherRivello/rmc-umvcs.git\"\n  }\n}\n```\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n### Tests\n\nThe package can optionally be set as *testable*.\nIn practice this means that tests in the package will be visible in the [Unity Test Runner](https://docs.unity3d.com/2017.4/Documentation/Manual/testing-editortestsrunner.html).\n\nOpen `Packages/manifest.json` with your favorite text editor. Add following line **after** the dependencies block:\n```json\n{\n  \"dependencies\": {\n  },\n  \"testables\": [ \"com.rmc.rmc-umvcs\" ]\n}\n```\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n### Samples\n\nSome packages include optional samples with clear use cases. To import and run the samples:\n\n1. Open Unity \n1. Complete the package installation (See above)\n1. Open the [Package Manager Window](https://docs.unity3d.com/Manual/upm-ui.html)\n1. Select this package \n1. Select samples\n1. Import\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n\n## Configuration\n\n* `Unity Target` - [Standalone MAC/PC](https://support.unity.com/hc/en-us/articles/206336795-What-platforms-are-supported-by-Unity-)\n* `Unity Version` - Any [Unity Editor](https://unity.com/download) 2021.x or higher\n* `Unity Rendering` - Any [Unity Render Pipeline](https://docs.unity3d.com/Manual/universal-render-pipeline.html)\n* `Unity Aspect Ratio` - Any [Unity Game View](https://docs.unity3d.com/Manual/GameView.html)\n\n\n\n\u003cBR\u003e\n\u003cBR\u003e\n\n## Credits\n\n**Created By**\n\n- Samuel Asher Rivello \n- Over 25 years XP with game development (2024)\n- Over 11 years XP with Unity (2024)\n\n**Contact**\n\n- Twitter - \u003ca href=\"https://twitter.com/srivello/\"\u003e@srivello\u003c/a\u003e\n- Git - \u003ca href=\"https://github.com/SamuelAsherRivello/\"\u003eGithub.com/SamuelAsherRivello\u003c/a\u003e\n- Resume \u0026 Portfolio - \u003ca href=\"http://www.SamuelAsherRivello.com\"\u003eSamuelAsherRivello.com\u003c/a\u003e\n- LinkedIn - \u003ca href=\"https://Linkedin.com/in/SamuelAsherRivello\"\u003eLinkedin.com/in/SamuelAsherRivello\u003c/a\u003e \u003c--- Say Hello! :)\n\n**License**\n\nProvided as-is under MIT License | Copyright © 2024 Rivello Multimedia Consulting, LLC","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelasherrivello%2Frmc-umvcs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamuelasherrivello%2Frmc-umvcs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelasherrivello%2Frmc-umvcs/lists"}