The code is currently functional however its structure and architecture are less than desired.
TODO:
[ ] Structure
[x] Organise packages
[ ] Remote
[ ] Middle
[ ] Client
[ ] Architecture
Overview
Structure
package: remote
All classes have an underlying interface that backs them. These are referenced in the middle layer but by my understanding, this is falsely generic. There is only 1 implementation, and it is impossible for there to be other implementations as no fields are declared.
package: orders
Methods for returning information about all orders aren't static. Requiring objects to be unnecessarily allocated.
Loads of old code lying around.
Each Order object is able to store its own unique instance of all orders. Duplicated items which get out of sync. See more in Architecture. (OrderX is not much better)
package: middle
There are 2 different factory types for accessing middle tier components. Factories are annoying patterns, but that's personal preference. It is likely that I'll leave it alone in the end but it's worth noting.
package: debug
Very limited, could be replaced with a significantly better logging system.
package: client
PosOnScrn can be removed when Unified Sidebar is implemented
Client classes can be restructured to no longer be runnable on their own and can be backed by a generic View class to facilitate Universal Search, GUI creation, main window metadata and more.
package: catalog
Seems to be in this weird limbo within the architecture. It isn't client based because it has no relevant views and GUI. But doesn't belong in any of the lower tiers as there is no remote access required. They could be implemented individually in each views package within the client package, but it still feels wrong. Which is usually a sign of something weird.
Architecture
Object orientated hell, there are 3 layers in total for accessing objects remotely and locally. All of which wrap on top of each other. I feel there's a better way to expose this data and reduce the amount of layers we have, whilst maintaining generic access and the ability to change the underlying implementation without affecting client code.
The current goal is to move most models into a new logic layer (intended to replace middle) which uses interfaces to abstractly communicate between the data and client boundaries.
The code is currently functional however its structure and architecture are less than desired.
TODO:
Overview
Structure
package: remote
package: orders
package: middle
package: debug
package: client
package: catalog
Architecture