...
Here's a start at listing the modules and their dependencies.
PlantUML |
---|
@startuml package WAN { } package CacheServer { } package Client { } package Regions { } package Querying { } package Persistence { } package Statistics { } package Messaging { } package FunctionService { } package Advisors { } package Serialization { } package PDX { } WAN --> CacheServer WAN --> Client WAN --> Regions Regions --> CacheServer Regions --> Client Regions-->Persistence Regions-->Statistics Advisors-->Messaging Regions-->Advisors Querying-->Regions Regions->Messaging FunctionService --> Regions FunctionService --> Messaging Messaging -> Serialization PDX -> Serialization PDX -> Regions |
Each module should have at least it's own package(s), if not be in a separate gemfire- gradle module. Anything that is not part of the API for that module should only be package visible. Each module should have a clearly defined API, with tests for that module that cover the API. For example, if there is a method in the Region module to receive an event from the WAN, that should be part of the InternalRegion API and that API should be tested in the Region module.
...
Below is a high level view of the interfaces for each module and some of the changes that need to be made.
Statistics
Package:internal.statistics
API interfaces/classes: Statistics, StatisticsFactory, StatisticsManager
Required changes: Move into a separate package. Pull the code out of InternalDistributedSystem (it currently implements StatisticsFactory) into a separate class.
Messaging
Package:distributed.internal
...
Required Changes: InternalDistributedMember and InternalDistributedSystem should be interfaces, not concrete classes. They should only have the methods that are required by the rest of the system. The concrete classes like DistributionManager, the old InternalDistributedSystem class, etc. should not be referenced outside this package.
Statistics
Package:internal. statistics
API interfaces/classes: Statistics, StatisticsFactory, StatisticsManager
Required changes: Move into a separate package. Pull the code out of InternalDistributedSystem (it currently implements StatisticsFactory) into a separate class.
Advisors
Package: distributed.internal.advisor
...