Clean-Architecture-diagram.excalidraw
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠==
Text Elements
Entities ^ent1 Enterprise Business Rules ^ent2 Use Cases ^uc1 Application Business Rules ^uc2 Interface Adapters ^ia1 Controllers, Gateways, Presenters ^ia2 Frameworks & Drivers ^fd1 Web, DB, UI, External Interfaces ^fd2 The Dependency Rule: Source code dependencies point INWARD only. Nothing in an inner circle can know about anything in an outer circle. ^rule1 depends on ^dep1 depends on ^dep2 depends on ^dep3
%%
Drawing
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"id": "ring4",
"type": "ellipse",
"x": 100,
"y": 100,
"width": 800,
"height": 800,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#d0ebff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1001,
"version": 1,
"versionNonce": 1001,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "ring3",
"type": "ellipse",
"x": 200,
"y": 200,
"width": 600,
"height": 600,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#d3f9d8",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1002,
"version": 1,
"versionNonce": 1002,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "ring2",
"type": "ellipse",
"x": 300,
"y": 300,
"width": 400,
"height": 400,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffe3e3",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1003,
"version": 1,
"versionNonce": 1003,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "ring1",
"type": "ellipse",
"x": 400,
"y": 400,
"width": 200,
"height": 200,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#fff3bf",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1004,
"version": 1,
"versionNonce": 1004,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
},
{
"id": "label-entities",
"type": "text",
"x": 430,
"y": 470,
"width": 140,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1005,
"version": 1,
"versionNonce": 1005,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Entities\nEnterprise Business Rules",
"fontSize": 14,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 43,
"containerId": null,
"originalText": "Entities\nEnterprise Business Rules"
},
{
"id": "label-usecases",
"type": "text",
"x": 340,
"y": 340,
"width": 160,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1006,
"version": 1,
"versionNonce": 1006,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Use Cases\nApplication Business Rules",
"fontSize": 14,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 43,
"containerId": null,
"originalText": "Use Cases\nApplication Business Rules"
},
{
"id": "label-adapters",
"type": "text",
"x": 230,
"y": 240,
"width": 180,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1007,
"version": 1,
"versionNonce": 1007,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Interface Adapters\nControllers, Gateways, Presenters",
"fontSize": 14,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 43,
"containerId": null,
"originalText": "Interface Adapters\nControllers, Gateways, Presenters"
},
{
"id": "label-frameworks",
"type": "text",
"x": 130,
"y": 140,
"width": 200,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1008,
"version": 1,
"versionNonce": 1008,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "Frameworks & Drivers\nWeb, DB, UI, External Interfaces",
"fontSize": 14,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 43,
"containerId": null,
"originalText": "Frameworks & Drivers\nWeb, DB, UI, External Interfaces"
},
{
"id": "arrow1",
"type": "arrow",
"x": 870,
"y": 500,
"width": 100,
"height": 0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1009,
"version": 1,
"versionNonce": 1009,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"points": [[0, 0], [-100, 0]],
"lastCommittedPoint": null,
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"id": "label-dep1",
"type": "text",
"x": 875,
"y": 480,
"width": 90,
"height": 20,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1010,
"version": 1,
"versionNonce": 1010,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "depends on",
"fontSize": 12,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 17,
"containerId": null,
"originalText": "depends on"
},
{
"id": "arrow2",
"x": 770,
"y": 540,
"type": "arrow",
"width": 80,
"height": 0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1011,
"version": 1,
"versionNonce": 1011,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"points": [[0, 0], [-80, 0]],
"lastCommittedPoint": null,
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"id": "label-dep2",
"type": "text",
"x": 775,
"y": 520,
"width": 90,
"height": 20,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1012,
"version": 1,
"versionNonce": 1012,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "depends on",
"fontSize": 12,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 17,
"containerId": null,
"originalText": "depends on"
},
{
"id": "arrow3",
"x": 670,
"y": 580,
"type": "arrow",
"width": 60,
"height": 0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1013,
"version": 1,
"versionNonce": 1013,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"points": [[0, 0], [-60, 0]],
"lastCommittedPoint": null,
"startBinding": null,
"endBinding": null,
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"id": "label-dep3",
"type": "text",
"x": 675,
"y": 560,
"width": 90,
"height": 20,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1014,
"version": 1,
"versionNonce": 1014,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "depends on",
"fontSize": 12,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 17,
"containerId": null,
"originalText": "depends on"
},
{
"id": "rule-text",
"type": "text",
"x": 100,
"y": 940,
"width": 800,
"height": 60,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": null,
"seed": 1015,
"version": 1,
"versionNonce": 1015,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false,
"text": "The Dependency Rule: Source code dependencies point INWARD only.\nNothing in an inner circle can know about anything in an outer circle.",
"fontSize": 14,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 53,
"containerId": null,
"originalText": "The Dependency Rule: Source code dependencies point INWARD only.\nNothing in an inner circle can know about anything in an outer circle."
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}%%