Virto Commerce Atomic Architecture In Action

In this document, We map Virto Atomic Architecture™ and current Virto Commerce technologies and modules.

Note: You can create a custom module or extend the default Virto Commerce functionality.

Atoms

Atoms are the most basic building blocks of this world. In Virto Commerce, we are testing and choosing Best in Breed components, so the developer can focus on the implementation of business scenarios and don’t worry about architecture, patterns and components. Atoms are built by these rules:

  1. Should not be composed of other components/only uses native elements or framework-specific components like native elements.
  2. Should not have access to a higher level directly.
  3. Should not implement any application-specific business logic.

Patterns

In software development, a pattern describes a general solution to a design problem that recurs repeatedly in many projects. We used some of them as atoms to build the modern solution with clean architecture.

  • 3-tier architecture - Virto Commerce module uses 3-tier architecture. API/Presentation Layer, Domani/Business Logic Layer, and Persistent Layer.
  • Modularity - Core of Virto Commerce. The set of the services which are responsible for modularity, module information and dependency resolving between modules.
  • Dependency Injection - the dependency injection (DI) software design pattern, which is a technique for achieving
    Inversion of Control (IoC) between classes and their dependencies.
  • Factory - follow the Factory method pattern. They are simply the place where you instantiate and override objects. This means that in Virto Commerce there are no “new” statements in the codebase.
  • Native Extensibility - unique extension framework based on reflection, abstract-factory and dependency injection. Allows extending business logic, API contracts, Data Model and Admin UI without touching the source code.
  • Exprience API (xAPI) - Hide all the frontend business logic of a module behind them and give a very simple and straightforward GraphQL business interface.

3rd-Party Frameworks and Components

We tested and choose the best in breed 3rd-Party Frameworks and Components which make Enterprise requirements.

  • .NET 8 - Cross-platform. Open Source. A developer platform.
  • ASP.NET Core - Extends the .NET developer platform with tools and libraries specifically for building web apps and Web API.
  • Entity Framework Core - Modern object-database mapper for .NET. By default use MS SQL provider.
  • GraphQL - Implementation of GraphQL in .NET.
  • MS Sql Server - primary data-storage.
  • PostgreSql - primary data-storage.
  • Hangfire - Platform for background processing and recurring jobs.
  • Redis - Distributed cache storage.
  • Azure Application Insight - Monitoring tools.
  • SignalR - Incredibly simple real-time web.
  • CSV Helper - Library for reading and writing CSV files. Extremely fast, flexible, and easy to use
  • FluentValidation - Validation library that uses a fluent interface and lambda expressions for building strongly-typed validation rules.
  • Swagger UI - dynamically generate documentation from a Swagger-compliant API.
  • Nuke.build - The cross-platform build automation solution for .NET with C# DSL.

Virto Commerce Components

We created our own interfaces, abstractions, utilities to simplify the development routine and don’t worry about implementation. Virto Commerce Team will care about implementation without Breaking Changes.

  • Cache - Default ASP.NET Core in-memory cache with cache invalidation via Redis.
  • Settings - Design-Time Module Settings with special fluent syntax and localization.
  • [Security]Title - Documentation - Role-based security with permissions to have secured access to any API.
  • Events - Internal event bus for fast communication between modules.
  • Generic Import/Export - Native export/import functionality for either backup or migration processes.
  • DistributedLock - Startup synchronization for singleton operations in multi-instance configurations.
  • GenericCrud - Utility interfaces and class to improve developer productivity for implementation of CRUD operations for new entities. How to implement services with new generic CRUD in Virto Commerce B2B platform - YouTube
  • ChangeLog - implementation of Change Log.
  • DynamicProperties - Set of the interfaces, services, UI elements to implement the ability to extend an entity with new properties run-time and using the admin interface.
  • Localization - Abstraction above localization files.
  • Virto Commerce CLI - is the official CLI .NET Core GlobalTool that helps you build, test and deploy releases, create and push NuGet packages, provide package management for projects based on VirtoCommerce, and automate common DevOps tasks.

Virto Commerce Modules

We developed these modules which can be helpful in any solution.

  • Assets - programming interface that helps work with the file system.
  • WebHooks - allows to register and send webhook notifications for any event available in the system.
  • Event Bus - enables you to be notified of new Virto Commerce events or changes via a Message Queue of your choice.
  • Notifications - supports notifications infrastructure for Email and SMS notifications.
  • Search - supports full-text search infrastructure for any entities. Virto Commerce supports Elastic Search, Elasticcloud and Azure Search providers but the developer can easily extend it with own one.

Molecules

Being assembled together to get various functionality, atoms are composed of “molecules”. Molecules are built by these rules:
1. Created from one or more atoms.
2. Built with a single responsibility principle.
3. Be headless, having API and events for communication.
4. Have its own private persistent storage.
5. Support extensibility (injection, overriding) from other cells.
6. Should not have access to a higher level directly.

Virto Commerce Modules

Our team transformed the experience from multiple eCommerce projects to these eCommerce modules (molecules). From partners, we received the feedback that these modules are covered 70-80% requirements of MVP.

We understand that every project is unique, so it’s up to your solution to choose which modules make sense for your as is; which modules should be extended/customized and which modules should be created from the scratch.

Don’t worry, If you miss some modules, you can install it later by demand. Check Virto Commerce roadmap and latest news digest topics, because we are adding a new feature and modules continuously.

  • Commerce Core - Represents common eCommerce domain model and base abstractions, which can be used and implemented in derived modules. It also exposes some common eCommerce API for storefront security, SEO, fulfillments, payments and taxes evaluation.
  • Store - The module is responsible for store management and consolidation of all information with one sales channel. Ex: Catalog, Payment Methods, Shipment, Settings, etc.
  • Customer - The module is responsible for B2B organization structure with flexible organization tree. You can configure any organization structure for customer and your employee based on business requirements, manage contracts and personalization. Has native integration with Search - You can use a full-text search engine to find a person or an organization.
  • Catalog - Enables adding items to your ecommerce store to market any physical goods or digital content. Flexible taxonomy with Multilanguage, Dictionary and Geo-Points properties are supported. You can enrich product details with images, Videos, PDF and etc. Full-text search engine helps to find the content in the catalog.
  • Pricing - Is designed for storing, managing and evaluating product prices from multiple price lists. It supports tier-based pricing and Dynamic assignment for personalizations.
  • Inventory - The module is responsible for stock level controlling in multiple fulfilment centres. Supports multiple fulfilment centres with address, geo point. Designed for Consolidation of all stock information from different fulfilment centres and provide real-time access to this information via API. Ready for Integrations with ERP.
  • Marketing - Represents a marketing management system with Dynamic content and Different Marketing Promotions. It allows marketers to create personalized shopping experiences for customers. Using this feature, the marketer can deliver elements of a shopping experience based on a set of conditions or customer contexts.
  • Shopping Cart - The module is responsible for Shopping Cart and Wishlists functionality. Supports multiple carts for a customer. Can be related to an organization.
  • Quotes - Represents Quotes management system. Can be related to an organization. You can adjust price and assortments in the Quote Request via the Admin interface. Ready for the approval process.
  • Orders - Represents document-based order management system with the possibility to add an unlimited number of documents related to customer order. Supports Multiple shipment and payment documents. Flexible Statuses. Full-text search engine helps to find the relevant orders by keyword.
  • Payment - Provides the ability to extend payment provider list with custom providers and also provides an interface and API for managing these payment providers.
  • Shipping - Provides the ability to extend shipping provider list with custom providers and also provides an interface and API for managing these shipping providers.
  • Tax - Provides the ability to extend tax provider list with custom providers and also provides an interface and API for managing these tax providers.
  • CMS Content - Represents Content Management System with the opportunity to manage: Theme, Pages, Link lists and Blogs via Admin interface without developers.
  • Image tools - allows generating thumbnails by predefined rules automatically when you upload images and by demand.
  • Catalog Publishing - The module is a set of tools for assessing the completeness of products for publication by specified criteria.
  • Sitemaps - The module is responsible for Sitemap generation. Supports Catalog, Static Pages.
  • Ecommerce Google Analytics - The module is responsible for integration with Google Analytics. Supports two levels of detail in tracking e-commerce: Basic Ecommerce Tracking that tracks only completed purchases and Enhanced Ecommerce Tracking offers expanded tracking of users’ interactions with products all through the site.
  • Experience API - the layer between clients and enterprise services powered by GraphQL protocol and is tightly coupled to a specific user/touchpoint experience with fast and reliable access, it represents an implementation of Backend for Frontend design pattern (BFF).
  • Avatax - The module provides real-time integration with Avalara Tax automation. This module is officially certified by Avalara to be compatible with Avalara API.
  • Authorize.Net - Authorize.Net Direct Post Method (DPM) payment gateway module provides integration with Authorize.Net DPM through Payment Form (SIM) API.
  • GDPR - The module is allowing you to supply the customer with or delete their personal details from your online store. It is perfectly in line with the General Data Protection Regulation (GDPR) that enables every individual to request their personal data stored on a website or demand to remove such at any time.
  • Dynamic Associations - The module allows to create product association rules. These rules are dynamic, so they are defined by the set of restrictions rather than specific products. So new product which matches rule conditions would be handled by the rule without its change.

Cells

Cells are a set of molecules that are combined by functionality context into one package to implement a complete scenario. Cells are designed as scalable units; we can create new instances of cells, so each cell is a high-available, high-performance, and isolated container.

Here you have the flexibility to use the default Virto Commerce Package or build your unique one.

1 Like