-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Plugin feature #1388
Comments
I want to answer that I agree in general with various comments/conclusion, though I am also familiar with projects where plugin functionality was added/expanded/formalized late within program lifecycle. I think that easier/more successful/easier to use plugin systems included functionality limited to more specific functionality, rather than able to change anything at all. For example some computer games extended/added official modding API (say, computer-controlled players in OpenTTD) |
After the monthly engineering meeting held last week, I think this is the best place to continue the discussion that occurred. During the analysis of the codebase and with some explanations of the codebase by @matkoniecz , we realized that 'pluganizing' the different data categories may be a bit excessive. As such, we have come up with an alternative specifically for the data categories. Understanding of the Data Categories 1. We start with the 12 Main Categories 2. We have the Subcategories under each Main Category (such as "General Land use" and "Specific land use(s)" under the "Land Use" category. 3. There are the Fields under the Subcategories 4. There are the Visualization Subcategories ("Land Use" and "Residential building" 5. Lastly, we have the different options under the Visualization Subcategories This may not be the exact naming convention and I must apologize if this is so, I thought it would important to clarify my understanding first. Proposed Alternative to Plugin 2. Move the Subcategories to a database table 3. Move the Fields under the Subcategories to a database table 4. Move the Visualization Subcategories to a database table 5. Move the Values under the Visualization Subcategories to a database table Potential Risks/Downsides 2. If the database tables are not architected in a flexible enough manner, it could make it difficult or impossible to add certain types of data. 3. Scripts will need to be developed to help each group migrate their databases to the new database formats (assuming the structure changes). 4. The age old problem: this only works if each group is willing to upgrade their core. Potential Benefits 2. If there is an update to any of the mandatory Categories, Subcategories, etc. each team will be able to update their 3. It will no longer be required to restart the Colouring Core application allowing for on-the-fly updates to data as long as it conforms to the format of the frontend code. 4. It can simplify the codebase by removing 100s-1000s of lines of hardcoded values. Conclusion |
Last thing to note here. If we do decide to move forward with this suggestion, it opens a couple questions regarding the plugin idea:
|
Thanks for exploring and continuing to explore potential solutions and improvements to this customization challenges! Database-defined structures may also have problem of being harder to understand and modify. |
Description of the problem
The colouring-core repository contains the main features of Colouring Cities, and each group forks the core to add their own features on top of it, adapted to their needs. While this allows flexibility for each group to go on with their business, this also causes each fork to drift away from the core architecture over time. For example:
As a result, over time it becomes harder and harder to integrate changes from the fork into the core repository, because merge conflict increase in frequency, and sometimes these conflicts are unresolvable due to divergent implementation strategies.
Proposed solution
To mitigate this problem, we propose the development of a plugin feature, through which we could keep a stable core and let groups add, change and remove functionality "around" the core at ease. However, implementing such a plugin feature into an already implemented application presents several challenges, such as:
Describe any alternatives
Alternatives to the implementation of a plugin system would be:
Additional context
More details about the architecture and implementation of the proposed solution and currently unanswered research questions can be found in the attached PDF.
The text was updated successfully, but these errors were encountered: