.. _index:

=========================
ACD application framework
=========================

ACD is an support framework for applications designed with Clean Architecture [#CleanArchitecture]_.

It defines basic abstraction for separating layers of application. Also basic tools for business logic layer inspired by Domain Driven Design [#DDD]_.

Defined application layers

   * :ref:`Domain <domain>`
   * :ref:`Persistence <persistence>`
   * :ref:`Access <access>`
   * :ref:`Messaging <messaging>`

.. uml::

   @startuml
   rectangle "Access" {
      [Controller]
      () "Request"
      () "Response"
   }

   rectangle "Domain" {
       [Service]
       [Entity]
       [EntityId]
       [SearchRequest]
   }

   rectangle "Persistence" {
      () "Inserter[Entity]" as Inserter
      () "Updater[Entity]" as Updater
      () "Getter[Entity]" as Getter
      () "Finder[SearchRequest, Entity]" as Finder
   }

   rectangle "Messaging" {
      [Observer]
      [Message]
   }

   Controller <-- Request
   Controller --> Response
   Controller --> Service

   Inserter -> [Entity]
   Updater -> [Entity]
   Getter -> [EntityId]
   Finder -> [SearchRequest]

   Inserter <.. Service
   Getter <.. Service
   Updater <.. Service
   Finder <.. Service
   [Entity] <.. Service
   [Entity] --> [EntityId] : identified by
   [SearchRequest] <.. Service
   @enduml


Project state
-------------
Project is currently in design phase.

Requirements
~~~~~~~~~~~~
ACD works with Python 3.6+

Contents
--------

.. toctree::
   :name: mastertoc
   :maxdepth: 2
   :glob:

   domain
   persistence
   access
   messaging
   *

Indices and tables
------------------

* :ref:`genindex`
* :ref:`search`

.. image:: https://gitlab.com/lzukowski/acd/badges/master/build.svg
   :alt: Build status
   :target: https://gitlab.com/lzukowski/acd


.. [#CleanArchitecture] `Clean Architecture <https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html>`_
.. [#DDD] `Domain Driven-Design <https://en.wikipedia.org/wiki/Domain-driven_design>`_
