You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Initial discussion for refactoring several design choices to promote better maintainability of the repo
Feature description
AIHawkEasyApplier and AIHawkJobManager are two god classes that are tightly coupled and have too many responsibilities. While they keep related code in the same place, it is difficult to navigate and make any significant changes.
Why does it matter?
We can do this voluntarily now, or be forced to do it in the future when the project grows and becomes impossible to manage.
Improved testability and maintainability.
It will make development significantly easier by working with smaller files and classes.
What does "done" look like?
All classes have a single responsibility
No more tight coupling
Basic amount of testing implemented for all new classes
All files are organized
Updated docs
Recommendation
Tasks
Decide what design features to change
Ensure testing for current implementation is complete to prevent regression
Ensure there is a plan for rollbacks
Update docs, maybe add a simple style guide to help with format/linting config
Ensure CI/CD workflows are updated for thorough testing
Create tests for new classes
Full-stop on new features and fixing non-urgent bugs, freeze PR submissions, make necessary announcements (may be beneficial to freeze PRs earlier to avoid causing excessive merge conflicts)
Incrementally move logic to new classes, starting with logic that is not tightly coupled in the old classes
Perform testing
Open PRs back up for submission
Design changes
POM Pattern for managing pages to separate logic for each page, increasing testability and maintainability. Say LinkedIn takes a page away or adds a new one - we'll have to change one file to adjust while the rest of the pages unphased.
Repository Pattern to abstract data access from business logic, improving code organization and separation of concerns
Service Layer Pattern to tie together POM, repository, and LLM integration, eliminating the need for an overly complex Facade Pattern
Drop Facade Pattern to remove tight coupling between LLM model and other classes
Separate files for classes that benefit from separation (not entirely necessary, but looks better IMO than having multiple classes in the same file if one doesn't help the other)
Feature summary
Initial discussion for refactoring several design choices to promote better maintainability of the repo
Feature description
AIHawkEasyApplier and AIHawkJobManager are two god classes that are tightly coupled and have too many responsibilities. While they keep related code in the same place, it is difficult to navigate and make any significant changes.
Why does it matter?
What does "done" look like?
Recommendation
Tasks
Design changes
Folder structure
Auto_Jobs_Applier_AI_Agent/
Motivation
For better maintainability, easier feature implementations, and debugging - extends the life of the project and invites more collaboration
Alternatives considered
Other approaches or design patterns may be better than what I recommended. Some changes can be deferred until absolutely necessary.
Additional context
No response
The text was updated successfully, but these errors were encountered: