Skip to content

Instantly share code, notes, and snippets.

@sahas-
Last active April 7, 2024 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sahas-/c6e59040139cf79d142134957c8c5c77 to your computer and use it in GitHub Desktop.
Save sahas-/c6e59040139cf79d142134957c8c5c77 to your computer and use it in GitHub Desktop.
In Cell-Based Architecture, what is a Cell?

What is a Cell

A Cell

  • Is a module that aggregates business capabilities and manages their internal intricacies.

  • Is a self-contained unit that groups functionalities together based on business capabilities into a single cohesive unit.

  • Might internally use sub-components to achieve the complex business tasks but these components wouldn’t be separately deployable.

  • Has clear and well-established boundaries that define its area of responsibility, data ownership and exposes explicit interfaces. Can leverage various communication mechanisms such as APIs, events and messages.

  • Implements necessary mechanisms for monitoring their health, performance and logging activity.

  • From the complexity perspective, a couple of pointers to consider

    • Expertise: cells that combine functionalities requiring vastly different skill sets (e.g. data management and front-end development. clinical terminology and API development) can become counter-productive, complex to build and maintain.

    • Processes and practices: different areas often follow different practices. Merging these within a single cell can lead to inefficiency.

Illustrative Example

Lets assume that we want to provide a comprehensive solution for managing drug information, enabling analytics, and delivering insights for the medication cabinet inventory management system. How would it look like in the cell-based architecture paradigm?

Drug Library Cell

Core functionality (component)

Responsible for fetching and maintaining the drug information

  • By Importing the external drug library APIs or datasets.

  • Apply global transformations, enrich and standardize to industry standards.

  • Translate and normalize external data library data to a format compatible with organization-specific concepts used within the platform to minimize impacts of the external changes to the downstream modules. A.k.a domain-agnostic, global transformation and normalization.

  • Provide APIs for other cells to access the drug information.

Configuration management (component)

Responsible for

  • Storing tenant-specific settings like preferred drug nomenclatures or additional attributes.

  • Mapping external drug library data to the tenant-specific terminology codesets.

API Gateway (component)

Responsible for

  • Secure and expose APIs for the external user interface application to interact with the cell for configuration and data access.

External GUI application

Responsible for providing a user interface for the tenant personnel to configure settings, map drug data and potentially view drug information retrieved by the cell.

Note:

  1. Typically external applications aren’t considered as a cell or part of the cell because typically they aren’t
    • Not self-contained: UI rely on one or more APIs to function.

    • Not independently deployable: Although it's technically possible to deploy the standalone GUI application, its functionality is tied to one or more API to be useful for the users.

Analytical Data Processing Cell

Core functionality (component)

Responsible for

  • Receiving raw data from the Drug Library Cell.

  • Implementing data processing pipelines to clean, transform, prepare the data for analysis.

  • Catalog data products, data quality information and associated metadata.

Data Visualization Cell

Responsible for creating and maintaining the user interface for visualizing and interacting with the processed data.

Data Retrieval (component)

  • Responsible for connecting to one or more data sources where the processed data from the Analytical Data Processing Cell resides.

Charting and visualization (component)

Responsible for

  • Implementing charts and other necessary visual representations.

  • Allowing users to interact with the visualization to explore the data further such as filtering and drill down.


graph TB

    subgraph GUI
        GUI-Application
    end
    
    subgraph External-Libs
        NDC[NDC]
        RxNorm[RxNorm]
        Tenant-Library[Tenant-Library]
    end

    subgraph Drug-Library-Cell
        subgraph Core
            Import[Import]
            Standardize[Standardize]
            RESTfulAPI[API-Handlers]
            RESTfulAPI --impl--> Import
            RESTfulAPI --impl--> Standardize
        end
        subgraph Configuration management
            Tenant-Preferences
            Mappings
            RESTfulAPI --impl--> Tenant-Preferences
            RESTfulAPI --impl--> Mappings
        end
        subgraph API-GW
            APIs
            Authorizer-Integration
        end
    end
    
    subgraph Data-Platform-Cell
        Data-LakeHouse
        Data-Product-Catalog
        subgraph Analytical-Data-Processing-Cell
            Data-Ingestion
            Data-Pipelines
        end
        Data-Pipelines <--> Data-LakeHouse
        Data-Pipelines --> Data-Product-Catalog
        Data-Ingestion --> Data-Pipelines

    end

    subgraph Data-Visualization-Cell
        Data-Retrieval
        Dashboards
    end

    GUI-Application <--use--> APIs
    APIs <--authx--> Authorizer-Integration
    APIs <--fwd--> RESTfulAPI
    External-Libs --import--> APIs
    APIs --send analytical data-->Data-Ingestion
    Data-Retrieval <--> Data-Product-Catalog
    Data-LakeHouse --> Data-Retrieval
    Data-Retrieval --> Dashboards

    User --use--> GUI-Application
    User --use-->Dashboards
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment