-
Notifications
You must be signed in to change notification settings - Fork 0
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
Architectural class diagram #32
Comments
@hanhou maybe you have feedbacks there? |
Here is a graph of this module, as far as I understand it :
|
So it has 4 layers deep and 18 classes. Is there an obvious way to simplify this tree? |
We could simplify, for instance we could just duplicate code across the As I mentioned a few times before, most of those classes are abstract and users are not even expected to interact with them (looking at In my mind there are three distinct modules that users are expected to interact with. These modules build on top of each other. Why? As I mentioned before, users should not be expected to buy into the full stack if they just need a part, or are not yet ready to make the full integration all at once (our current situation). ModulesTaskThis is the module you use to spec your task logic. It doesn't mean you need to buy into the curriculum, but if you want to later, you are in a really good position to do it: CurriculumThis is the module you use to spec a curriculum. This is the input for a Trainer. However, the trainer could be implemented in the local machine or could be a service running remotely elsewhere. TrainerThis is the module that is responsible for running trainer. As opposed to the previous two modules that are mostly about specification, this module is concerned with the actual implementation of the updating logic. As a result, depending on how much of the stack you need, you really just need to interact with <10 classes. For instance, I would probably not use any of the Anyway, this is my own opinion, I would be curious to hear @jwong-nd , @dyf and @hanhou take on it too! |
Many Thanks for those details. I am also curious to hear other thoughts before discussing. |
Also @alexpiet |
Personally I think the classes could be simplified. Why is |
Re: Duck-typingAs i mentioned in #30 you can use duck-typing (provided you handle the (de)serialization logic on your own... again, I don't think you should, but you can... so use at your own risk). I will leave it at this, but happy to discuss further in person why I don't favor duck-typing for long-term projects and why I think this is necessary when using an explicit schema definition. The design of the package is such that if the user wants to do it, they can, but we still make sure that the core package doesn't rely on it, which I think is a good balance. (re-reading your question I am not sure if this is the angle you had in mind when you mentioned duck typing tho, so happy to discuss offline) Re:
|
My personal concern is not to repeat MTRAIN path which was deemed overly complex and hard to understand by most except the initial developers. I recollect they thought it was perfectly well designed and they even gave talk on it. I learned it and I eventually thought some part of it were reasonable. So we want a solution we can train everyone to use and believe it is good. If you think this can done with this architecture, then perhaps we just need more documentation support. |
Is there an argument there that the external access could be simplified while keeping the inner structure? |
This repository seems to have a complex class architecture. I went through many of the classes and I still could not understand all dependencies and the logic behind it. They are a few empty classes with empty layers.
I think this might warrant a review of the class architecture given that it is expected from any external users to subclass components to create a new task.
The text was updated successfully, but these errors were encountered: