-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Description
Energy Management App Folder - Dependencies Strucure
Current Build Structure
graph TD
%% Energy-Management-App Folder
subgraph "project-root/examples/"
Energy-Management-App["📁 Energy-Management-App/"]
end
%% Core Energy Management Folders
Common["📁 common/<br/>EnergyManagementAppCommonMain<br/>❌ EnergyTimeUtils (EVSE-specific!)<br/>Identify<br/>❌ CmdLineOptions (DEM-specific!)"]
DEM["📁 device-energy-management/<br/>DeviceEnergyManagementManager<br/>DeviceEnergyManagementDelegateImpl<br/>DEMManufacturerDelegate<br/>DEMTestEventTriggers<br/>device-energy-management-mode"]
EVSE["📁 energy-evse/<br/>EnergyEvseMain<br/>EnergyEvseManager<br/>EnergyEvseDelegateImpl<br/>EVSEManufacturerImpl<br/>EnergyEvseTargetsStore<br/>ChargingTargetsMemMgr<br/>energy-evse-mode<br/>EVSECallbacks<br/>EnergyEvseEventTriggers"]
Reporting["📁 energy-reporting/<br/>ElectricalPowerMeasurementDelegate<br/>PowerTopologyDelegate<br/>FakeReadings<br/>ElectricalSensorInit<br/>EnergyReportingEventTriggers"]
WHM["📁 water-heater/<br/>WhmMain<br/>WhmInstance<br/>WhmDelegateImpl<br/>WhmManufacturer<br/>water-heater-mode"]
Tests["📁 tests/<br/>TestEvseTargetsStorage"]
%% Platform Dependencies
Energy-Management-App --> Common
Energy-Management-App --> Tests
Energy-Management-App --> EVSE
Energy-Management-App --> DEM
Energy-Management-App --> Reporting
Energy-Management-App --> WHM
%% CIRCULAR DEPENDENCIES - The Problem!
Common -.->|includes headers| DEM
Common -.->|includes headers| EVSE
Common -.->|includes headers| WHM
Common -.->|includes headers| Reporting
DEM -.->|includes EnergyManagementAppCommonMain.h| Common
EVSE -.->|includes EnergyManagementAppCommonMain.h| Common
WHM -.->|includes EnergyManagementAppCommonMain.h| Common
Reporting -.->|includes EnergyManagementAppCommonMain.h| Common
%% Cross-Module Dependencies
EVSE -.->|includes DEM headers| DEM
EVSE -.->|includes Reporting headers| Reporting
Reporting -.->|includes DEM headers| DEM
%% Additional Circular Dependency: DEM ↔ Reporting
DEM -.->|DEMTestEventTriggers includes| Reporting
Reporting -.->|FakeReadings includes DEMManufacturerDelegate| DEM
%% CmdLineOptions Misplacement Issue
Common -.->|CmdLineOptions depends on| DEM
EVSE -.->|includes CmdLineOptions| Common
DEM -.->|includes CmdLineOptions| Common
%% EnergyTimeUtils Misplacement Issue
Common -.->|EnergyTimeUtils depends on| EVSE
%% Test Dependencies
Tests -.->|includes EVSE headers| EVSE
%% Styling
classDef circular fill:#ffebee,stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5
classDef folder fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef platform fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
classDef crossModule fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
class Common,DEM,EVSE,WHM,Reporting circular
class DEM,EVSE,Reporting,WHM,Tests folder
class Energy-Management-App platform
class EVSE,Reporting crossModule
Circular Dependencies Identified
Common ↔ All Modules
- Common includes headers from:
DEM,EVSE,WHM,Reporting - All modules include:
EnergyManagementAppCommonMain.h
Cross-Module Dependencies
- EVSE depends on:
DEM,Reporting - Reporting depends on:
DEM
Cross-App Dependencies
- WHM depends on:
EnergyManagementAppCommonMain.h(Common) - EVSE depends on:
EnergyManagementAppCommonMain.h(Common) - Common depends on:
EVSE,WHM
Additional Circular Dependency: DEM ↔ Reporting
- DEMTestEventTriggers.cpp includes
FakeReadings.h(from Reporting) - FakeReadings.cpp includes
DEMManufacturerDelegate.h(from DEM) - This creates a direct circular dependency between DEM and Reporting
modules
CmdLineOptions Misplacement
- CmdLineOptions is in
common/but depends ondevice-energy-management
namespace - EVSE and DEM both include
CmdLineOptionsfromcommon/ - CmdLineOptions should be moved to
device-energy-management/or
energy-evse/
EnergyTimeUtils Misplacement
- EnergyTimeUtils is in
common/but depends onEnergyEvsenamespace - EnergyTimeUtils should be moved to
energy-evse/folder |
Root Cause
The EnergyManagementAppCommonMain.h header acts as a central hub that all
modules depend on, while simultaneously depending on all module headers. This
creates a circular dependency web.
New Build Structure
graph TD
subgraph "project-root/examples/"
Evse-App["📁 Evse-App/"]
Energy-Management-Folder["📁 Energy-Management/"]
WHM-App["📁 WHM-App/"]
end
%% EVSE App Folders
EvseCommon["📁 evse-common/<br/>Identify<br/>EnergyTimeUtils<br/>EnergyEvseMain<br/>EnergyEvseManager<br/>EnergyEvseDelegateImpl<br/>EVSEManufacturerImpl<br/>EnergyEvseTargetsStore<br/>ChargingTargetsMemMgr<br/>energy-evse-mode<br/>EVSECallbacks"]
%% EVSE App Folders
EvseTests["📁 tests/<br/>TestEvseTargetsStorage<br/>EnergyEvseEventTriggers<br/>DEMTestEventTriggers<br/>ElectricalSensorEventTriggers<br/>FakeReadings"]
%% WHM App Folders
WHMCommon["📁 water-heater-common/<br/>WhmMain<br/>WhmInstance<br/>WhmDelegateImpl<br/>WhmManufacturer<br/>water-heater-mode"]
%% WHM App Folders
WHMTests["📁 tests/<br/>TestWhmTargetsStorage<br/>WhmEventTriggers<br/>DEMTestEventTriggers<br/>ElectricalSensorEventTriggers<br/>FakeReadings"]
%% Energy-Management-Folder Folders
DEM["📁 device-energy-management/<br/>DeviceEnergyManagementManager<br/>DeviceEnergyManagementDelegateImpl<br/>DEMManufacturerDelegate<br/>device-energy-management-mode<br/>CmdLineOptions"]
%% Energy-Management-Folder Folders
ElectricalSensor["📁 electrical-sensor/<br/>ElectricalPowerMeasurementDelegate<br/>PowerTopologyDelegate<br/>ElectricalSensorInit"]
%% Folder structure
%% Evse-App Folders
Evse-App --> EvseCommon
Evse-App --> EvseTests
%% Evse-App Dependencies
EvseCommon -.->|includes headers| DEM
EvseCommon -.->|includes headers| ElectricalSensor
%% Evse-App Test Dependencies
EvseTests -.->|includes EVSE headers| EvseCommon
EvseTests -.->|includes DEM headers| DEM
EvseTests -.->|includes ElectricalSensor headers| ElectricalSensor
%% WHM-App Folders
WHM-App --> WHMCommon
WHM-App --> WHMTests
%% WHM-App Dependencies
WHMCommon -.->|includes headers| DEM
WHMCommon -.->|includes headers| ElectricalSensor
%% WHM Test Dependencies
WHMTests -.->|includes WHM headers| WHMCommon
WHMTests -.->|includes ElectricalSensor headers| ElectricalSensor
WHMTests -.->|includes DEM headers| DEM
%% Energy-Management-Folder Folders
Energy-Management-Folder --> DEM
Energy-Management-Folder --> ElectricalSensor
%% Styling
classDef Appfolder fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef ApplicationFolder fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
classDef crossModule fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
class WHMTests,WHMCommon,EvseTests,EvseCommon Appfolder
class Evse-App,WHM-App ApplicationFolder
class Energy-Management-Folder,DEM,ElectricalSensor crossModule
Improvements
- Separation of Apps
- Separation of Modules
- Hierachical Dependencies
- Removed EnergyManagementAppCommonMain.h EVSE makers should not have to
specify they are not making a water heater and vice versa.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels