Skip to content

Commit bcf158c

Browse files
committed
Fixed issue with namespace links
1 parent 7017afa commit bcf158c

3 files changed

Lines changed: 10 additions & 8 deletions

File tree

.github/workflows/pages.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ on:
77
jobs:
88
deploy:
99
runs-on: ubuntu-latest
10+
env:
11+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
1012
steps:
1113
- uses: actions/checkout@v4
1214
- name: Deploy

docs/html/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,14 +173,14 @@ <h1 class="doxsection"><a class="anchor" id="autotoc_md5"></a>
173173
<p>La arquitectura en este demo está organizada en proyectos de C# independientes[^2], donde cada proyecto corresponde a un círculo:</p>
174174
<p>[^2]: En la <a href="https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures">documentación de Microsoft sobre Clean Architecture</a> el círculo central es <span class="tt">Application Core</span> e incluye lo que en la documentación original de <a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html">Clean Architecture</a> son los círculos <span class="tt">Entities</span> y <span class="tt">Use Cases</span>. A pesar de ser una demo en .NET, usamos la terminología original.</p>
175175
<ol type="1">
176-
<li><a href="./html/namespaceTaskManagement_1_1Domain.html">TaskManagement.Domain</a> es una librería de C# en la que se define el <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/4_Conceptos/4_Dominio.md">dominio</a> de la aplicación: <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/2_Tecnicas_y_herramientas/2_08_.Patrones_de_diseno/2_08_Entity.md">entidades</a> y <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/2_Tecnicas_y_herramientas/2_08_.Patrones_de_diseno/2_08_Value_Object.md">objetos valor</a>, eventos y excepciones. El domino utiliza <a href="../src/TaskManagement.Domain/Events/DomainEvent.cs">eventos</a> para informar cuando se crea, se completa, o se asigna una tarea, o cuando cambia su prioridad —ver por ejemplo la propiedad <span class="tt">TaskItem.DomainEvents</span> y el método <span class="tt">TaskItem.Create</span> en <a href="../src/TaskManagement.Domain/Entities/TaskItem.cs">TaskItem.cs</a>—; por esto, esta aplicación también utiliza una <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/3_Plantillas/3_13_Event_Driven_Architecture.md">arquitectura dirigida por eventos</a>. La capa de dominio tiene la responsabilidad de generar eventos, pero es la capa de aplicación la que tienen la responsabilidad de procesarlos —ver por ejemplo <span class="tt">CreateTaskCommand.Handle</span> en <a href="../src/TaskManagement.Application/Commands/CreateTaskCommand.cs">CreateTaskCommand.cs</a>—. El proyecto <a href="../src/TaskManagement.Domain/TaskManagement.Domain.csproj"><span class="tt">TaskManagement.Domain</span></a> no referencia ningún otro proyecto, es el centro de los círculos concéntricos.</li>
177-
<li><a href="./html/namespaceTaskManagement_1_1Application.html">TaskManagement.Application</a> es otra librería de C# en la que se definen las funcionalidades de la aplicación —comandos y consultas—, o dicho de otra forma, donde se implementa la lógica de los casos de uso. Esta aplicación usa el patrón <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/2_Tecnicas_y_herramientas/2_09_.Patrones_de_arquitectura/2_09_CQRS.md">CQRS</a> donde los comandos están separados de las consultas —ver por ejemplo la clase <span class="tt">CreateTaskCommand</span> en <a href="../src/TaskManagement.Application/Commands/CreateTaskCommand.cs">CreateTaskCommand.cs</a> y la clase <span class="tt">GetTaskBuyIdQuery</span> en <a href="../src/TaskManagement.Application/Queries/GetTaskByIdQuery.cs">GetTaskByIdQuery.cs</a>—. La capa de aplicación define —y utiliza— abstracciones que emplean el patrón de <a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/overview">inyección de dependencias</a> —ver por ejemplo las interfaces <span class="tt">IEmailService</span> en <a href="../src/TaskManagement.Application/Interfaces/IEmailService.cs">IEmailService.cs</a>, <span class="tt">ITaskRepository</span> en <a href="../src/TaskManagement.Application/Interfaces/ITaskRepository.cs">ITaskRepository.cs</a>, <span class="tt">ITaskReadRepository</span> en <a href="../src/TaskManagement.Application/Interfaces/ITaskReadRepository.cs">ITaskReadRepository.cs</a> o <span class="tt">IUnitOfWork</span> en <a href="../src/TaskManagement.Application/Interfaces/IUnitOfWork.cs">IUnitOfWork.cs</a>—[^3]. Las clases concretas que implementan estas abstracciones están definidas en la capa de infraestructura —ver por ejemplo las clases <span class="tt">TaskRepository</span> y <span class="tt">TaskReadRepository</span> en <a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskRepository.cs">TaskRepository.cs</a><a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskReadRepository.cs">TaskReadRepository.cs</a>, respectivamente— y también son creadas en tiempo de ejecución en la capa de interfaz API —ver las llamadas a <span class="tt">builder.services…
176+
<li><a href="./namespaceTaskManagement_1_1Domain.html">TaskManagement.Domain</a> es una librería de C# en la que se define el <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/4_Conceptos/4_Dominio.md">dominio</a> de la aplicación: <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/2_Tecnicas_y_herramientas/2_08_.Patrones_de_diseno/2_08_Entity.md">entidades</a> y <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/2_Tecnicas_y_herramientas/2_08_.Patrones_de_diseno/2_08_Value_Object.md">objetos valor</a>, eventos y excepciones. El domino utiliza <a href="../src/TaskManagement.Domain/Events/DomainEvent.cs">eventos</a> para informar cuando se crea, se completa, o se asigna una tarea, o cuando cambia su prioridad —ver por ejemplo la propiedad <span class="tt">TaskItem.DomainEvents</span> y el método <span class="tt">TaskItem.Create</span> en <a href="../src/TaskManagement.Domain/Entities/TaskItem.cs">TaskItem.cs</a>—; por esto, esta aplicación también utiliza una <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/3_Plantillas/3_13_Event_Driven_Architecture.md">arquitectura dirigida por eventos</a>. La capa de dominio tiene la responsabilidad de generar eventos, pero es la capa de aplicación la que tienen la responsabilidad de procesarlos —ver por ejemplo <span class="tt">CreateTaskCommand.Handle</span> en <a href="../src/TaskManagement.Application/Commands/CreateTaskCommand.cs">CreateTaskCommand.cs</a>—. El proyecto <a href="../src/TaskManagement.Domain/TaskManagement.Domain.csproj"><span class="tt">TaskManagement.Domain</span></a> no referencia ningún otro proyecto, es el centro de los círculos concéntricos.</li>
177+
<li><a href="./namespaceTaskManagement_1_1Application.html">TaskManagement.Application</a> es otra librería de C# en la que se definen las funcionalidades de la aplicación —comandos y consultas—, o dicho de otra forma, donde se implementa la lógica de los casos de uso. Esta aplicación usa el patrón <a href="https://github.com/ucudal/ANDIS_Conceptos/blob/main/2_Tecnicas_y_herramientas/2_09_.Patrones_de_arquitectura/2_09_CQRS.md">CQRS</a> donde los comandos están separados de las consultas —ver por ejemplo la clase <span class="tt">CreateTaskCommand</span> en <a href="../src/TaskManagement.Application/Commands/CreateTaskCommand.cs">CreateTaskCommand.cs</a> y la clase <span class="tt">GetTaskBuyIdQuery</span> en <a href="../src/TaskManagement.Application/Queries/GetTaskByIdQuery.cs">GetTaskByIdQuery.cs</a>—. La capa de aplicación define —y utiliza— abstracciones que emplean el patrón de <a href="https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/overview">inyección de dependencias</a> —ver por ejemplo las interfaces <span class="tt">IEmailService</span> en <a href="../src/TaskManagement.Application/Interfaces/IEmailService.cs">IEmailService.cs</a>, <span class="tt">ITaskRepository</span> en <a href="../src/TaskManagement.Application/Interfaces/ITaskRepository.cs">ITaskRepository.cs</a>, <span class="tt">ITaskReadRepository</span> en <a href="../src/TaskManagement.Application/Interfaces/ITaskReadRepository.cs">ITaskReadRepository.cs</a> o <span class="tt">IUnitOfWork</span> en <a href="../src/TaskManagement.Application/Interfaces/IUnitOfWork.cs">IUnitOfWork.cs</a>—[^3]. Las clases concretas que implementan estas abstracciones están definidas en la capa de infraestructura —ver por ejemplo las clases <span class="tt">TaskRepository</span> y <span class="tt">TaskReadRepository</span> en <a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskRepository.cs">TaskRepository.cs</a><a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskReadRepository.cs">TaskReadRepository.cs</a>, respectivamente— y también son creadas en tiempo de ejecución en la capa de interfaz API —ver las llamadas a <span class="tt">builder.services…
178178
.AddScoped&lt;IUnitOfWork&gt;(…), .AddScoped&lt;ITaskReadRepository,
179179
TaskReadRepository&gt;(), y .AddScoped&lt;IDomainEventDispatcher,
180180
MediatRDomainEventDispatcher&gt;()</span> en <a href="../src/TaskManagement.API/Program.cs">Program.cs</a>—. Los eventos creados en la capa de dominio son procesados en la capa de aplicación usando una abstracción —ver la interfaz <span class="tt">IDomainEventDispatcher</span> en <a href="../src/TaskManagement.Application/Interfaces/IDomainEventDispatcher.cs">IDomainEventDispatcher.cs</a>—; y esa abstracción también está implementada en una clase definida en la capa de infraestructura —ver la clase <span class="tt">MediatRDomainEventDispatcher</span> en <a href="../src/TaskManagement.Infrastructure/EventDispatching/MediatRDomainEventDispatcher.cs">MediatRDomainEventDispatcher.cs</a>—. El proyecto <a href="../src/TaskManagement.Application/TaskManagement.Application.csproj"><span class="tt">TaskManagement.Application</span></a> referencia solamente el proyecto <a href="../src/TaskManagement.Domain/TaskManagement.Domain.csproj"><span class="tt">TaskManagement.Domain</span></a>, la dependencia es de un círculo externo al centro de los círculos concéntricos.</li>
181-
<li><a href="./html/namespaceTaskManagement_1_1Infrastructure.html">TaskManagement.Infrastructure</a> es otra librería de C# en la que se definen cómo se implementa la infraestructura para las abstracciones definidas en la capa de aplicación de —repositorios, despacho de eventos y persistencia—. Las abstracciones <a href="../src/TaskManagement.Application/Interfaces/ITaskRepository.cs"><span class="tt">ITaskRepository</span></a> y <a href="../src/TaskManagement.Application/Interfaces/ITaskReadRepository.cs"><span class="tt">ITaskReadRepository</span></a> de la capa de aplicación se implementan con las clases <a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskRepository.cs"><span class="tt">TaskRepository</span></a> y <a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskReadRepository.cs"><span class="tt">TaskReadRepository</span></a>, respectivamente, de esta capa de infraestructura. También en este caso se usa injección de dependencias en la capa de interfaz API —ver por ejemplo en <a href="../src/TaskManagement.API/Program.cs"><span class="tt">Program</span></a> las llamadas a <span class="tt">builder.services...AddScoped&lt;ITaskRepository, TaskRepository&gt;()</span> y <span class="tt">builder.services...AddScoped&lt;ITaskReadRepository, TaskReadRepository&gt;()</span>—. Como ya fue mencionado antes, la abstracción <a href="../src/TaskManagement.Application/Interfaces/IDomainEventDispatcher.cs"><span class="tt">IDomainEventDispatcher</span></a> definida en la capa de aplicación se implementa con la clase <a href="../src/TaskManagement.Infrastructure/EventDispatching/MediatRDomainEventDispatcher.cs"><span class="tt">MediatRDomainEventDispatcher</span></a> de esta capa de infraestructura y la instancia se crea en tiempo de ejecución también con injección de dependencias en la capa de interfaz API en <a href="../src/TaskManagement.API/Program.cs"><span class="tt">Program</span></a> —ver <span class="tt">builder.services...AddScoped&lt;IDomainEventDispatcher,
181+
<li><a href="./namespaceTaskManagement_1_1Infrastructure.html">TaskManagement.Infrastructure</a> es otra librería de C# en la que se definen cómo se implementa la infraestructura para las abstracciones definidas en la capa de aplicación de —repositorios, despacho de eventos y persistencia—. Las abstracciones <a href="../src/TaskManagement.Application/Interfaces/ITaskRepository.cs"><span class="tt">ITaskRepository</span></a> y <a href="../src/TaskManagement.Application/Interfaces/ITaskReadRepository.cs"><span class="tt">ITaskReadRepository</span></a> de la capa de aplicación se implementan con las clases <a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskRepository.cs"><span class="tt">TaskRepository</span></a> y <a href="../src/TaskManagement.Infrastructure/Persistence/Repositories/TaskReadRepository.cs"><span class="tt">TaskReadRepository</span></a>, respectivamente, de esta capa de infraestructura. También en este caso se usa injección de dependencias en la capa de interfaz API —ver por ejemplo en <a href="../src/TaskManagement.API/Program.cs"><span class="tt">Program</span></a> las llamadas a <span class="tt">builder.services...AddScoped&lt;ITaskRepository, TaskRepository&gt;()</span> y <span class="tt">builder.services...AddScoped&lt;ITaskReadRepository, TaskReadRepository&gt;()</span>—. Como ya fue mencionado antes, la abstracción <a href="../src/TaskManagement.Application/Interfaces/IDomainEventDispatcher.cs"><span class="tt">IDomainEventDispatcher</span></a> definida en la capa de aplicación se implementa con la clase <a href="../src/TaskManagement.Infrastructure/EventDispatching/MediatRDomainEventDispatcher.cs"><span class="tt">MediatRDomainEventDispatcher</span></a> de esta capa de infraestructura y la instancia se crea en tiempo de ejecución también con injección de dependencias en la capa de interfaz API en <a href="../src/TaskManagement.API/Program.cs"><span class="tt">Program</span></a> —ver <span class="tt">builder.services...AddScoped&lt;IDomainEventDispatcher,
182182
MediatRDomainEventDispatcher&gt;()</span>—. El proyecto <a href="../src/TaskManagement.Infrastructure/TaskManagement.Infrastructure.csproj"><span class="tt">TaskManagement.Infrastructure</span></a> referencia solamente el proyecto <a href="../src/TaskManagement.Application/TaskManagement.Application.csproj"><span class="tt">TaskManagement.Application</span></a>, la dependencia es de un círculo externo a un círculo interno. Esta capa de infraestructura tiene también la configuración de los frameworks de acceso a datos.</li>
183-
<li><a href="./html/namespaceTaskManagement_1_1API.html">TaskManagement.API</a> es una aplicación web en .NET en la que se define la interfaz, en esta demo, una API REST. El proyecto referencia tanto al proyecto <a href="../src/TaskManagement.Application/TaskManagement.Application.csproj"><span class="tt">TaskManagement.Application</span></a> como al proyecto <a href="../src/TaskManagement.Infrastructure/TaskManagement.Infrastructure.csproj"><span class="tt">TaskManagement.Infrastructure</span></a>, ambos en círculos internos. Como toda aplicación web en .NET la carpeta <a href="../src/TaskManagement.API/Controllers/"><span class="tt">Controllers</span></a> contiene los controladores que implementan los <em>endpoint</em> de la API REST —ver por ejemplo <a href="../src/TaskManagement.API/Controllers/TasksController.cs"><span class="tt">TasksController.CreateTaskRequest</span></a>—. El archivo <a href="../TaskManagement.http"><span class="tt">TaskManagement.http</span></a> tiene ejemplos para invocar la API REST.</li>
183+
<li><a href="./namespaceTaskManagement_1_1API.html">TaskManagement.API</a> es una aplicación web en .NET en la que se define la interfaz, en esta demo, una API REST. El proyecto referencia tanto al proyecto <a href="../src/TaskManagement.Application/TaskManagement.Application.csproj"><span class="tt">TaskManagement.Application</span></a> como al proyecto <a href="../src/TaskManagement.Infrastructure/TaskManagement.Infrastructure.csproj"><span class="tt">TaskManagement.Infrastructure</span></a>, ambos en círculos internos. Como toda aplicación web en .NET la carpeta <a href="../src/TaskManagement.API/Controllers/"><span class="tt">Controllers</span></a> contiene los controladores que implementan los <em>endpoint</em> de la API REST —ver por ejemplo <a href="../src/TaskManagement.API/Controllers/TasksController.cs"><span class="tt">TasksController.CreateTaskRequest</span></a>—. El archivo <a href="../TaskManagement.http"><span class="tt">TaskManagement.http</span></a> tiene ejemplos para invocar la API REST.</li>
184184
</ol>
185185
<p>[^3]: Algunos autores definen las abstracciones relacionadas con el dominio en la capa de dominio, aunque no sean utilizadas en esa capa. Siguiendo esos autores, interfaces como <span class="tt">ITaskRepository</span> se definirían en la capa de dominio. En esta demo, interfaces como esa son definidas en la capa de aplicación, porque es allí donde se usan.</p>
186186
<h1 class="doxsection"><a class="anchor" id="autotoc_md6"></a>

docs/index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ independientes[^2], donde cada proyecto corresponde a un círculo:
9696
son los círculos `Entities` y `Use Cases`. A pesar de ser una demo en .NET,
9797
usamos la terminología original.
9898

99-
1. [TaskManagement.Domain](./html/namespaceTaskManagement_1_1Domain.html)
99+
1. [TaskManagement.Domain](./namespaceTaskManagement_1_1Domain.html)
100100
es una librería de C# en la que se define el
101101
[dominio](https://github.com/ucudal/ANDIS_Conceptos/blob/main/4_Conceptos/4_Dominio.md)
102102
de la aplicación:
@@ -119,7 +119,7 @@ independientes[^2], donde cada proyecto corresponde a un círculo:
119119
[`TaskManagement.Domain`](../src/TaskManagement.Domain/TaskManagement.Domain.csproj)
120120
no referencia ningún otro proyecto, es el centro de los círculos concéntricos.
121121

122-
2. [TaskManagement.Application](./html/namespaceTaskManagement_1_1Application.html)
122+
2. [TaskManagement.Application](./namespaceTaskManagement_1_1Application.html)
123123
es otra librería de C# en la que se definen las funcionalidades de la
124124
aplicación —comandos y consultas—, o dicho de otra forma, donde se implementa
125125
la lógica de los casos de uso. Esta aplicación usa el patrón
@@ -163,7 +163,7 @@ independientes[^2], donde cada proyecto corresponde a un círculo:
163163
la dependencia es de un círculo externo al centro de los círculos
164164
concéntricos.
165165

166-
3. [TaskManagement.Infrastructure](./html/namespaceTaskManagement_1_1Infrastructure.html)
166+
3. [TaskManagement.Infrastructure](./namespaceTaskManagement_1_1Infrastructure.html)
167167
es otra librería de C# en la que se definen cómo se implementa la
168168
infraestructura para las abstracciones definidas en la capa de aplicación de
169169
—repositorios, despacho de eventos y persistencia—. Las abstracciones
@@ -195,7 +195,7 @@ independientes[^2], donde cada proyecto corresponde a un círculo:
195195
infraestructura tiene también la configuración de los frameworks de acceso a
196196
datos.
197197

198-
4. [TaskManagement.API](./html/namespaceTaskManagement_1_1API.html) es
198+
4. [TaskManagement.API](./namespaceTaskManagement_1_1API.html) es
199199
una aplicación web en .NET en la que se define la interfaz, en esta demo, una
200200
API REST. El proyecto referencia tanto al proyecto
201201
[`TaskManagement.Application`](../src/TaskManagement.Application/TaskManagement.Application.csproj)

0 commit comments

Comments
 (0)